有没有办法从中我可以知道用户(不登录)是否已在数据库中创建?我的意思是用户不是登录,因为,我知道如何检查登录。我需要检查在特定数据库和内部创建的用户。分配给它的角色。
这是用于检查登录的代码:
SELECT name FROM sys.server_principals WHERE name = 'test_user'
但用户怎么样?因为如果没有创建用户,我需要创建用户并为其分配角色。否则,我将继续而不创造。
由于
答案 0 :(得分:64)
怎么样:
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
向您显示在服务器级别定义的登录信息 - sys.database_principals
向您显示数据库级别的主体(例如用户帐户)。
答案 1 :(得分:14)
这将告诉您给定登录名的匹配用户名
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'
答案 2 :(得分:8)
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
答案 3 :(得分:3)
如果您找到了sys.server_principals
,我很惊讶您没有找到sys.database_principals
。您可以根据sid
列加入观看次数。
答案 4 :(得分:0)
你也可以关心这个方法......
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