Comment puis-je inspecter les paramètres de sécurité d'un point de terminaison SQL Server?


10

Je suis en train de créer un environnement TEST pour notre équipe de développement SQL Server.

En production, nous avons 3 serveurs SQL, SQL01contient plusieurs bases de données en miroir SQL02. SQL03agit comme témoin dans une configuration "haute sécurité avec basculement automatique" ou synchrone.

J'ai utilisé VMWare P2V pour virtualiser les trois machines sur du matériel séparé, reconfiguré les SID des machines et blackholé les adresses IP de nos serveurs de production à partir de ces nouvelles machines.

J'avais d'abord oublié de trou noir la machine témoin de production, donc les bases de données sur les machines TEST utilisaient toujours la SQL03machine comme témoin. Notant le problème, j'ai décidé de reconfigurer les bases de données sur TEST pour pointer vers le témoin TEST nouvellement virtualisé, appelez-le TEST03.

Pour reconfigurer la base de données pour utiliser le nouveau témoin, j'ai entré la commande suivante sur le serveur principal TEST01:

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

La réponse était inattendue:

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.

J'étais très perplexe à ce message d'erreur car la configuration fonctionne sur les machines de production et n'a été modifiée en aucune façon sur les machines de test.

Pour que cela fonctionne, je devais créer un LOGINtémoin sur le test:

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

et GRANTil CONNECTdroits sur le point final en question:

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

J'ai ensuite réussi à pointer avec succès les bases de données en miroir de l'environnement TEST vers le nouveau témoin de test.

Comment puis-je inspecter le point de terminaison témoin de production pour voir quelle sécurité lui est associée?

Je suppose qu'il doit y avoir un catalogue système que je peux inspecter, mais Books-on-Line ne semble rien avoir de spécifique pour Endpoints, et Bing va bien, Bingless ...


Information additionnelle:

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';

Retour:

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

Et:

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

Retour:

name        endpoint_id  protocol_desc  type_desc           role_desc 
Mirroring   65536        TCP            DATABASE_MIRRORING  WITNESS

Il ne semble pas y avoir d'entrée sys.server_permissionspour l'objet de point de terminaison en miroir. Non major_idet aucune minor_idcorrespondance 65536. En outre, aucune des bases de données système ne contient de référence au point de terminaison.

Je suis à perte.

Réponses:


7

Après avoir passé une partie de la journée à déplacer des bases de données en miroir d'un serveur à un autre dans notre environnement DEV en préparation de notre passage à SQL Server 2012, je suis tombé sur ce document MSDN qui explique que la sécurité ENDPOINT est déterminée uniquement en fonction du type de compte SQL Server fonctionne sous. Si SQL Server utilise un compte de domaine, ce compte a automatiquement accès au point de terminaison. Si SQL Server utilise un compte intégré tel que [Service réseau] ou [Système local], etc., le point de terminaison doit être configuré avec un certificat de sécurité et seuls les détenteurs du certificat peuvent accéder au point de terminaison.

La section pertinente du document:

Détermination du type d'authentification pour un point de terminaison de mise en miroir de bases de données

Il est important de comprendre que les comptes de service SQL Server de vos instances de serveur déterminent le type d'authentification que vous pouvez utiliser pour vos points de terminaison de mise en miroir de bases de données, comme suit:

Si chaque instance de serveur s'exécute sous un compte de service de domaine, vous pouvez utiliser l'authentification Windows pour vos points de terminaison de mise en miroir de bases de données. Si toutes les instances de serveur s'exécutent sous le même compte d'utilisateur de domaine, les connexions utilisateur correctes existent automatiquement dans les deux bases de données master. Cela simplifie la configuration de sécurité pour les bases de données de disponibilité et est recommandé.

Si des instances de serveur qui hébergent les réplicas de disponibilité pour un groupe de disponibilité s'exécutent en tant que comptes différents, la connexion de chaque compte doit être créée en maître sur l'autre instance de serveur. Ensuite, cette connexion doit disposer des autorisations CONNECT pour se connecter au point de terminaison de mise en miroir de bases de données de cette instance de serveur.

Si vos instances de serveur utilisent l'authentification Windows, vous pouvez créer des points de terminaison de mise en miroir de bases de données à l'aide de Transact-SQL, PowerShell ou de l'Assistant Nouveau groupe de disponibilité.

Remarque:

Si une instance de serveur qui doit héberger un réplica de disponibilité n'a pas de point de terminaison de mise en miroir de bases de données, l'Assistant Nouveau groupe de disponibilité peut créer automatiquement un point de terminaison de mise en miroir de bases de données qui utilise l'authentification Windows.

Si une instance de serveur s'exécute sous un compte intégré, tel que Système local, Service local ou Service réseau, ou un compte non-domaine, vous devez utiliser des certificats pour l'authentification des points finaux. Si vous utilisez des certificats pour vos points de terminaison de mise en miroir de bases de données, votre administrateur système doit configurer chaque instance de serveur pour utiliser des certificats sur les connexions sortantes et entrantes.

Il n'existe aucune méthode automatisée pour configurer la sécurité de la mise en miroir de bases de données à l'aide de certificats. Vous devrez utiliser l'instruction CREATE ENDPOINT Transact-SQL ou l'applet de commande New-SqlHadrEndpoint PowerShell. Pour plus d'informations, consultez CREATE ENDPOINT (Transact-SQL).

Remus Rusanu (dans sa réponse) a correctement identifié comment déterminer la sécurité en place sur un point de terminaison en miroir; un péché:

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'

Cependant, dans mon cas sur SQL Server 2005, les points de terminaison de mise en miroir d'origine n'apparaissent pas dans les résultats de cette requête - je suppose que cela est dû au fait que la sécurité par défaut autorise l'accès CONNECT au compte sous lequel SQL Server s'exécute (comme expliqué ci-dessus).

Ainsi, la réponse canonique à la question, comment savoir qui a un accès CONNECT à un ENDPOINT, est la somme de la requête ci-dessus, et le compte que SQL Server utilise, ainsi que tous les certificats possibles que vous avez configurés avec accès au point de terminaison .


4

Il se trouve que j'ai mis cela en place pour une base de données en production et je me demandais la même chose, car j'avais besoin de comparer la configuration à une autre session de mise en miroir pour m'assurer de la faire correspondre correctement.

sys.dm_db_mirroring_connectionsdevrait vous fournir ce que vous voulez. Il contient ce principal_namequi est:

Nom de la connexion validée pour les autorisations de connexion. Pour l'authentification Windows, cette valeur est le nom d'utilisateur distant. Pour l'authentification par certificat, cette valeur est le propriétaire du certificat.

Si vous travaillez avec une session qui est interrompue bien que je ne sois pas sûr que cela retournerait toujours les informations, croyez qu'elle n'a que des connexions actives.


Merci, Shaun. Cela montre certainement le nom d'utilisateur distant réellement connecté au point de terminaison, mais cela ne répond pas vraiment à la question de savoir quel paramètre de sécurité permet à cet utilisateur de se connecter en production, mais pas en test. J'apprécie l'aide quand même!
Max Vernon

3

Consultez la documentation de Books Online pour sys.database_mirroring_endpoints

Pour les autorisations d'objets serveur que vous regardez à l'endroit habituel, sys.server_permissions. Comme dans tous les cas où la sécurité Windows est impliquée, les choses sont plus compliquées en raison de l'appartenance aux groupes Windows, et vous devez également prendre en compte la hiérarchie des autorisations .


J'ai regardé cela mais ce dont j'ai besoin est une liste de connexions qui ont un accès CONNECT au point de terminaison. sys.database_mirroring_endpoints ne semble pas le montrer - à moins que je manque quelque chose!
Max Vernon

1
Pour les autorisations d'objets serveur que vous regardez à l'endroit habituel, sys.server_permissions. Comme dans tous les cas où la sécurité Windows est impliquée, les choses sont plus compliquées en raison de l'appartenance aux groupes Windows, et vous devez également prendre en compte la hiérarchie des autorisations .
Remus Rusanu

3
Y a-t-il une chance que vous puissiez développer cela un peu dans la réponse elle-même?
jcolebrand
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.