it-swarm.com.de

Aktivieren Sie TCP/IP-Remoteverbindungen zu SQL Server Express bereits installierte Datenbank mit Code oder Skript (Abfrage)

Ich setze sql express mit meiner Anwendung ein. Ich möchte, dass das Datenbankmodul Remoteverbindungen akzeptiert. Ich kann dieses Handbuch konfigurieren, indem ich den SQL Server-Konfigurationsmanager starte, TCP/IP-Verbindungen aktiviere, die Ports spezifiziere usw. Ich frage mich, ob es möglich sein wird, dasselbe über die Befehlszeile zu tun.

Oder vielleicht muss ich ein "SQL Server 2008 Server Project" in Visual Studio erstellen.

EDIT 1

Ich habe die gleiche Frage hier gepostet, aber ich möchte das Gleiche auf einer Instanz von SQL Express tun, die bereits installiert ist. Schauen Sie sich die Frage hier an

BEARBEITEN 2

Ich habe diese Links gefunden, die behaupten, etwas Ähnliches zu tun und ich kann es immer noch nicht zum Laufen bringen.

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

Wie Krzysztof in seiner Antwort sagte, brauche ich (plus andere Dinge, die ich kenne, die erforderlich sind)

1 - TCP/IP aktivieren

enter image description here

Ich habe es geschafft, eine neue Instanz von SQLExpress zu installieren, indem ich den Parameter /TCPENABLED=1 übergeben habe. Wenn ich SQL Express wie in dieses Beispiel installiere. Für diese Instanz von SQL Express ist TCP/IP aktiviert

2 - Öffne die richtigen Ports in der Firewall

(Ich habe diese Anleitung gemacht, aber ich glaube, ich werde herausfinden können, wie es mit c # gemacht wird.) Bisher muss ich mit diesem Konsolenbefehl laut spielen:

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

3 - TCP/IP-Eigenschaften ändern IP-Adresse aktivieren

enter image description here

Ich war nicht in der Lage herauszufinden, wie man eine IP aktiviert, einen Port ändert usw. Ich denke, dies wird der Schritt sein, der komplizierter zu lösen ist

4 - Authentifizierung im gemischten Modus in SQL Server aktivieren

enter image description here

Ich habe es geschafft, SQL Express zu installieren, indem ich den Parameter /SECURITYMODE=SQL an den Link von Schritt 1 weitergegeben habe.

Für SQL Server Express ist dieser Authentifizierungstyp erforderlich, um Remoteverbindungen zu akzeptieren.

5 - Benutzer (sa) Standardpasswort ändern

Standardmäßig hat das sa-Konto ein NULL-Passwort. Um Verbindungen annehmen zu können, muss dieser Benutzer ein Passwort haben. Ich habe das Standard-Passwort der sa mit dem Skript geändert:

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

6 - endlich

wird connecto können, wenn alle letzten Schritte erfüllt sind als:

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

wenn Sie dies in die Befehlszeile eingeben: Die Verbindungszeichenfolge in C # ist sehr ähnlich. Ich muss -U für Benutzer, -P für Kennwort und -S für Datenquelle ersetzen. Ich erinnere mich nicht an die genauen Namen.

37
Tono Nam

Ich habe den folgenden Code mit SQL Server 2008 R2 Express getestet, und ich glaube, wir sollten eine Lösung für alle 6 Schritte haben, die Sie beschrieben haben. Nehmen wir sie einzeln an:

1 - Aktivieren Sie TCP/IP

Wir können das TCP/IP-Protokoll mit WMI aktivieren:

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 - Öffnen Sie die richtigen Ports in der Firewall

Ich glaube, Ihre Lösung wird funktionieren. Stellen Sie nur sicher, dass Sie den richtigen Port angeben. Ich schlage vor, wir wählen einen anderen Port als 1433 aus und machen ihn zu einem statischen Port, auf den SQL Server Express wartet. Ich werde 3456 in diesem Beitrag verwenden, aber wählen Sie bitte eine andere Nummer in der tatsächlichen Implementierung aus (ich glaube, wir werden bald viele Anwendungen mit 3456 sehen :-)

3 - Ändern Sie die TCP/IP-Eigenschaften, um eine IP-Adresse zu aktivieren

Wir können WMI wieder verwenden. Da wir den statischen Port 3456 verwenden, müssen wir nur zwei Eigenschaften im Abschnitt IPAll aktualisieren: Deaktivieren Sie dynamische Ports und setzen Sie den Überwachungsport auf 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

Beachten Sie, dass ich keine der einzelnen Adressen aktivieren musste, damit es funktioniert. Wenn dies jedoch in Ihrem Fall erforderlich ist, sollten Sie dieses Skript problemlos erweitern können.

Nur eine Erinnerung daran, dass WBEMTest.exe Ihr bester Freund ist, wenn Sie mit WMI arbeiten!

4 - Aktivieren Sie die Authentifizierung im gemischten Modus in SQL Server

Ich wünschte, wir könnten WMI erneut verwenden, aber leider wird diese Einstellung nicht über WMI verfügbar gemacht. Es gibt zwei weitere Optionen:

  1. Verwenden Sie die LoginMode-Eigenschaft der Microsoft.SqlServer.Management.Smo.Server-Klasse wie beschrieben hier .

  2. Verwenden Sie den LoginMode-Wert in der SQL Server-Registrierung, wie in dieser Beitrag beschrieben. Beachten Sie, dass die SQL Server Express-Instanz standardmäßig den Namen SQLEXPRESS hat. Für meine SQL Server 2008 R2 Express-Instanz war der richtige Registrierungsschlüssel HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQLServer.

5 - Ändern Sie das Standardpasswort des Benutzers (sa)

Du hast dieses hier abgedeckt.

6 - Zum Schluss (Verbindung zur Instanz herstellen)

Da wir einen statischen Port verwenden, der unserer SQL Server Express-Instanz zugewiesen ist, müssen Sie keinen Instanznamen mehr in der Serveradresse verwenden.

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

Bitte lassen Sie mich wissen, ob dies für Sie funktioniert (Daumen drücken!).

34

Ich empfehle die Verwendung von SMO ( TCP/IP-Netzwerkprotokoll für SQL Server aktivieren ) ..__, war jedoch in meinem Fall nicht verfügbar.

Ich habe die WMI-Befehle von Krzysztof Kozielczyk in PowerShell umgeschrieben.

# 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'
0
Der_Meister