如何删除数据库中的所有权限?

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)