Announcement

Collapse
No announcement yet.

Nutzer einer DB mit all seinen Rechten sichern (s_id)

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Nutzer einer DB mit all seinen Rechten sichern (s_id)

    Hallo zusammen,
    hat jemand eine Idee, wie man die Nutzer einer DB sichern kann, wo all seine Rechte hinterlegt sind? Habe das Problem, dass ich Dumps bereitgestellt bekomme (von Server A), diese einspielen muss (auf Server B) und anschließend sollen die Nutzer die gleichen Rechte haben wie auf dem Server von dem der Dump stammt (Server A). Wenn man die Logins skriptet, komme aber keine s-id's mit rüber und somit passt das nicht mehr.Wäre dankbar für jeden Tip.

  • #2
    Arbeitest du mit SQL-Authentifizierung? Falls ja könnte es etwas bringen auf Windows-Authentifizierung zu stellen. Alternativ wäre das einrichten einer Replikation u.U. eine Lösung.

    Comment


    • #3
      Also ich mache das immer so:

      1.
      Anlegen der Benutzernamen auf dem neuen Server per SQL- Script.
      GGf. kann man das per SELECT auf dem alten Server generieren lassen (master.sys.syslogins)

      2.
      Übertragen der Datenbank(en)

      3.
      In (je)der Datenbank für jeden Benutzer diese Sequenz laufen lassen (unter der Annahme db -Benutzer = Server - Login:

      [highlight=sql]
      use [dbname]
      exec sp_revokedbaccess 'nutzername' -- löscht den jetzt 'falschen' Benutzer
      go
      -- neu wieder eintragen
      exec sp_grantdbaccess N'nutzername', N'nutzername'
      exec sp_addrolemember N'rolle', N'nutzername'
      [/highlight]

      Das 3. läßt sich sicher auch scripten, da hab' ich aber nichts parat. Kommt drauf an wieviel Rollen zu beachten sind.

      Viel Erfolg
      Tino
      Ich habs gleich!
      ... sagte der Programmierer.

      Comment


      • #4
        Hallo Tino,
        vielen Dank für Deine Antwort. Werde ich gleich mal versuchen, bei mir sind es nur eben immer ne ganze Menge Nutzer die in 2-3 rollen stecken.

        Comment


        • #5
          Naja,

          eventuell kann man das sp_addrolemember auch extra pro Gruppe scripten und nach dem grantdbacces in einem separaten Stapel ausführen

          Wie gesagt, schau bitte mal die Systemsichten dazu an. Daraus mache ich mir dann immer Abfragen der Art (ungetestes Beispiel):

          [highlight=sql]
          SELECT 'exec sp_revokeaddress ''' + name +'''' FROM syslogins
          [/highlight]

          Das Ergebnis dieser Abfrage läßt sich dann direkt auf dem neuen Server ausführen ohne dass man jedes Login einzeln 'anfassen' muß.

          Viel Erfolg
          Tino
          Ich habs gleich!
          ... sagte der Programmierer.

          Comment


          • #6
            In den Datenbanken werden grundsätzlich nur die SID und deren Berechtigungen gespeichert.

            Wenn man die SQL Authentifizierung verwendet, haben dem Namen nach gleiche SQl Accounts auf verschiedenen Server(-instanzen) unterschiedliche SIDs, soweit klar.
            Sichert man eine Datenbanken von dem anderen Server zurück, passen die SIDs nicht und man hat dann in der DB sogenannte "verwaiste Benutzer" (orphaned user).
            Siehe MSDN: Problembehandlung bei verwaisten Benutzern.

            Es gibt die SP sp_change_users_login , mit der man die Zuordnung über den Account Namen automatisch korrigieren lassen kann. Man muss halt das nur je DB + User aufrufen, am besten über einen Cursor

            Beispiel:
            [highlight=SQL]
            EXEC sp_change_users_login @Action = 'Auto_fix', @UserNamePattern = 'SqlAccountName'
            [/highlight]
            Olaf Helper

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

            Comment


            • #7
              Vielen Dank für den Tip, Problem nun gelöst)

              Comment

              Working...
              X