Sql-Server

如何刪除數據庫中的所有權限?

  • October 8, 2021

每次我需要恢復數據庫或重新初始化複製發佈時,我首先(在恢復的數據庫或訂閱數據庫上)編寫所有權限觸發器索引同義詞,有時是統計資訊

然後我進行恢復或(應用快照),然後在恢復的數據庫上重新應用我保存的腳本。

我有一些 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)

引用自:https://dba.stackexchange.com/questions/260200