web-dev-qa-db-fra.com

Comment vérifier si l'UTILISATEUR est déjà créé dans la base de données ou non en SQL?

Y at-il un moyen de savoir si l'utilisateur ( pas le login) est déjà créé dans la base de données? Je parle de l'utilisateur et non de l'identifiant, car je sais comment vérifier l'identifiant. Je dois rechercher l'utilisateur créé dans une base de données spécifique et attribué à un rôle.

C'est le code pour vérifier le login:

SELECT name FROM sys.server_principals WHERE name = 'test_user'

mais qu'en est-il de l'utilisateur? Puisque j'ai besoin de créer l'utilisateur et de lui attribuer un rôle s'il n'est pas créé. Sinon, je continuerai sans créer.

Merci

37
Q8Y

Que diriez-vous:

USE (your database you want to check the user's existence in)

SELECT * 
FROM sys.database_principals
WHERE name = '(your user name to check here)'

sys.server_principals vous indique les connexions définies au niveau du serveur - sys.database_principals vous indique les principaux (par exemple, les comptes d'utilisateurs) au niveau de la base de données.

64
marc_s

Cela vous indiquera le nom d'utilisateur correspondant pour un nom de connexion donné.

USE MyDB
SELECT
    sp.name AS ServerLoginName,
    dp.name AS DBUserName
FROM
    sys.server_principals sp
    LEFT JOIN
    sys.database_principals dp ON sp.sid = dp.sid
WHERE
    sp.name = 'MyLogin'
14
gbn
use SomeDatabase
go

/* built-in system function */
select database_principal_id('UserNameHere')

/* check if exists and drop */
if database_principal_id('UserNameHere') is not null
    drop user 'UserNameHere'
go
8
YearsLater

Si vous avez trouvé sys.server_principals, je suis surpris que vous n'ayez pas trouvé sys.database_principals . Vous pouvez joindre les vues en fonction de la colonne sid.

3

Vous pourriez aussi vous soucier de cette méthode ...

IF DATABASE_PRINCIPAL_ID('domain\lanid') IS NULL
BEGIN
    CREATE USER [domain\lanid] FOR LOGIN [domain\lanid] WITH DEFAULT_SCHEMA=[dbo]
    EXEC sp_addrolemember N'db_ApplicationUserRole', N'domain\lanid'
END
0
Prisoner ZERO