Mappage de plusieurs connexions serveur à un utilisateur de base de données

11

Cela semble être une question stupide, mais malgré certaines recherches, je n'ai pas pu trouver d'informations à ce sujet uniquement (peut-être en raison de l'utilisation d'une mauvaise terminologie).

Est-il possible de connecter plusieurs connexions serveur (authentification du serveur SQL) à un seul utilisateur de base de données (qui dispose d'autorisations attribuées en étant membre d'un rôle de base de données)?

J'ai des dizaines de connexions SQL (authentification de serveur SQL) qui doivent lire un paramètre d'une base de données centrale et je préfère mapper toutes ces connexions à un seul utilisateur DB dans la base de données cible plutôt que de créer un propre utilisateur DB pour chaque connexion.

Si oui, quelle serait la syntaxe T-SQL correcte?

leepfrog
la source
Lorsque vous dites «connexions au serveur», voulez-vous dire les comptes Windows ou les comptes de serveur SQL?
Phil Sumner
Je parle des comptes de serveur SQL.
Éditera
Que diriez-vous de créer un ROLE, puis d'ajouter des utilisateurs au rôle. De cette façon, vous accordez simplement des autorisations au rôle. Cela vous aidera à mieux gérer la sécurité. De plus, quelle est la version du serveur SQL - 2008R2, 2012?
Kin Shah

Réponses:

19

D'abord pour s'assurer de la terminologie. Une connexion est un principal de sécurité au niveau de l'instance ( sys.server_principals) et un utilisateur est un principal de sécurité au niveau de la base de données ( sys.database_principals). Ils sont réunis par un SID (identifiant de sécurité). Si vous regardez dans les vues système ci-dessus, vous pouvez voir comment elles sont réunies dans un format 1: 1 par SID. C'est 1 connexion à 1 utilisateur dans une base de données. Une connexion peut avoir plusieurs utilisateurs, mais ils doivent se trouver dans différentes bases de données.

Vous devrez donc créer un utilisateur dans votre base de données pour chaque connexion à laquelle vous souhaitez y accéder. C'est une commande assez simple.

CREATE USER [UserName] FROM LOGIN [LoginName]

De là, vous pouvez mettre tous vos utilisateurs dans un seul (ou plusieurs) rôle. Un rôle est un conteneur qui dispose d'autorisations et partage ces autorisations avec chaque utilisateur (pour les rôles de base de données) ou connexion (pour les rôles d'instance). Il existe un rôle de base de données intégré appelé db_datareaderqui donne un accès en lecture à chaque table et vue de la base de données. Vous pouvez ajouter tous vos utilisateurs à ce rôle. Cependant, une meilleure idée serait de créer un nouveau rôle et de l'ajouter au db_datareaderrôle. Ajoutez ensuite tous vos utilisateurs au nouveau rôle. L'avantage ici est que si vous souhaitez ajouter des autorisations supplémentaires au groupe, vous pouvez simplement modifier les autorisations sur le rôle.

Créez le rôle en:

CREATE ROLE RoleName

Ajouter un utilisateur à un rôle (ou un rôle à un autre)

EXEC sp_addrolemember 'RoleName','UserName'

ou si vous êtes en 2012 ou plus

ALTER ROLE [RoleName] ADD MEMBER [UserName]
Kenneth Fisher
la source
Merci pour l'explication détaillée et pour avoir fourni des informations de base Kenneth, ce que je ne savais pas, c'était That's 1 Login to 1 User in a database.
leepfrog