Sql-Server
如何刪除數據庫中的所有權限?
每次我需要恢復數據庫或重新初始化複製發佈時,我首先(在恢復的數據庫或訂閱數據庫上)編寫所有權限、觸發器、索引、同義詞,有時是統計資訊
然後我進行恢復或(應用快照),然後在恢復的數據庫上重新應用我保存的腳本。
我有一些 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 '
問題:
如何刪除新恢復的數據庫中的所有權限
before
我在恢復之前應用包含權限的腳本?換句話說,在我重新應用以前的權限之前,刪除所有現有權限(還原後)的最簡單方法是什麼?
試試
sp_dbpermissions <db_name>
。它將提供授予和撤銷腳本。
您可以從他的部落格下載 Kenneth Fisher 的腳本。
這應該有助於在恢復後刪除所有使用者。
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)