Как проверить, был ли USER уже создан в базе данных или нет в SQL?
Есть ли способ, который из него я могу знать, если пользователь ( не логин) уже создан в базе данных? Я имею в виду, что пользователь не входит в систему, поскольку я знаю, как проверить вход в систему. Мне нужно проверить для пользователя, который создается внутри конкретного БД и назначенной ему роли.
Это код для проверки входа:
SELECT name FROM sys.server_principals WHERE name = 'test_user'
но как насчет пользователя? Поскольку мне нужно создать пользователя и назначить ему роль, если он не создан. В противном случае я продолжу без создания.
Спасибо
Ответы
Ответ 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