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
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
Comment