Какие параметры реестра для включения TCP на SQL Server 2005 и 2008? - PullRequest
5 голосов
/ 23 марта 2010

Я хочу программно включить TCP-соединения на SQL Server. Я считаю, что мы можем достичь этого, изменив записи реестра и перезапустив службу SQL Server. Какой реестр я должен редактировать?

Ответы [ 2 ]

8 голосов
/ 29 марта 2010

Если у вас нет веских причин для непосредственного изменения реестра, я советую вам использовать WMI. WMI предоставит вам более независимую от версии реализацию. Доступ к WMI возможен через пространство имен System.Management . Вы могли бы иметь код, который выглядит примерно так:

public void EnableSqlServerTcp(string serverName, string instanceName)
{
    ManagementScope scope =
            new ManagementScope(@"\\" + serverName +
                                @"\root\Microsoft\SqlServer\ComputerManagement");
    ManagementClass sqlService =
            new ManagementClass(scope,
                                new ManagementPath("SqlService"), null);
    ManagementClass serverProtocol =
            new ManagementClass(scope,
                                new ManagementPath("ServerNetworkProtocol"), null);

    sqlService.Get();
    serverProtocol.Get();

    foreach (ManagementObject prot in serverProtocol.GetInstances())
    {
        prot.Get();
        if ((string)prot.GetPropertyValue("ProtocolName") == "Tcp" &&
            (string)prot.GetPropertyValue("InstanceName") == instanceName)
        {
            prot.InvokeMethod("SetEnable", null);
        }
    }

    uint sqlServerService = 1;
    uint sqlServiceStopped = 1;
    foreach (ManagementObject instance in sqlService.GetInstances())
    {
        if ((uint)instance.GetPropertyValue("SqlServiceType") == sqlServerService &&
            (string)instance.GetPropertyValue("ServiceName") == instanceName)
        {
            instance.Get();
            if ((uint)instance.GetPropertyValue("State") != sqlServiceStopped)
            {
                instance.InvokeMethod("StopService", null);
            }
            instance.InvokeMethod("StartService", null);
        }
    }
}

Этот код предполагает ссылку на проект на System.Management.dll и следующее выражение using:

using System.Management;

В блоге Sql Protocols есть статья , в которой подробно рассказывается о том, что делает код выше.

Примечание. Если брандмауэр блокирует порт (ы), вы все равно не сможете получить доступ к серверу по протоколу TCP.

3 голосов
/ 26 марта 2010

Взгляните на HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQLServer\SuperSocketNetLib\Tcp улей.Есть ключи типа Enabled, ListenOnAllIPs и список IP-адресов для прослушивания.

...