Mar*_*lli 5 replication sql-server permissions scripting restore
每次我需要恢复数据库或重新初始化复制发布时,我首先(在恢复的数据库或订阅数据库上)我编写所有权限、触发器、索引、同义词,有时还编写统计信息
然后我执行还原或(应用快照),然后在还原的数据库上重新应用我保存的脚本。
我有一些 LIVE 服务器,其中db_denydatawriter已被大量使用,尽管我拥有以前的所有权限,但由于db_denydatawriter
还原附带(因为它处于活动状态),新还原的数据库现在拥有它。
它会导致问题。
以至于现在我有了这个脚本(使用sp_foreachdb)只是为了在测试中删除它:
declare @db_list NVARCHAR(MAX)
SELECT @db_list = STUFF((
SELECT ', ' + name FROM sys.databases
WHERE name NOT IN ('DBA','TABLEBACKUPS','MASTER','MSDB','MODEL','TEMPDB','distribution')
FOR XML PATH(''), TYPE).value('.[1]', 'nvarchar(max)'), 1, 2, '')
SELECT [@db_list] =@db_list
exec sp_foreachdb @database_list = @db_list
,@exclude_list = 'dba,tablebackups,master,msdb,model,tempdb'
,@command='use ?;begin try EXEC sp_droprolemember @rolename = [db_denydatawriter], @membername = [mycompany\Developers] end try begin catch end catch '
Run Code Online (Sandbox Code Playgroud)
题:
如何删除新恢复的数据库中的所有权限before
我在恢复之前应用包含权限的脚本?
换句话说,在我重新应用以前的权限之前,删除所有现有权限(恢复后)的最简单方法是什么?
小智 0
这应该有助于在恢复后删除所有用户。
declare @sql nvarchar(max)
set @sql = ''
select @sql = @sql + '
print ''Dropping ' + name + '''drop user ' + name + ''
from dbo.sysusers
where name not in ('dbo', 'guest', 'INFORMATION_SCHEMA', 'sys', 'public') and LEFT(name, 3) <> 'db_'
order by name
--print @sql
execute (@sql)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
180 次 |
最近记录: |