none
User inkl. Berechtigungen von einem Server auf den anderen übertragen RRS feed

  • Frage

  • Hallo Forum,

    ich muss von einem SQL Server 2005 auf einen anderen ca. 25 DBs inkl. User + Berechtigungen pro DB übertragen.
    1. DBs-Import löse ich einfach: auf den alten Server mache ich die aktuellen Backups, auf den neuen die Restore-s -> erledigt.
    2. Alleine die Accounts (ca. 70) zu übertragen ist auch kein großes Problem, dazu gibt es ein Script auf der Seite von MS.
    3. Aber wie übertrage ich die jeweiligen User-Berechtigung per DB? Gibt es etwas fertiges, oder muss man sich ein Script ausdenken: Foreach jede DB, User-Name, Berechtigungen auslesen und dann auf den neuen Server übertragen? Danke für Euere Hilfe P.

    Dienstag, 13. März 2012 13:22

Antworten

  • Hi,

    dafür gibt es extra einen eigenen SSIS Task. Dieser überträgt die Benutzer auf den neuen Server. Da die Berechtigungen innerhalb der Datenbank auch in der Datenbank stehen, muss lediglich eine Verknüpfung für den Datenbankuser zum Serveruser (Nenne ich jetzt mal so :-)) hergestellt werden.

    Dies erledigt der Task. Allerdings ist dabei zu beachten, dass die Passwörter bei DB Usern (nicht bei Windows Usern) zurück gesetzt werden muss, da der neue Datenbankserver auch einen neuen Key zum verschlüsseln nutzt.

    Grüße

    Oliver

    • Als Antwort markiert Purclot Dienstag, 13. März 2012 14:50
    Dienstag, 13. März 2012 13:33
  • Am 13.03.2012 schrieb Purclot:

    ich muss von einem SQL Server 2005 auf einen anderen ca. 25 DBs inkl. User + Berechtigungen pro DB übertragen.

    Dazu gab es nebenan kürlich einen Thread:
    http://social.msdn.microsoft.com/Forums/de-DE/sqlserverde/thread/be9eaa26-da0e-42c4-b10c-3c4bccca6009#be9eaa26-da0e-42c4-b10c-3c4bccca6009

    Servus
    Winfried


    Connect2WSUS: http://www.grurili.de/tools/Connect2WSUS.exe
    GPO's: http://www.gruppenrichtlinien.de
    Community Forums NNTP Bridge: http://communitybridge.codeplex.com/

    • Als Antwort markiert Purclot Dienstag, 13. März 2012 14:50
    Dienstag, 13. März 2012 13:36
  • 3. Aber wie übertrage ich die jeweiligen User-Berechtigung per DB?

    Hallo,

    die sind alle in den Datenbanken selbst gespeichert, da musst Du nichts weiter beachten.

    Das einzige, was es noch gäbe, sind die Zuordnung der Logins zu den Server-Rollen; aber mal davon ausgehend, das Du nicht hunderte von Accounts mit Server-Rollen wie SysAdmin hast, könnte man das zur Not auch manuell nachpflegen.


    Olaf Helper
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich
    Blog Xing

    • Als Antwort markiert Purclot Dienstag, 13. März 2012 14:50
    Dienstag, 13. März 2012 13:38

Alle Antworten

  • Hi,

    dafür gibt es extra einen eigenen SSIS Task. Dieser überträgt die Benutzer auf den neuen Server. Da die Berechtigungen innerhalb der Datenbank auch in der Datenbank stehen, muss lediglich eine Verknüpfung für den Datenbankuser zum Serveruser (Nenne ich jetzt mal so :-)) hergestellt werden.

    Dies erledigt der Task. Allerdings ist dabei zu beachten, dass die Passwörter bei DB Usern (nicht bei Windows Usern) zurück gesetzt werden muss, da der neue Datenbankserver auch einen neuen Key zum verschlüsseln nutzt.

    Grüße

    Oliver

    • Als Antwort markiert Purclot Dienstag, 13. März 2012 14:50
    Dienstag, 13. März 2012 13:33
  • Am 13.03.2012 schrieb Purclot:

    ich muss von einem SQL Server 2005 auf einen anderen ca. 25 DBs inkl. User + Berechtigungen pro DB übertragen.

    Dazu gab es nebenan kürlich einen Thread:
    http://social.msdn.microsoft.com/Forums/de-DE/sqlserverde/thread/be9eaa26-da0e-42c4-b10c-3c4bccca6009#be9eaa26-da0e-42c4-b10c-3c4bccca6009

    Servus
    Winfried


    Connect2WSUS: http://www.grurili.de/tools/Connect2WSUS.exe
    GPO's: http://www.gruppenrichtlinien.de
    Community Forums NNTP Bridge: http://communitybridge.codeplex.com/

    • Als Antwort markiert Purclot Dienstag, 13. März 2012 14:50
    Dienstag, 13. März 2012 13:36
  • 3. Aber wie übertrage ich die jeweiligen User-Berechtigung per DB?

    Hallo,

    die sind alle in den Datenbanken selbst gespeichert, da musst Du nichts weiter beachten.

    Das einzige, was es noch gäbe, sind die Zuordnung der Logins zu den Server-Rollen; aber mal davon ausgehend, das Du nicht hunderte von Accounts mit Server-Rollen wie SysAdmin hast, könnte man das zur Not auch manuell nachpflegen.


    Olaf Helper
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich
    Blog Xing

    • Als Antwort markiert Purclot Dienstag, 13. März 2012 14:50
    Dienstag, 13. März 2012 13:38
  • Hallo,

    danke für Euere Hilfe.

    P.

    Dienstag, 13. März 2012 14:51
  • Für die Serverrollen einfach das Skript erzeugen und ausführen:

    -- Server-Rollen
    with serv_permission
    as
    (
    select 'EXEC master..sp_addsrvrolemember @loginame = N'''+loginname+''',
    @rolename = N''sysadmin'';' as script from master..syslogins
    where sysadmin = 1
    union
    select 'EXEC master..sp_addsrvrolemember @loginame = N'''+loginname+''',
    @rolename = N''securityadmin'';' as script from master..syslogins
    where securityadmin = 1
    union
    select 'EXEC master..sp_addsrvrolemember @loginame = N'''+loginname+''',
    @rolename = N''serveradmin'';' as script from master..syslogins
    where serveradmin = 1
    union
    select 'EXEC master..sp_addsrvrolemember @loginame = N'''+loginname+''',
    @rolename = N''setupadmin'';' as script from master..syslogins
    where setupadmin = 1
    union
    select 'EXEC master..sp_addsrvrolemember @loginame = N'''+loginname+''',
    @rolename = N''processadmin'';' as script from master..syslogins
    where processadmin = 1
    union
    select 'EXEC master..sp_addsrvrolemember @loginame = N'''+loginname+''',
    @rolename = N''diskadmin'';' as script from master..syslogins
    where diskadmin = 1
    union
    select 'EXEC master..sp_addsrvrolemember @loginame = N'''+loginname+''',
    @rolename = N''dbcreator'';' as script from master..syslogins
    where dbcreator = 1
    union
    select 'EXEC master..sp_addsrvrolemember @loginame = N'''+loginname+''',
    @rolename = N''bulkadmin'';' as script from master..syslogins
    where bulkadmin = 1
    )
    Select script
    from serv_permission
    order by script;

    Einen schönen Tag noch,
    Christoph
    --
    Microsoft SQL Server MVP
    www.insidesql.org/blogs/cmu


    Mittwoch, 14. März 2012 07:55
    Beantworter
  • Hallo Christoph,
    danke für Dein hübsches Script, sehr hilfreich!
    Eine Frage noch: der Code ist selbsterklärend aber irgendwie verstehe ich die Zeile "with serv_permission as (" nicht . Wird dadurch eine temporäre pseudo Tabelle erstellt?

    Danke P.
    Mittwoch, 14. März 2012 10:15
  • Hallo Peter,
    das ist eine CTE (Common Table Expression).
    http://msdn.microsoft.com/de-de/library/ms190766.aspx
     Einen schönen Tag noch,
    Christoph
    --
    Microsoft SQL Server MVP
    www.insidesql.org/blogs/cmu

    Mittwoch, 14. März 2012 14:09
    Beantworter