Announcement

Collapse
No announcement yet.

Wie erstellt man einen "kleinen dbo"?

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

  • Wie erstellt man einen "kleinen dbo"?

    Hallo!

    Mein Ziel ist es, Benutzern innerhalb einer Datenbank alle Rechte bezüglich der Daten (von <b>SELECT</b> über <b>CREATE ...</b> bis hin zu <b>ALTER ...</b> und <b>DROP ...</b>) zu geben, unabhängig davon, wer das Objekt erstellt hat. Allerdings sollen sie nicht die Optionen der Datenbank verändern, keine Backups/Restores durchführen, keine <b>dbcc</b>-Befehle ausführen und auch keine Berechtigungen ändern können. Sie sollen also ein "kleiner dbo" werden.

    Hier stosse ich auf folgendes Problem:

    Alle Rechte die ich vergeben möchte besitzt nur die Rolle <b>db_owner</b> und einige dieser Rechte sind nicht übertragbar, bzw. können immer nur vom jeweiligen Objektbesitzer durchgeführt werden (z.B.: <b>ALTER TABLE</b>). Hier existiert noch das Problem, dass wenn ein Objekt über eine <b>adp</b> erstellt wurde, es einen konkreten Besitzer haben kann (Leider bin ich noch nicht so weit <b>dbo</b> als Standardbesitzer von Objekten zu machen, auch wenn sie über eine <b>adp</b> erstellt wurden; es würde einiges vereinfachen. Eine Vereinheitlichung muss noch erfolgen.).
    Prinzipiell müsste der Benutzer alle Rechte der Rolle <b>db_owner</b> erhalten, aber ohne die oben beschrieben.

    Eine Idee von mir war, eine Rolle zu erschaffen, die die Rolle <b>db_owner</b> und eine Rolle mit einem <b>Revoke</b> bzw. <b>Deny</b> auf die unerwünschten Rechte enthält und die Benutzer dann zu Mitgliedern machen. Allerdings kann man unter normalen Umständen die festen Rollen nicht einer anderen Rolle als Mitglied zu ordnen (Ich habe es auf einer Test-<b>MSDE</b> durch Manipulation der <b>sp_addrolemember</b> geschafft, in dem ich in einer neuen gespeicherten Prozedur <b>sp_0_addrolemember</b> die Prüfung darauf deaktiviert habe und sie dann benutzt habe). Das funktioniert auch, aber ich scheitere an der anderen Rolle, da ich z.B. das Recht <b>ALTER DATABASE</b> nicht entziehen kann.

    Eine andere Idee war es, mich dem Problem von der anderen Seite zu nähern. Und zwar in dem ich die Rollen <b>db_datareader</b> und <b>db_datawriter</b> verwende und eine zusätzliche Rolle, die alle anderen Rechte enthält. Hier aber scheitere ich wieder daran, dass ich bestimmte Rechte, wie z.B. bereits erwähntes <b>ALTER TABLE</b> nicht gewähren kann.

    Kennt jemand eine Lösung?
    Bin für jede Hilfe dankbar!

    MfG

    Holger

  • #2
    Idee:
    Wenn ich die zweite Idee nehme und noch die Rolle <b>ddladmin</b> hinzunehme könnte es gehen.

    Ich muss das noch testen.

    Holge

    Comment


    • #3
      Wenn ich die Rechte der Rollen <b>db_datareader</b>, <b>db_datawriter</b> und <b>db_dlladmin</b> kombiniere fehlt mir "nur" die <b>execute</b>-Rechte für die gespeicherten Prozeduren.
      Kann mir jemand sagen, wie ich eine Datenbankrolle erstellen kann, die analog zu <b>db_datareader</b> immer automatisch alle neuen gespeicherten Prozeduren mit aufnimmt und für sie das <b>execute</b>-Recht gewährt?

      Da <b>execute</b> sich ja auf einzelne Objekte bezieht, könnte ich rein theoretisch eine Prozedur schreiben, die immer die Rechte für alle neuen Prozeduren gewährt. Da es aber ziemlich viele Datenbanken betrifft und es den Server belastet, halte ich es für keine optimale Lösung.

      Für Hilfe wäre ich sehr dankbar.

      MfG

      Holge

      Comment

      Working...
      X