在恢复的数据库上重新创建安全性?

时间:2013-09-27 13:11:50

标签: sql sql-server scripting permissions

我们的任务是在生产和开发环境之间备份和恢复数据库。当服务器位于不同的区域时,此任务中最繁琐的部分是在SQL中“逐个”重新创建数据库用户。

我正在寻找一种方法来检索特定数据库(Windows用户和组,SQL用户和角色)上的所有用户及其当前权限级别,然后以某种方式使用这些结果在数据库恢复后重新创建权限。

任何人都可以帮助我开始朝着正确的方向前进吗?

此致

马修

2 个答案:

答案 0 :(得分:0)

此网址应该可以帮助您入门。 http://support.microsoft.com/kb/918992 它是传输登录的组合,我个人使用SSIS,然后根据上面的链接创建用户。

答案 1 :(得分:0)

以下查询应该: 创建一个临时表来保存要执行的查询 使用查询加载该临时表以添加所有登录 使用查询加载该临时表以添加所有用户(用于登录) 使用查询加载临时表以添加所有权限(对于表)

然后打印出所有这些语句,您应该能够将它们复制到新环境中的查询窗口并执行。

希望这对你来说是一个很好的起点。

if object_id('dbo.tempUsers') is not null
Drop table dbo.tempUsers

Create table tempUsers(ID int identity , Queries Varchar(255))

Insert into tempUsers(Queries)
select 'Create login [' + su.name + '] with password ' + su.password 
FROM sys.sysusers su

Insert into tempUsers(Queries)
select 'Create user [' + su.name + '] for login [' + su.password + ']'
FROM sys.sysusers su

Insert into tempUsers(Queries)
select 'GRANT ' + dp.permission_name collate latin1_general_cs_as
+ ' ON ' + s.name + '.' + o.name + ' TO '  + '[' + dpr.name + ']'
FROM sys.database_permissions AS dp
  INNER JOIN sys.objects AS o ON dp.major_id=o.object_id
  INNER JOIN sys.schemas AS s ON o.schema_id = s.schema_id
  INNER JOIN sys.database_principals AS dpr ON dp.grantee_principal_id=dpr.principal_id
where o.type = 'U'

declare @count int, @max int, @query Varchar(255)
set @count =1
set @max = (Select max(ID) from tempUsers)
set @query = (Select Queries from tempUsers where ID = @count)

while(@count < @max)
begin
print(@query)
set @count += 1
set @query = (Select Queries from tempUsers where ID = @count)
end