将备份恢复到不同的服务器 - 用户权限
Posted
技术标签:
【中文标题】将备份恢复到不同的服务器 - 用户权限【英文标题】:Restoring a Backup to a different Server - User Permissions 【发布时间】:2009-01-20 14:00:28 【问题描述】:我已将 MS SQL Server 2005 数据库备份并恢复到新服务器。
重新创建登录名、用户和用户权限的最佳方法是什么?
在 SQL Server 2000 的企业管理器上,我能够分别编写登录脚本、用户脚本和用户权限脚本。然后我可以一个接一个地运行,剩下的唯一手动步骤是设置登录密码(出于安全原因,不编写脚本)
这在 SQL Server 2005 的 Management Studio 中似乎是不可能的,这使得一切都非常繁琐和耗时。 (我最终不得不编写整个数据库的脚本,从新数据库中删除所有登录名和用户,运行脚本,然后查看混合的错误消息以查看哪些有效,哪些无效。)
有没有人有这方面的经验和建议?
【问题讨论】:
【参考方案1】:最简单的方法是使用 Microsoft 的 sp_help_revlogin
,这是一个存储过程,用于编写所有 SQL Server 登录名、默认值和密码并保持相同的 SID。
您可以在这篇知识库文章中找到它:
http://support.microsoft.com/kb/918992
【讨论】:
虽然似乎没有执行用户权限。 (如GRANT EXECUTE和GRANT SELECT等) 正确,因为它包含在每个单独的数据库中,而不是在服务器级别。如果您备份数据库,请在旧服务器上执行 sp_help_revlogin,在新服务器上使用生成的 T-SQL,然后执行还原,就完成了。 恢复的数据库中的“用户”似乎仍然是他们的“登录”的孤立对象。 那是因为你没有按顺序做。在还原数据库之前,您必须通过 sp_help_revlogin 创建用户。如果用户现在存在,请删除他们,因为他们的 sid 错误。 这可能会导致问题,因为用户的默认语言不是脚本化的。如果执行脚本,新登录的默认语言可能已从原来的任何语言更改为服务器的默认语言。这对我们来说失败了,显然设计不佳的第三方应用程序将字符串插入到日期时间类型的字段中。这意味着转换结果取决于登录的默认语言。在将语言从德语自动更改为英语后,所有日期 【参考方案2】:运行这个:
EXEC sp_change_users_login 'Report'
这将显示所有孤立用户的列表,例如:
现在在这里为每个用户执行这个脚本,例如
exec sp_change_users_login 'Update_One', 'UserNameExample', 'UserNameExample'
这解决了我的问题。
【讨论】:
【参考方案3】:我使用 Red Gate (http://www.red-gate.com/products/SQL_Compare/index.htm) 的 SQL Compare 产品。周围还有其他类似的产品,但我没有理由去寻找,因为 SQL Compare 从未让我失望。
您会发现它的用处远不止您当前的需求,因为它有助于同步所有类型的数据库对象,而不仅仅是登录名和权限。
【讨论】:
我们有一个类似的“数据库差异”工具。不幸的是,我们的客户没有...以上是关于将备份恢复到不同的服务器 - 用户权限的主要内容,如果未能解决你的问题,请参考以下文章