Benutzer mit den meisten Antworten
Verwaiste User nach Failovern

Frage
-
Hallo,
ich habe mehrere Instanzen von SQL Server 2008R2 mit Mirroring und 2012 SP1 mit Always on.
Die globalen Logins werden auf den jeweiligen Instanzen per Script synchron gehalten. Nach einem Failover ist das Mapping zwischen einigen DB und globalem User getrennt. Das betrifft alle Versionen.
Der verwaiste User muss danach mit
exec sp_change_users_login 'Auto_Fix', <Username>, NULL gefixt werden.
Hat jemand die gleiche Erfahrung gemacht?
Antworten
-
Was genau macht denn Euer Script?
Windows-Logins erfahren ja naturgemäß eine andere Behandlung als SQL Logins. Letztere muss man eben genau mit dieser Prozedur, die Du aufführst, "matchen".
Das war schon immer so.
Alternativ kann man ein CREATE mit SID ausführen.
Aber so ist das schon auch korrekt.
Eine weitere Altarnative sind die für solche Szenarien konzipierten Contained Databases - auch wenn ich persönlich kein Fan von deren Konstrukt bin.
Andreas Wolter (Blog | Twitter)
MCM - Microsoft Certified Master SQL Server 2008
MCSM - Microsoft Certified Solutions Master Data Platform, SQL Server 2012
www.andreas-wolter.com | www.SarpedonQualityLab.com- Als Antwort vorgeschlagen Christoph MuthmannEditor Montag, 24. März 2014 07:36
- Als Antwort markiert Andreas.Mitschke Montag, 24. März 2014 09:47
Alle Antworten
-
Was genau macht denn Euer Script?
Windows-Logins erfahren ja naturgemäß eine andere Behandlung als SQL Logins. Letztere muss man eben genau mit dieser Prozedur, die Du aufführst, "matchen".
Das war schon immer so.
Alternativ kann man ein CREATE mit SID ausführen.
Aber so ist das schon auch korrekt.
Eine weitere Altarnative sind die für solche Szenarien konzipierten Contained Databases - auch wenn ich persönlich kein Fan von deren Konstrukt bin.
Andreas Wolter (Blog | Twitter)
MCM - Microsoft Certified Master SQL Server 2008
MCSM - Microsoft Certified Solutions Master Data Platform, SQL Server 2012
www.andreas-wolter.com | www.SarpedonQualityLab.com- Als Antwort vorgeschlagen Christoph MuthmannEditor Montag, 24. März 2014 07:36
- Als Antwort markiert Andreas.Mitschke Montag, 24. März 2014 09:47
-
Also wenn du die SQL Logins so skripten lässt, brauchst Du Dich auch nicht mehr um das Matching kümmern, da dieselbe SID verwendet wird.
/* Nur für eine bestimmte Datenbank Name unten einsetzen!!! */ SELECT 'Begin Try' + char(13) + char(10) + ' EXEC sp_droplogin '''+loginname+''';' + char(13) + char(10) + 'End Try Begin Catch Select ''Login war nicht vorhanden''; End Catch;' + char(13) + char(10) + 'CREATE LOGIN ['+loginname+'] with password =', CONVERT(VARBINARY(256), password) ,'HASHED,' + char(13) + char(10) + 'DEFAULT_DATABASE=['+dbname+'], DEFAULT_LANGUAGE=['+language+'], SID =' ,CONVERT(VARBINARY(16), sid), ', CHECK_POLICY = OFF;' + char(13) + char(10) + 'GO' FROM master..syslogins s WHERE isntuser = 0 and isntname = 0 and isntgroup = 0 and exists (Select * from MeineDB..sysusers where sid = s.sid) order by name;
Einen schönen Tag noch,
Christoph
--
Microsoft SQL Server MVP - http://www.insidesql.org/blogs/cmu