Sql-Server-2008-R2

在 SQL Server 2008 R2 數據庫中是否有“Auto_Fix”所有孤立使用者的速記方法?

  • March 16, 2022

使用以下方法將單個孤立的 SQL 使用者修復為登錄相當簡單:

EXEC sp_change_users_login ‘Auto_Fix’, ‘user’

我可以編寫腳本,但是是否有一個現有的儲存過程會自動嘗試修復給定數據庫中的每個孤立使用者?

Ted Krueger(推特上的@onpnt)寫了一個很棒的腳本來做到這一點。它為沒有登錄名的任何使用者添加登錄名並執行 auto_fix。他甚至寫了一篇文章,其中包括修復 Windows 登錄:

http://blogs.lessthandot.com/index.php/DataMgmt/DBAdmin/fixing-orphaned-database-users

當然,如果您想先對其進行測試(或僅執行審計),您可以註釋掉操作行 ( EXEC),然後列印出結果。

基於上述腳本,我們可以像這樣使用 sp_MSForeachdb 修復實例中的所有使用者

declare @name varchar(150)
declare @query nvarchar (500)

DECLARE cur CURSOR FOR
   select name from master..syslogins

Open cur

FETCH NEXT FROM cur into @name

WHILE @@FETCH_STATUS = 0
BEGIN

set @query='USE [?]
IF ''?'' <> ''master'' AND ''?'' <> ''model'' AND ''?'' <> ''msdb'' AND ''?'' <> ''tempdb''
BEGIN   
exec sp_change_users_login ''Auto_Fix'', '''+ @name +'''
END'

EXEC master..sp_MSForeachdb @query

   FETCH NEXT FROM cur into @name

END

CLOSE cur
DEALLOCATE cur

希望它會有所幫助

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