[MSSQL] Eigene Rechte (Server/DB) ermitteln

S-Abf

Grünschnabel
Hallo,

ich habe ein relativ spezielles Problem. Hab auch schon hier im Forum gesucht, jedoch nix gefunden. Google konnte mir bislang auch nicht wirklich helfen.

Wir haben vor Kurzem den Auftrag bekommen, die Entwicklung einer viele Jahre bestehenden Branchensoftware fortzuführen.

Meine Aufgabe ist nun, eine Installationsroutine zu bauen. Mit Hilfe dieser muss man auch neue Datenbanken installieren oder vohandene neu anlegen (Drop + Create) zu können. Genau hier liegt das Problem, das ich habe.

Wie kann ich ermitteln, ob der angemeldete Nutzer über ausreichende Rechte verfügt, um ...
  • bestimmte installierte Datenbanken zu löschen?
  • neue Datenbanken zu installieren?
  • optional: zuverlässig alle installierten Datenbanken aufzulisten?

Als Erschwernis kommt hinzu, dass die meisten Anwender wahrscheinlich noch die MSDE (SQL Server 2000) einsetzen (weil sie dies schon viele Jahre tun), wohingegen aber auch SQL Server 2005 eingesetzt wird und mit 2008 und 2008R2 immer mehr Verbreitung findet. Der Einsatz von SQL Server 2005/2008 soll forciert werden. Installiert wird immer die kostenlose Express-Variante, aber konstenpflichtige Versionen können trotzdem zum Einsatz kommen, weil sie besipielsweise vom Anwender schon installert wurden oder im Betreibssystem mehr oder weniger integriert sind (bspw. Windows SBS).

Es ist also wünschenswert, die Lösung so universal wie möglich zu gestalten, ist aber kein K.O.-Kriterium (denn was nicht geht, geht nun mal nicht). Ich weiß (oder glaube zu wissen), dass der technische Unterschied zwischen 2000 und 2005+ relativ groß ist, wodurch eine Universalität nicht so einfach sein dürfte.

Ich hoffe, dass mir hier irgendjemand helfen kann. Ich bin für jeden Hinweis dankbar, denn diese Rechte-Sache habe ich noch nicht so ganz auf dem Schirm.

Vielen Dank schon mal
 
Vielen Dank,

das habe ich gestern nach dem Verfassen des Beitrags auch gefunden -- nach langem, langem Suchen. Hatte bloß keine Zeit mehr, das so richtig auszuprobieren. Erst wieder gegen Ende der Woche werde ich mich damit befassen können, vielleicht auch erst nächste Woche.

Die Frage, die sich jetzt noch stellt, ist: Funktioniert das ganze auch bei der MSDE bzw. SQL Server 2000? Muss ich mal probieren ...

Und wie ist das eigentlich mit der Berechtigung, eine Datenbank löschen zu können? Haben das generell alle "sysadmin"-Konten und implizit auch der db_owner der jeweilgen Datenbank? Und wenn ja, kann dem das Recht hypothetisch auch entzogen werden? Ich habe bis jetzt jedenfalls noch keine Permission gefunden, die "DROP DATABASE" lautet.

Bei Datenbankdesign und -programmierung kenne ich mich m.E. ganz gut aus, aber DB-Administration mit Berechtigungen und dem ganzen Kram habe ich so gut wie gar nicht auf dem Schirm, weil ich bislang nicht in die Verlegenheit gekommen bin, davon Gebrauch machen zu müssen.
 
Zuletzt bearbeitet:
Für SQL 2005 aufwärts gilt:
"To execute DROP DATABASE, at a minimum, a user must have CONTROL permission on the database."

Für MSSQL 2000 gilt:
DROP DATABASE permissions default to the database owner, members of the sysadmin and dbcreator fixed server roles, and are not transferable.

Bei SQL 2000 konnte man an den berechitungen der fixed roles auch nicht grossartig rum drehen.
Da hab ich allerdings leider grade keine zur hand auf der ich testen könnte wie das aussieht.

bei SQL 2005 bekommst du keine fixed roles zurück, sondern die einzelnen berechtigungen die du besitzt. Sprich du kannst einfach folgendes machen:
SQL:
SELECT * FROM fn_my_permissions(NULL, 'DATABASE') WHERE permission_name = 'CONTROL';
respektive:
SELECT * FROM fn_my_permissions(NULL, 'DATABASE') WHERE permission_name IN('CREATE DATABASE', 'CREATE ANY DATABASE', 'ALTER ANY DATABASE');

Welche berechtigungen von welcher operation benötigt werden, findest du bei dem jeweiligen komando in der MSDN
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück