Wie kann ich die Sicherheitseinstellungen eines SQL Server-Endpunkts überprüfen?

10

Ich bin dabei, eine TEST-Umgebung für unsere SQL Server-Entwicklungsmitarbeiter zu erstellen.

In der Produktion haben wir 3 SQL Server, SQL01enthält mehrere Datenbanken, auf die gespiegelt wird SQL02. SQL03fungiert als Zeuge in einer "hohen Sicherheit mit automatischem Failover" oder einer synchronen Konfiguration.

Ich habe VMWare P2V verwendet, um alle drei Maschinen auf separate Hardware zu virtualisieren, die SIDs der Maschinen neu zu konfigurieren und die IP-Adressen unserer Produktionsserver von diesen neuen Maschinen aus zu beschädigen.

Ich hatte anfangs vergessen, die Produktionszeugenmaschine zu lochen, daher verwendeten die Datenbanken auf den TEST-Maschinen die SQL03Maschine immer noch als Zeugen. Als ich das Problem bemerkte, entschied ich mich, die Datenbanken in TEST neu zu konfigurieren, um auf den neu virtualisierten TEST-Zeugen zu verweisen TEST03.

Um die Datenbank für die Verwendung des neuen Zeugen neu zu konfigurieren, habe ich auf dem Primärserver den folgenden Befehl eingegeben TEST01:

ALTER DATABASE [TestDB] SET WITNESS = 'TCP://TEST03.domain.inet:5022';

Die Antwort war unerwartet:

The ALTER DATABASE command could not be sent to the remote server instance
'TCP://TEST03.domain.inet:5022'.  The database mirroring configuration was
not changed.  Verify that the server is connected, and try again.

Ich war sehr ratlos über diese Fehlermeldung, da die Konfiguration auf den Produktionsmaschinen funktioniert und auf den Testmaschinen in keiner Weise geändert wurde.

Um dies zum Laufen zu bringen, musste ich einen Testzeugen erstellen LOGIN:

CREATE LOGIN [DOMAIN\SQLServiceAccount] FOR WINDOWS WITH DEFAULT_DATABASE [Master];

und GRANTes CONNECTRechte auf dem fraglichen Endpunkt:

GRANT CONNECT ON ENDPOINT::Mirroring TO [DOMAIN\SQLServiceAccount];

Ich konnte dann die gespiegelten Datenbanken in der TEST-Umgebung erfolgreich auf den neuen Testzeugen verweisen.

Wie kann ich den Endpunkt des Produktionszeugen überprüfen, um festzustellen, welche Sicherheit damit verbunden ist?

Ich gehe davon aus, dass es einen Systemkatalog geben muss, den ich einsehen kann, aber Books-on-Line scheint nichts Spezifisches für Endpunkte zu haben, und Bing ist gut, Bingless ...


Zusätzliche Information:

SELECT ep.endpoint_id, p.class_desc, p.permission_name, ep.name, sp.name 
FROM sys.server_permissions p
    INNER JOIN sys.endpoints ep ON p.major_id = ep.endpoint_id
    INNER JOIN sys.server_principals sp ON p.grantee_principal_id = sp.principal_id
WHERE class = '105';

kehrt zurück:

endpoint_id class_desc  permission_name endpoint_name   principal_name
2           ENDPOINT    CONNECT TSQL    Local Machine   public
3           ENDPOINT    CONNECT TSQL    Named Pipes     public
4           ENDPOINT    CONNECT TSQL    Default TCP     public
5           ENDPOINT    CONNECT TSQL    Default VIA     public

Und:

SELECT name, endpoint_id, protocol_desc, type_desc, role_desc 
FROM sys.database_mirroring_endpoints;

Kehrt zurück:

name        endpoint_id  protocol_desc  type_desc           role_desc 
Mirroring   65536        TCP            DATABASE_MIRRORING  WITNESS

Es scheint keinen Eintrag sys.server_permissionsfür das Spiegelungsendpunktobjekt zu geben. Nein major_idund keine minor_idÜbereinstimmungen 65536. Außerdem enthält keine der Systemdatenbanken einen Verweis auf den Endpunkt.

Ich bin ratlos.

Max Vernon
quelle

Antworten:

7

Nachdem ich einen Teil des Tages damit verbracht hatte, gespiegelte Datenbanken in unserer DEV-Umgebung von Server zu Server zu verschieben, um mich auf die Umstellung auf SQL Server 2012 vorzubereiten , stieß ich auf dieses MSDN-Dokument, in dem erläutert wird, dass die ENDPOINT-Sicherheit ausschließlich anhand des Kontotyps bestimmt wird SQL Server läuft unter. Wenn SQL Server ein Domänenkonto verwendet, hat dieses Konto automatisch Zugriff auf den Endpunkt. Wenn SQL Server ein integriertes Konto wie [Netzwerkdienst] oder [Lokales System] usw. verwendet, muss der Endpunkt mit einem Sicherheitszertifikat konfiguriert werden, und nur Inhaber des Zertifikats können auf den Endpunkt zugreifen.

Der relevante Abschnitt aus dem Dokument:

Bestimmen des Authentifizierungstyps für einen Datenbankspiegelungsendpunkt

Es ist wichtig zu verstehen, dass die SQL Server-Dienstkonten Ihrer Serverinstanzen wie folgt bestimmen, welche Art von Authentifizierung Sie für Ihre Datenbankspiegelungsendpunkte verwenden können:

Wenn jede Serverinstanz unter einem Domänendienstkonto ausgeführt wird, können Sie die Windows-Authentifizierung für Ihre Datenbankspiegelungsendpunkte verwenden. Wenn alle Serverinstanzen als dasselbe Domänenbenutzerkonto ausgeführt werden, sind in beiden Masterdatenbanken automatisch die richtigen Benutzeranmeldungen vorhanden. Dies vereinfacht die Sicherheitskonfiguration für die Verfügbarkeitsdatenbanken und wird empfohlen.

Wenn Serverinstanzen, auf denen die Verfügbarkeitsreplikate für eine Verfügbarkeitsgruppe gehostet werden, als unterschiedliche Konten ausgeführt werden, muss die Anmeldung für jedes Konto im Master auf der anderen Serverinstanz erstellt werden. Dann muss dieser Anmeldung die CONNECT-Berechtigung erteilt werden, um eine Verbindung zum Datenbankspiegelungsendpunkt dieser Serverinstanz herzustellen.

Wenn Ihre Serverinstanzen die Windows-Authentifizierung verwenden, können Sie mithilfe von Transact-SQL, PowerShell oder dem Assistenten für neue Verfügbarkeitsgruppen Datenbankspiegelungsendpunkte erstellen.

Hinweis:

Wenn einer Serverinstanz, die ein Verfügbarkeitsreplikat hosten soll, ein Datenbankspiegelungsendpunkt fehlt, kann der Assistent für neue Verfügbarkeitsgruppen automatisch einen Datenbankspiegelungsendpunkt erstellen, der die Windows-Authentifizierung verwendet.

Wenn eine Serverinstanz unter einem integrierten Konto ausgeführt wird, z. B. einem lokalen System, einem lokalen Dienst oder einem Netzwerkdienst oder einem Nichtdomänenkonto, müssen Sie Zertifikate für die Endpunktauthentifizierung verwenden. Wenn Sie Zertifikate für Ihre Datenbankspiegelungsendpunkte verwenden, muss Ihr Systemadministrator jede Serverinstanz so konfigurieren, dass Zertifikate sowohl für ausgehende als auch für eingehende Verbindungen verwendet werden.

Es gibt keine automatisierte Methode zum Konfigurieren der Datenbankspiegelungssicherheit mithilfe von Zertifikaten. Sie müssen entweder die CREATE ENDPOINT Transact-SQL-Anweisung oder das PowerShell-Cmdlet New-SqlHadrEndpoint verwenden. Weitere Informationen finden Sie unter CREATE ENDPOINT (Transact-SQL).

Remus Rusanu (in seiner Antwort) hat korrekt identifiziert, wie die auf einem Spiegelungsendpunkt vorhandene Sicherheit bestimmt werden kann. wie in:

SELECT ep.name, sp2.name AS Grantee, sp.name AS Grantor, p.permission_name, ep.state_desc
FROM sys.server_permissions p 
    INNER JOIN sys.endpoints ep ON p.major_id = ep.endpoint_id
    INNER JOIN sys.server_principals sp ON p.grantor_principal_id = sp.principal_id
    INNER JOIN sys.server_principals sp2 ON p.grantee_principal_id = sp2.principal_id
WHERE p.class_desc = 'ENDPOINT' AND ep.type_desc = 'DATABASE_MIRRORING'

In meinem Fall unter SQL Server 2005 werden die ursprünglichen Spiegelungsendpunkte jedoch nicht in den Ergebnissen dieser Abfrage angezeigt. Ich gehe davon aus, dass die Standardsicherheit den CONNECT-Zugriff auf das Konto ermöglicht, unter dem SQL Server ausgeführt wird (wie oben erläutert).

Die kanonische Antwort auf die Frage, woher Sie wissen, wer CONNECT-Zugriff auf einen ENDPOINT hat, ist die Summe der obigen Abfrage und des von SQL Server verwendeten Kontos sowie aller möglichen Zertifikate, die Sie für den Zugriff auf den Endpunkt konfiguriert haben .

Max Vernon
quelle
4

Ich habe dies zufällig für eine Datenbank in der Produktion eingerichtet und habe mich das Gleiche gefragt, weil ich die Konfiguration mit einer anderen Spiegelungssitzung vergleichen musste, um sicherzustellen, dass ich sie richtig abgeglichen habe.

sys.dm_db_mirroring_connectionssollte Sie mit Ihnen wollen. Es enthält das, principal_namewas ist:

Name des Logins, der für Verbindungsberechtigungen überprüft wurde. Bei der Windows-Authentifizierung ist dieser Wert der Remote-Benutzername. Bei der Zertifikatauthentifizierung ist dieser Wert der Zertifikatsinhaber.

Wenn Sie mit einer Sitzung arbeiten, die angehalten ist, obwohl ich nicht sicher bin, ob die Informationen dennoch zurückgegeben werden, glauben Sie, dass sie nur aktive Verbindungen hat.


quelle
Danke, Shaun. Das zeigt sicherlich den Namen des Remote-Benutzers, der tatsächlich mit dem Endpunkt verbunden ist, beantwortet jedoch nicht wirklich die Frage, welche Sicherheitseinstellung es diesem Benutzer ermöglicht, eine Verbindung in der Produktion herzustellen, jedoch nicht im Test. Ich schätze die Hilfe trotzdem!
Max Vernon
3

Weitere Informationen finden Sie in der Dokumentation zu Books Online sys.database_mirroring_endpoints

Für Serverobjektberechtigungen sehen Sie sich den üblichen Ort an sys.server_permissions. Wie in jedem Fall, in dem es um Windows-Sicherheit geht, sind die Dinge aufgrund der Mitgliedschaft in Windows-Gruppen komplizierter, und Sie müssen auch die Berechtigungshierarchie berücksichtigen .

Remus Rusanu
quelle
Ich habe mir das angeschaut, aber ich brauche eine Liste von Anmeldungen, die CONNECT-Zugriff auf den Endpunkt haben. sys.database_mirroring_endpoints scheint das nicht zu zeigen - es sei denn, ich vermisse etwas!
Max Vernon
1
Für Serverobjektberechtigungen sehen Sie sich den üblichen Ort an sys.server_permissions. Wie in jedem Fall, in dem es um Windows-Sicherheit geht, sind die Dinge aufgrund der Mitgliedschaft in Windows-Gruppen komplizierter, und Sie müssen auch die Berechtigungshierarchie berücksichtigen .
Remus Rusanu
3
Gibt es eine Chance, dass Sie dies in der Antwort selbst etwas näher erläutern könnten?
Jcolebrand