sql - 将用户角色和权限从一个数据库复制到另一个数据库

标签 sql sql-server stored-procedures sql-server-2008-r2 sql-server-2012

我的新数据库中存在用户权限问题。我从不同的服务器复制了这个新数据库,旧服务器数据库有一些用户,授予执行某些程序的权限。在我备份并恢复到新服务器后,所有权限都消失了。我运行 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/

相关文章:

mysql - 存储过程计算应纳税额

php - sql从单个表单输入中查询多个字段

sql - 你能有太多的存储过程吗?

php - 如何使用 eloquent/fluent 从单个查询中插入多行

c# - 在 sql 查询中使用 .net Datetime

sql-server - SQL Server - 使用空关键字的自由文本搜索

sql-server - Silverlight 应用程序中的压力测试,它使用来自 WCF DataService 的数据,然后公开来自 SQLServer 数据库的数据

SQL只选择没有重复的记录

c# - 添加记录时出错。过程或函数 'InsertCurrencyRecord' 需要参数 '@PortfolioOwnerId'

mysql - 即使执行存储过程 'operand should contain one column' 后也会出现无法理解的错误