我正在尝试通过 SQL Server 2005/2008 中的 T-SQL 脚本创建用户。我运行以下 SQL 来检查用户是否存在,如果不存在则创建用户:

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 用户下的数据库中。在这种情况下,我收到以下错误:



如何检查 windows 用户 MyDomain\MyUser 是否已经是数据库中的用户,即使它使用不同的用户名?

最佳答案

使用 SID 而不是 name/user_id 对 windows user 与 sys.database_principals 进行测试:

select * from sys.database_principals where sid = SUSER_SID(N'MyDomain\MyUser')

由于此操作使用登录ID的SID,因此将其映射到数据库中的名称并不重要。

关于SQL Server : How to check if a windows user exists in the database but under a different user name,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6212447/

10-10 06:49