编程配置SQL Server TCP设置



每当我们为客户安装SQL Server 2008 R2时,我们都有一个手动过程。我们为实例启用TCP/IPNamed Pipes协议,将TCP Dynamic Ports设置为0,然后将TCP Port设置为非标准端口号(故意禁用浏览器以确保安全)。连接始终是用明确的端口号(即192.168.1.100, 12345

进行的

如何通过Delphi编程配置这些服务器TCP设置?

您可以使用ServerNetworkProtocol WMI类,该类是配置管理类的WMI提供商的一部分。

要访问此类,您必须根据SQL Server版本的专有名称空间。

SQL Server 2005 - ComputerManagement
SQL Server 2008 - ComputerManagement10 
SQL Server 2012 - ComputerManagement11

尝试SQL Server 2008的样本

{$APPTYPE CONSOLE}
uses
  SysUtils,
  ActiveX,
  ComObj,
  Variants;

procedure  EnableSQLServerNetworkProtocol(Const Protocol : string; EnableProtocol: Boolean);
const
  WbemUser            ='';
  WbemPassword        ='';
  WbemComputer        ='localhost';
  wbemFlagForwardOnly = $00000020;
var
  FSWbemLocator : OLEVariant;
  FWMIService   : OLEVariant;
  FWbemObjectSet: OLEVariant;
  FWbemObject   : OLEVariant;
  oEnum         : IEnumvariant;
  iValue        : LongWord;
begin;
  FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
  FWMIService   := FSWbemLocator.ConnectServer(WbemComputer, 'rootMicrosoftSqlServerComputerManagement10', WbemUser, WbemPassword);
  FWbemObjectSet:= FWMIService.ExecQuery(Format('SELECT * FROM ServerNetworkProtocol Where ProtocolName="%s"', [Protocol]),'WQL',wbemFlagForwardOnly);
  oEnum         := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
  if oEnum.Next(1, FWbemObject, iValue) = 0 then
   //if FWbemObject.Enabled<>EnableProtocol then
      Writeln('Result '+VarToStr(FWbemObject.SetEnable(EnableProtocol))); // 0 means OK
end;

begin
 try
    CoInitialize(nil);
    try
      EnableSQLServerNetworkProtocol('Tcp', True);// TCP/IP
      EnableSQLServerNetworkProtocol('Np', True); // Named Pipes
    finally
      CoUninitialize;
    end;
 except
    on E:EOleException do
        Writeln(Format('EOleException %s %x', [E.Message,E.ErrorCode]));
    on E:Exception do
        Writeln(E.Classname, ':', E.Message);
 end;
 Writeln('Press Enter to exit');
 Readln;
end.

注意:此代码必须在安装SQL Server的同一台计算机中执行,如果您想远程执行此任务,则必须将适当的登录参数(用户,通过,服务器)提供到WMI连接。

要设置IP地址和端口,您可以使用ServerNetworkProtocolIPAddressServerNetworkProtocolProperty类。

最新更新