41 votes

Activer les connexions à distance tcp \ ip au serveur SQL Server avec base de données déjà installée avec code ou script (requête)

Je suis le déploiement de sql express avec ma demande. J'aimerai que moteur de base de données pour accepter les connexions à distance. Je sais comment configurer ce manuel en lançant le gestionnaire de configuration sql server, permettant des connexions tcp/ip, spécifier les ports etc.. je me demande si il sera possible de faire la même chose à partir de la ligne de commande.

Ou peut-être que je vais avoir à créer un "Serveur SQL server 2008 Projet" dans visual studio.

EDIT 1

J'ai posté la même question ici, mais j'aimerai faire la même chose sur une instance de sql express qui est déjà installé. Jetez un oeil à la question ici

EDIT 2

J'ai trouvé ces liens qui prétendent faire quelque chose de similaire et je ne peux toujours pas le faire fonctionner.

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

2) http://social.msdn.microsoft.com/Forums/en-US/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


EDIT 3

Comme Krzysztof a déclaré, dans sa réponse que j'ai besoin (en plus d'autres choses que je connais qui sont requis)

1 - activer le protocole TCP/IP

enter image description here

J'ai réussi à le faire lors de l'installation d'une nouvelle instance de SQLExpress passant le paramètre /TCPENABLED=1. Quand j'ai installer sql express comme dans cet exemple. cette instance de sql express aura TCP/IP activé

2 - Ouvrir le droit des ports dans le pare-feu

(Je l'ai fait à la main, mais je trouve que je vais être en mesure de comprendre comment le faire avec c#) Jusqu'à présent j'ai à jouer de la marge avec cette commande de la console:

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

3 - Modifier les propriétés TCP/IP activer une adresse IP

enter image description here

Je n'ai pas été en mesure de comprendre comment faire pour activer une IP, de changer de port, etc.. je pense que ce sera l'étape la plus compliquée à résoudre

4 - Activer l'authentification en mode mixte dans sql server

enter image description here

J'ai réussi à le faire lors de l'installation de SQL Express en passant le paramètre /SECURITYMODE=SQL reportez-vous à l'étape 1 du lien.

SQL Server express requiert ce type d'authentification pour accepter les connexions à distance.

5 - Changer d'utilisateur (sa) par défaut passowrd

Par défaut, le compte administrateur est NULLE passowrd. Pour accepter les connexions à cet utilisateur doit disposer d'un mot de passe. J'ai changé la valeur par défaut passowrd de la sa avec le script:

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

6 - enfin,

sera en mesure de connecto si toutes les dernières étapes sont satisfaites que:

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

en tapant que dans la ligne de commande: la chaîne de connexion en C# sont très similaires. Je vais devoir remplacer -U utilisateur-P mot de passe et pour la source de données. Je n'ai pas de rappeler le nom exact.

36voto

Krzysztof Kozielczyk Points 2883

Je l'ai testé le code ci-dessous avec SQL Server 2008 R2 Express et je crois que nous devrions avoir la solution pour tous les 6 étapes décrites. Nous allons prendre sur eux un par un:

1 - Activer le protocole TCP/IP

Nous pouvons activer le protocole TCP/IP avec 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 - Ouvrir le droit des ports dans le pare-feu

Je crois que votre solution fonctionne, assurez-vous de spécifier le port de droite. Je vous suggère de choisir un autre port que le port 1433 et d'en faire un port statique SQL Server Express sera à l'écoute sur. Je vais être en utilisant 3456 dans ce post, mais s'il vous plaît choisir un autre numéro dans la mise en œuvre réelle (je pense que nous allons voir beaucoup d'applications à l'aide de 3456 bientôt :-)

3 - Modifier les propriétés TCP/IP activer une adresse IP

Nous pouvons utiliser WMI de nouveau. Puisque nous sommes à l'aide de ports statiques 3456, nous avons juste besoin de mettre à jour deux propriétés dans IPAll section: désactiver les ports dynamiques et de définir le port d'écoute d' 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

Notez que je n'ai pas à activer l'une des adresses individuelles pour le faire fonctionner, mais si c'est nécessaire dans votre cas, vous devriez être en mesure d'étendre ce script facilement à le faire.

Juste un rappel que lorsque l'on travaille avec WMI, WBEMTest.exe est votre meilleur ami!

4 - Activer l'authentification en mode mixte dans sql server

Je souhaite que nous pourrions utiliser WMI de nouveau, mais, malheureusement, ce paramètre n'est pas exposé à l'aide de WMI. Il y a deux autres options:

  1. Utiliser LoginMode de la propriété de l' Microsoft.SqlServer.Management.Smo.Server classe, comme décrit ici.

  2. Utilisation LoginMode valeur dans le registre de SQL Server, comme décrit dans ce post. Notez que par défaut, l'instance SQL Server Express est nommé SQLEXPRESS, donc pour mon SQL Server 2008 R2 Express instance le droit de la clé de registre a été HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQLServer.

5 - Changer d'utilisateur (sa) mot de passe par défaut

Vous avez obtenu ce dont un couvert.

6 - Enfin, (se connecter à l'instance)

Puisque nous sommes à l'aide d'un port statique confiée à l'instance SQL Server Express, il n'y a pas besoin d'utiliser le nom de l'instance dans l'adresse du serveur plus.

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

S'il vous plaît laissez-moi savoir si cela fonctionne pour vous (je croise les doigts!).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X