SQL Server 2005 - 将登录映射到预先存在的用户

Kei*_*thS 3 sql-server-2005 security sql-server failover

简而言之,我们有几个数据库在两个故障转移实例之间同步。主要包含映射到数据库中用户的登录名,并且一切都很正常。但是,我没有意识到服务器登录不会在故障转移实例之间同步,因此当故障转移到备份时,没有人可以登录。关键是虽然我可以在备份上创建登录,但我不能t 将登录作为用户映射到数据库,因为具有该名称的数据库用户已经存在,并且登录不会使用现有用户,因此登录仍然失败,因为登录没有连接到数据库的权限。

我认为我必须做的是修改备份的主数据库中的登录名,使其与主数据库的登录名具有相同的 GUID,并在备份端手动创建登录名和用户之间的链接,从而“欺骗”备份实例认为在主服务器上创建的用户也是它自己的映射登录名。然而,我不知道我将如何去做这件事,而且我们在这个问题上遇到了足够多的麻烦,而我却没有为此烦恼。

帮助?

koz*_*ski 6

对于故障转移类型的情况,我使用了http://support.microsoft.com/kb/918992 中发布的方便的“sp_help_revlogin”存储过程

此过程在您的主服务器上运行时,将使用 SID(这是确保您的登录映射到其各自的数据库用户的重要部分)和散列密码(因此密码在每个服务器上保持相同)编写每个登录的脚本.) 然后可以针对您的故障转移服务器运行生成的脚本以创建登录。请务必在运行之前查看输出。

照原样,它为服务器中的所有登录编写脚本,但可以修改为仅编写您感兴趣的登录脚本。它还可以自动定期生成脚本。

  • 此外,Robert L. Davis 有一篇 [非常好的博客文章](http://www.sqlsoldier.com/wp/sqlserver/transferring-logins-to-a-database-mirror) 关于在服务器之间传输登录名,有一个更简单的完成工作的代码片段。 (2认同)