SQL Server Windows登录 - 同名不同用户(SID)

时间:2013-10-21 11:23:19

标签: sql-server sql-server-2008-r2 active-directory

我遇到了Windows登录sql 2008 r2服务器的问题。

在活动目录中创建了一个用户,可以称他为“mydomain \ jon.doe”,并在SQL服务器上创建了一个Windows登录名。

由于交换存在问题,此AD帐户已被删除,而新创建的帐户仍称为“mydomain \ jon.doe”

我运行以下命令从我的sql server中删除旧用户......

  EXECUTE('USE ' + @Database + ' IF EXISTS (SELECT [name] FROM sys.Schemas WHERE [name] = ''' + @FullyQualifiedUserName + ''') BEGIN DROP SCHEMA [' + @FullyQualifiedUserName + '] PRINT ''Deletion '' END')

  EXECUTE('USE ' + @Database + ' IF EXISTS (SELECT [name] FROM sys.Schemas WHERE [name] = ''' + @SimpleUserName + ''') BEGIN DROP SCHEMA [' + @SimpleUserName + '] PRINT ''Deletion '' END')

  EXECUTE('USE ' + @Database + ' IF EXISTS (SELECT [name] FROM sys.database_principals WHERE [name] = ''' + @FullyQualifiedUserName + ''') BEGIN DROP USER [' + @FullyQualifiedUserName + '] PRINT ''Deletion '' END')

  EXECUTE('USE ' + @Database + ' IF EXISTS (SELECT [name] FROM sys.database_principals WHERE [name] = ''' + @SimpleUserName + ''') BEGIN DROP USER [' + @SimpleUserName + '] PRINT ''Deletion '' END')

然而,当我重新将“mydomain \ jon.doe”添加到sql server时,它似乎保留了旧的SID而不是新AD帐户的SID?

到目前为止我已经尝试过了......但没有运气

DBCC FREESYSTEMCACHE('ALL')

2 个答案:

答案 0 :(得分:1)

解决方法可能是在Active Directory中创建一个仅包含“mydomain \ jon.doe”的组,并为该组添加SQL登录。

答案 1 :(得分:0)

您的代码显示数据库用户丢弃,但您是否从服务器中删除了LOGIN?

[your user drops]
Use master 
go
DROP LOGIN [mydomain\jon.doe];

如果没有,则SQL Server仍然使用旧SID链接到AD用户。

如果你跑

xp_logininfo 'mydomain\jon.doe'

...你得到错误0x534吗?如果是这样,那么你肯定需要这样做:

  1. 将用户从服务器上的所有数据库中删除为数据库用户;
  2. 删除登录信息;
  3. 重新添加登录信息;
  4. 重新添加用户。
  5. 这将清除SQL Server中的旧SID,您将再次正常工作。