none
Verwaiste User nach Failovern RRS feed

  • 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?

    Freitag, 21. März 2014 14:31

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

    Freitag, 21. März 2014 18:17

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

    Freitag, 21. März 2014 18:17
  • Das Script wurde für uns entwickelt, deswegen kann ich es hier leider nicht posten.

    Das Problem ist bei uns eher mit reinen SQL Usern.

    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

    Montag, 24. März 2014 12:39
    Beantworter