2010-05-18 4 views
0

Je souhaite accorder l'accès à une base de données pour une connexion SQL Server. Je connais sp_grantdbaccess, mais il est déprécié. Que puis-je utiliser à la place et comment puis-je vérifier si le login n'a pas déjà accès à la base de données?Octroi d'une connexion SQL Server Accès à une base de données - SQL Server

Scénario: UserA crée la base de données - dans sys.database_principals J'ai une entrée avec le nom dbo et avec le sid de UserA. J'essaie d'accorder à nouveau les permissions UserA: j'essaye de faire un select sur sys.database_principals par name = 'UserA', cependant puisque le nom est dbo not UserA, j'obtiens une erreur - 'Le login a déjà un compte sous un autre nom d'utilisateur . » Comment puis-je déterminer si l'utilisateur a un accès à la base de données sans le sid?

Répondre

2

Vous voulez probablement CREATE USER

par exemple

CREATE USER bobuser FOR LOGIN boblogin 

Le catalogue de sécurité sys.database_principals a une liste des utilisateurs de bases de données, afin que vous puissiez vous assurer de ne possédez pas déjà un avec ce nom.

+0

Si l'utilisateur dispose déjà d'un accès à la base de données, il renverra une erreur. Comment puis-je vérifier si l'utilisateur a un accès à la base de données? – kjv

+2

Vous pouvez lancer une requête comme si elle n'existe pas (sélectionnez * dans sys.database_principals où name = 'bobuser') begin create user ... 'etc pour voir si elle existe en premier –

0

D'abord, vous devez créer un utilisateur dans cette base de données pour la connexion en question. Pour ce faire, utilisez Create User. Si vous voulez déterminer si l'utilisateur existe déjà, vous pouvez utiliser la vue du catalogue sys.database_principals en filtrant type = 'U'. Si vous souhaitez déterminer si un utilisateur est déjà dans un rôle, vous pouvez utiliser sys.database_role_members.

Questions connexes