如何检查是否已在数据库中创建USER?

时间:2011-07-17 07:41:01

标签: sql tsql

有没有办法从中我可以知道用户(登录)是否已在数据库中创建?我的意思是用户不是登录,因为,我知道如何检查登录。我需要检查在特定数据库和内部创建的用户。分配给它的角色。

这是用于检查登录的代码:

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

但用户怎么样?因为如果没有创建用户,我需要创建用户并为其分配角色。否则,我将继续而不创造。

由于

5 个答案:

答案 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