Es ist ziemlich einfach, einen einzelnen verwaisten SQL-Benutzer für eine Anmeldung zu reparieren, indem er Folgendes verwendet:
EXEC sp_change_users_login 'Auto_Fix', 'Benutzer'
Ich könnte dies skripten, aber gibt es eine vorhandene gespeicherte Prozedur, die automatisch versucht, jeden verwaisten Benutzer in einer bestimmten Datenbank zu reparieren?
Ted Krueger ( @ onpnt auf Twitter) hat ein großartiges Skript geschrieben, das dies tut. Es fügt Anmeldungen für jeden Benutzer ohne Anmeldung hinzu und führt den auto_fix aus. Er hat sogar eine geschrieben, die das Korrigieren von Windows-Anmeldungen beinhaltet:
http://blogs.lessthandot.com/index.php/DataMgmt/DBAdmin/fixing-orphaned-database-users
Wenn Sie es zuerst testen möchten (oder lediglich ein Audit durchführen möchten), können Sie natürlich die Aktionszeilen (EXEC
) auskommentieren und einfach die Ergebnisse ausdrucken.
basierend auf dem obigen Skript können wir alle Benutzer an einer Instanz reparieren, indem wir sp_MSForeachdb wie folgt verwenden
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
hoffe es wird helfen
Unten ist das einfache Skript, das die Arbeit perfekt macht -
USE DBNAME ----- change db name for which you waant to fix Orphan users issue
GO
declare @name varchar(150)
DECLARE cur CURSOR FOR
select name from master..syslogins
Open cur
FETCH NEXT FROM cur into @name
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC sp_change_users_login 'AUTO_FIX', @name
FETCH NEXT FROM cur into @name
END
CLOSE cur
DEALLOCATE cur
Dies wäre ein großartiger Anwendungsfall für die Verwendung des Befehls dbatools Repair-DbaDbOrphanUser
Zuerst können Sie die verwaisten Benutzer identifizieren
Get-DbaDbOrphanUser -SqlInstance $sqlinstance
ComputerName : SQL01
InstanceName : MSSQLSERVER
SqlInstance : SQL01
DatabaseName : SockFactoryApp
User : SockFactoryApp_User
und lösen Sie sie dann mit
Repair-DbaDbOrphanUser -SqlInstance $sqlinstance
ComputerName : SQL01
InstanceName : MSSQLSERVER
SqlInstance : SQL01
DatabaseName : SockFactoryApp
User : SockFactoryApp_User
Status : Success