我的新数据库中存在用户权限问题。我从不同的服务器复制了这个新数据库,旧服务器数据库有一些用户,授予执行某些程序的权限。在我备份并恢复到新服务器后,所有权限都消失了。我运行 sp_helprotect 来查找旧服务器的用户和权限。有没有办法编写这些权限和角色的脚本?
我们现在运行的是 SQL Server 2012 版本。但那个旧数据库位于 SQL Server 2008 r2 中。这是造成问题的原因吗?
最佳答案
当您将数据库恢复到新服务器时,即使 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
您可以看到登录也是某些角色
的成员,因此这些也必须编写脚本。当然,您应该只添加属于每个用户的角色......!您可以通过打开 SSMS 并深入到 DB | 下的用户来检查为用户分配了哪些角色。安全|用户 |右键单击用户 |属性。
编辑
顺便说一句 - 如果您的新服务器没有旧数据库中存在的用户,则必须先在 master 中创建它们,然后再将它们删除并重新添加到恢复的数据库中。
关于sql - 将用户角色和权限从一个数据库复制到另一个数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13766150/