it-swarm.com.de

Gibt es eine Kurzform, um alle verwaisten Benutzer in einer SQL Server 2008 R2-Datenbank automatisch zu fixieren?

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?

16

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.

15
Aaron Bertrand

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
2
Devshish

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
0