2

我的新数据库中的用户权限存在问题。我从不同的服务器复制了这个新数据库,那个旧服务器数据库有一些用户,被授予执行一些程序的权限。在我备份并恢复到新服务器后,所有权限都消失了。我运行 sp_helprotect 从我的旧服务器中找出用户和权限。有没有办法编写这些权限和角色的脚本?

我们现在正在运行 SQL Server 2012 版本。但是那个旧数据库在 SQL Server 2008 r2 中。这是造成问题的原因吗?

4

2 回答 2

4

当您将数据库恢复到新服务器时,即使存在相同的用户master,他们也没有相同的系统 ID,因此您必须从恢复的数据库中删除用户并再次将它们添加到恢复的数据库中。这样,经过身份验证的用户的系统 ID 会从master您的数据库流过,并且所有权限都将恢复,而无需重新编写所有权限的脚本......

例如,当我将数据库恢复到另一台服务器时,我必须为我们使用的每个登录名执行以下脚本:

USE [new_db_name]
GO
IF  EXISTS (SELECT * FROM sys.database_principals WHERE name = N'login_name')
DROP USER [login_name]
GO
CREATE USER [login_name] FOR LOGIN [login_name]
GO
EXEC sp_addrolemember N'My_StoredProcs', N'login_name'
GO
EXEC sp_addrolemember N'db_datareader', N'login_name'
GO
EXEC sp_addrolemember N'db_datawriter', N'login_name'
GO

您可以看到登录也是某些的成员roles,因此也必须编写脚本。当然,您应该只添加属于每个用户的角色...!您可以通过打开 SSMS 并深入了解 DB | 下的用户来检查为用户分配了哪些角色。安全 | 用户 | 右键单击用户 | 特性。

编辑

顺便说一句 - 如果您的新服务器没有旧数据库中存在的用户,您必须在 master 中创建它们,然后再将它们删除并重新添加到恢复的数据库中。

于 2012-12-07T19:09:03.507 回答
1

如果您有这样的工具,大多数数据库比较实用程序都可以配置为迁移用户、角色成员资格和/或权限。我知道作为 Visual Studio 数据库版本(以前称为 Data Dude)一部分的架构比较工具可以做到这一点,我很确定红门工具也可以做到这一点。

我想我记得一些关于 VS 模式比较实用程序在 SQL 2012 中移动到 BIDS 等效项(我忘记了新名称是什么)的一些内容。如果您有很多要同步的对象,至少值得研究一下。

于 2012-12-07T19:20:09.340 回答