Я использую следующий скрипт, чтобы определить, запущены ли Named Pipes или нет для проверки безопасности.
Declare @InstanceName varchar(300)
Declare @version varchar(10)
Declare @Regread_cmd varchar(max)
Declare @NPEnabled table (Value varchar(50),Data INT)
set @InstanceName = convert(varchar,(SELECT CASE WHEN SERVERPROPERTY('InstanceName') IS NULL THEN 'MSSQLSERVER' ELSE SERVERPROPERTY('InstanceName') END AS InstanceName))
--select @InstanceName
set @Version = convert(varchar,(select SERVERPROPERTY('ProductMajorVersion') AS ProductMajorVersion))
if (@Version = 10)
set @Version = '10_50'
--select @version
SET @Regread_cmd = 'xp_regread ''HKEY_LOCAL_MACHINE'',''SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL' + @version +'.' + @InstanceName + '\MSSQLServer\SuperSocketNetLib\Np'',''Enabled'';'
--select @Regread_cmd
Insert Into @NPEnabled EXEC(@Regread_cmd)
SELECT CASE WHEN data = 0 THEN 'Pass' WHEN data = 1 THEN 'Fail' ELSE 'Unknown' END AS 'Check2.10' from @NPEnabled
Когда я запускаю этот скрипт.Я не получаю никаких результатов.
Когда я запускаю скрипт самостоятельно:
xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQLServer\SuperSocketNetLib\Np','Enabled'
Я получаю это:
RegOpenKeyEx () вернул ошибку 2, «Системе не удалось найти указанный файл.»
Сообщение 22001, уровень 1, состояние 1
(затронуто 0 строк)
Время завершения: 2019-09-23T16: 23: 17.8673509-04: 00
Но если я напишу сценарий:
xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQLServer\SuperSocketNetLib\Np','Enabled'
Работает.
Что я делаю не так?