SQL Server:如何检查数据库中是否存在windows用户,但用户名不同
我正在尝试通过SQLServer2005/2008中的T-SQL脚本创建一个用户。我运行以下SQL检查用户是否存在,如果不存在,则创建用户:SQL Server:如何检查数据库中是否存在windows用户,但用户名不同,sql,sql-server,sql-server-2005,tsql,sql-server-2008,Sql,Sql Server,Sql Server 2005,Tsql,Sql Server 2008,我正在尝试通过SQLServer2005/2008中的T-SQL脚本创建一个用户。我运行以下SQL检查用户是否存在,如果不存在,则创建用户: IF NOT EXISTS (SELECT * FROM sys.database_principals WHERE name = N'MyDomain\MyUser') BEGIN CREATE USER [MyDomain\MyUser] FOR LOGIN [M
IF NOT EXISTS (SELECT *
FROM sys.database_principals
WHERE name = N'MyDomain\MyUser')
BEGIN
CREATE USER [MyDomain\MyUser] FOR LOGIN [MyDomain\MyUser] WITH default_schema=[dbo];
SELECT 1;
END
ELSE
BEGIN
SELECT 0;
END
不幸的是,如果windows帐户MyDomain\MyUser已在数据库中,但名称不同,则此操作不起作用。例如,如果MyDomain\MyUser是创建数据库的帐户,那么它将已经在数据库中的dbo用户下。在这种情况下,我会得到以下错误:
Msg 15063,16级,状态1,第1行
登录名已在下有一个帐户
不同的用户名
如何检查windows用户MyDomain\MyUser是否已经是数据库中的用户,即使它使用的是不同的用户名?使用SID而不是名称/用户id对windows用户与sys.database\u主体进行测试:
select * from sys.database_principals where sid = SUSER_SID(N'MyDomain\MyUser')
因为它使用登录ID的SID,所以在数据库中映射到哪个名称并不重要。。谢谢Damien。我需要从
sys.syslogins
中选择+1作为SUSER\u SID