Подтвердить что ты не робот

Как проверить, был ли USER уже создан в базе данных или нет в SQL?

Есть ли способ, который из него я могу знать, если пользователь ( не логин) уже создан в базе данных? Я имею в виду, что пользователь не входит в систему, поскольку я знаю, как проверить вход в систему. Мне нужно проверить для пользователя, который создается внутри конкретного БД и назначенной ему роли.

Это код для проверки входа:

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

но как насчет пользователя? Поскольку мне нужно создать пользователя и назначить ему роль, если он не создан. В противном случае я продолжу без создания.

Спасибо

4b9b3361

Ответ 1

Как насчет:

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

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

sys.server_principals показывает логины, определенные на уровне сервера - sys.database_principals показывает вам участников (например, учетные записи пользователей) на уровне базы данных.

Ответ 2

Это укажет вам соответствующее имя пользователя для данного имени пользователя

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'

Ответ 3

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

Ответ 4

Если вы нашли sys.server_principals, я удивлен, что вы не нашли sys.database_principals. Вы можете присоединиться к представлениям на основе столбца sid.

Ответ 5

Вам также может понадобиться этот метод...

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