Ative as conexões remotas tcp \ ip para o database já instalado do sql server express com código ou script (consulta)

Estou implantando o sql express com meu aplicativo. Eu vou gostar desse mecanismo de database para aceitar conexões remotas. Eu sei como configurar esse manual, lançando o gerenciador de configuração do SQL Server, permitindo conexões tcp / ip, especificando as portas etc. Eu estou querendo saber se será possível fazer a mesma coisa na linha de comando.

Ou talvez eu tenha que criar um “SQL Server 2008 Server Project” no visual studio.

EDITAR 1

Eu postei a mesma questão aqui, mas eu gostaria de fazer a mesma coisa em uma instância do sql express que já está instalada. Dê uma olhada na pergunta aqui

EDIT 2

Eu encontrei esses links que dizem fazer algo semelhante e ainda não consigo fazer funcionar.

1) http://support.microsoft.com/kb/839980

2) http://social.msdn.microsoft.com/Forums/pt-BR/sqlexpress/thread/c7d3c3af-2b1e-4273-afe9-0669dcb7bd02/

3) http://www.sql-questions.com/microsoft/SQL-Server/34211977/can-not-connect-to-sql-2008-express-on-same-lan.aspx

4) http://datazulu.com/blog/post/Enable_sql_server_tcp_via_script.aspx


EDITAR 3

Como Krzysztof afirmou em sua resposta que eu preciso (além de outras coisas que eu sei que são necessárias)

1 – ativar o TCP / IP

insira a descrição da imagem aqui

Eu consegui fazer isso ao instalar uma nova instância do SQLExpress passando o parâmetro /TCPENABLED=1 . Quando instalo o sql express como neste exemplo . essa instância do sql express terá TCP / IP ativado

2 – Abra as portas certas no firewall

(Eu fiz isso manualmente, mas acredito que serei capaz de descobrir como fazer isso com c #) Até agora eu tenho que jogar aroud com este comando de console:

 netsh firewall set portopening protocol = TCP port = 1433 name = SQLPort mode = ENABLE scope = SUBNET profile = CURRENT 

3 – Modificar as propriedades TCP / IP para ativar um endereço IP

insira a descrição da imagem aqui

Eu não fui capaz de descobrir como ativar um IP, alterar uma porta etc. Eu acho que este será o passo mais complicado para resolver

4 – Habilitar autenticação de modo misto no sql server

insira a descrição da imagem aqui

Eu consegui fazer isso ao instalar o SQL Express passando o parâmetro /SECURITYMODE=SQL referem ao link da etapa 1.

O SQL Server express requer esse tipo de autenticação para aceitar conexões remotas.

5 – Alterar usuário padrão (sa) passowrd

Por padrão, a conta sa tem um passowrd NULL. Para aceitar conexões, este usuário deve ter uma senha. Alterei o passowrd padrão do sa com o script:

 ALTER LOGIN [sa] WITH PASSWORD='*****newPassword****' 

6 – finalmente

poderá conectar-se se todas as últimas etapas forem satisfeitas como:

 SQLCMD -U sa -P newPassword -S 192.168.0.120\SQLEXPRESS,1433 

digitando isso na linha de comando: a seqüência de conexão em C # será muito semelhante. Eu terei que replace -U por usuário, -P por senha e -S por fonte de dados. Eu não me lembro dos nomes exatos.

Eu testei o código abaixo com o SQL Server 2008 R2 Express e acredito que devemos ter uma solução para todas as 6 etapas que você descreveu. Vamos enfrentá-los um a um:

1 – Ativar TCP / IP

Podemos habilitar o protocolo TCP / IP com o WMI :

 set wmiComputer = GetObject( _ "winmgmts:" _ & "\\.\root\Microsoft\SqlServer\ComputerManagement10") set tcpProtocols = wmiComputer.ExecQuery( _ "select * from ServerNetworkProtocol " _ & "where InstanceName = 'SQLEXPRESS' and ProtocolName = 'Tcp'") if tcpProtocols.Count = 1 then ' set tcpProtocol = tcpProtocols(0) ' I wish this worked, but unfortunately ' there's no int-indexed Item property in this type ' Doing this instead for each tcpProtocol in tcpProtocols dim setEnableResult setEnableResult = tcpProtocol.SetEnable() if setEnableResult <> 0 then Wscript.Echo "Failed!" end if next end if 

2 – Abra as portas certas no firewall

Acredito que sua solução funcionará, apenas certifique-se de especificar a porta correta. Eu sugiro que escolhamos uma porta diferente de 1433 e torná-la uma porta estática que o SQL Server Express estará escutando. Eu estarei usando o 3456 neste post, mas por favor escolha um número diferente na implementação real (eu sinto que nós veremos muitos aplicativos usando 3456 em breve 🙂

3 – Modificar as propriedades TCP / IP para ativar um endereço IP

Podemos usar o WMI novamente. Como estamos usando a porta estática 3456, precisamos apenas atualizar duas propriedades na seção IPAll : desabilitar portas dinâmicas e definir a porta de escuta como 3456 :

 set wmiComputer = GetObject( _ "winmgmts:" _ & "\\.\root\Microsoft\SqlServer\ComputerManagement10") set tcpProperties = wmiComputer.ExecQuery( _ "select * from ServerNetworkProtocolProperty " _ & "where InstanceName='SQLEXPRESS' and " _ & "ProtocolName='Tcp' and IPAddressName='IPAll'") for each tcpProperty in tcpProperties dim setValueResult, requestedValue if tcpProperty.PropertyName = "TcpPort" then requestedValue = "3456" elseif tcpProperty.PropertyName ="TcpDynamicPorts" then requestedValue = "" end if setValueResult = tcpProperty.SetStringValue(requestedValue) if setValueResult = 0 then Wscript.Echo "" & tcpProperty.PropertyName & " set." else Wscript.Echo "" & tcpProperty.PropertyName & " failed!" end if next 

Note que eu não tive que habilitar nenhum dos endereços individuais para fazê-lo funcionar, mas se for necessário no seu caso, você deve ser capaz de estender este script facilmente para fazê-lo.

Apenas um lembrete de que, ao trabalhar com o WMI, o WBEMTest.exe é seu melhor amigo!

4 – Habilitar autenticação de modo misto no sql server

Eu gostaria que pudéssemos usar o WMI novamente, mas infelizmente essa configuração não é exposta por meio do WMI. Existem duas outras opções:

  1. Use a propriedade LoginMode da class Microsoft.SqlServer.Management.Smo.Server , conforme descrito aqui .

  2. Use o valor LoginMode no registro do SQL Server, conforme descrito nesta postagem . Observe que, por padrão, a instância do SQL Server Express é denominada SQLEXPRESS , portanto, para a instância do SQL Server 2008 R2 Express, a chave de registro à direita era HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQLServer .

5 – Alterar senha padrão do usuário (sa)

Você tem essa coberta.

6 – Finalmente (conecte a instância)

Como estamos usando uma porta estática atribuída à nossa instância do SQL Server Express, não há mais necessidade de usar o nome da instância no endereço do servidor.

 SQLCMD -U sa -P newPassword -S 192.168.0.120,3456 

Por favor, deixe-me saber se isso funciona para você (dedos cruzados!).

Eu recomendo usar SMO ( Ativar protocolo de rede TCP / IP para SQL Server ). No entanto, não estava disponível no meu caso.

Eu reescrevi os comandos do WMI de Krzysztof Kozielczyk para o PowerShell.

 # Enable TCP/IP Get-CimInstance -Namespace root/Microsoft/SqlServer/ComputerManagement10 -ClassName ServerNetworkProtocol -Filter "InstanceName = 'SQLEXPRESS' and ProtocolName = 'Tcp'" | Invoke-CimMethod -Name SetEnable # Open the right ports in the firewall New-NetFirewallRule -DisplayName 'MSSQL$SQLEXPRESS' -Direction Inbound -Action Allow -Protocol TCP -LocalPort 1433 # Modify TCP/IP properties to enable an IP address $properties = Get-CimInstance -Namespace root/Microsoft/SqlServer/ComputerManagement10 -ClassName ServerNetworkProtocolProperty -Filter "InstanceName='SQLEXPRESS' and ProtocolName = 'Tcp' and IPAddressName='IPAll'" $properties | ? { $_.PropertyName -eq 'TcpPort' } | Invoke-CimMethod -Name SetStringValue -Arguments @{ StrValue = '1433' } $properties | ? { $_.PropertyName -eq 'TcpPortDynamic' } | Invoke-CimMethod -Name SetStringValue -Arguments @{ StrValue = '' } # Restart SQL Server Restart-Service 'MSSQL$SQLEXPRESS'