Gibt es eine Abkürzung für "Auto_Fix" für alle verwaisten Benutzer in einer SQL Server 2008 R2-Datenbank?


16

Es ist ziemlich einfach, einen einzelnen verwaisten SQL-Benutzer für eine Anmeldung zu reparieren, indem Sie Folgendes verwenden:

EXEC sp_change_users_login 'Auto_Fix', 'user'

Ich könnte dies skripten, aber gibt es eine gespeicherte Prozedur, die automatisch versucht, jeden verwaisten Benutzer in einer bestimmten Datenbank zu reparieren?

Antworten:


15

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

Natürlich können Sie die Aktionszeilen ( EXEC) auskommentieren und die Ergebnisse ausdrucken, wenn Sie sie zuerst testen (oder nur ein Audit durchführen) möchten .


2

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

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


Nun, ich kann das folgendermaßen erklären: 1 Rufe jeden Login in Syslogins ab, 2 ordne Benutzer (Bereich ist Datenbankebene) und Login (Bereich ist Instanzebene) für jede Datenbank neu zu
Phú Nguyễn Dương

0

Dies ist ein hervorragender Anwendungsfall für die Verwendung des Befehls ' Repair-DbaDbOrphanUser' von dbatools

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 dann mit

Repair-DbaDbOrphanUser -SqlInstance $sqlinstance

ComputerName : SQL01
InstanceName : MSSQLSERVER
SqlInstance  : SQL01
DatabaseName : SockFactoryApp
User         : SockFactoryApp_User
Status       : Success
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.