1

我在 Windows 登录到 sql 2008 r2 服务器时遇到问题。

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

由于交换出现问题,此 AD 帐户已被删除,并创建了一个新帐户,仍名为“mydomain\jon.doe”

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

  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 服务器时,它似乎保留了旧 SID 而不是新 AD 帐户的 SID?

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

DBCC FREESYSTEMCACHE('ALL')
4

2 回答 2

1

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

于 2014-02-27T13:43:53.550 回答
0

您的代码显示了数据库用户删除,但是您是否从服务器删除了登录?

[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. 重新添加用户。

这将从 SQL Server 中清除旧的 SID,您将再次正常工作。

于 2016-06-16T20:17:15.010 回答