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