Benutzer mit den meisten Antworten
Berechtigung zum Anlegen und Löschen nehmen

Frage
-
hi
ich würde gerne über das SQL Rollen konzept einem Benutzer das anlegen und löschen neuer und vorhandener datenbanken entziehen. Innerhalb der Datenbanken soll der Benutzer jedoch alles machen können, auch die DB Struktur ändern können. Wie auch Create Procedure & Co. Befehlehle ausführen können.
Gibt es eine Möglichkeit das Zentral zu verwalten und nicht über die Berechtigung auf Datenbank-Ebene zu realisieren?
Antworten
-
Hallo
Nein, denn der einzige, der solche Rechte in automatisch allen Datenbanken hat, ist ein sysadmin.
Der Datenbank-Bereich ist wirklich getrennt zu betrachten.
Hier kann man sich entsprechende Rollen bauen, oder auch einfach mitverwenden.
Da bieten sich zum Beispiel "ddl_admin" uä. an.
Die db_owner-Role sollte man aus Sicherheitsgründen nicht verwenden, wenn man sicherstellen möchte, das derjenige die Datenbank nicht strukturell ändern kann (inkl. löschen) oder gar weitere Systemweite rechte erlangt.
Andreas Wolter (Blog | Twitter)
MCM - Microsoft Certified Master SQL Server 2008
MCSM - Microsoft Certified Solutions Master Data Platform, SQL Server 2012
www.andreas-wolter.com | www.SarpedonQualityLab.com- Als Antwort vorgeschlagen Andreas.WolterMicrosoft employee Dienstag, 15. April 2014 13:23
- Als Antwort markiert Steven86 Dienstag, 15. April 2014 13:24
-
Hallo,
es gibt schon eine "automatische Lösung", zu der ich aber nicht gerade raten würde.
Wenn man eine neue Datenbank anlegt, wird die Systemdatenbank "model" mit allen Objekten als Vorlage und das schließt die Berechtigungen mit ein. Wenn Du also den besagten User dort die gewünschten Rechte gibt's, hat er automatisch diese auch in jeder neu erstellten Datenbank.
Nur wie gesagt würde ich es nicht empfehlen, irgendwann soll eine Datenbank erstellt werden, zu der er keine Rechte haben soll und dann wird dieser Automatismus vergessen.
Olaf Helper
[ Blog] [ Xing] [ MVP]- Als Antwort markiert Steven86 Dienstag, 15. April 2014 11:46
Alle Antworten
-
Hallo
Nein, denn der einzige, der solche Rechte in automatisch allen Datenbanken hat, ist ein sysadmin.
Der Datenbank-Bereich ist wirklich getrennt zu betrachten.
Hier kann man sich entsprechende Rollen bauen, oder auch einfach mitverwenden.
Da bieten sich zum Beispiel "ddl_admin" uä. an.
Die db_owner-Role sollte man aus Sicherheitsgründen nicht verwenden, wenn man sicherstellen möchte, das derjenige die Datenbank nicht strukturell ändern kann (inkl. löschen) oder gar weitere Systemweite rechte erlangt.
Andreas Wolter (Blog | Twitter)
MCM - Microsoft Certified Master SQL Server 2008
MCSM - Microsoft Certified Solutions Master Data Platform, SQL Server 2012
www.andreas-wolter.com | www.SarpedonQualityLab.com- Als Antwort vorgeschlagen Andreas.WolterMicrosoft employee Dienstag, 15. April 2014 13:23
- Als Antwort markiert Steven86 Dienstag, 15. April 2014 13:24
-
ok also muss ich jedes mal wenn ich eine neue DB anlege darauf achten das der benutzer die ddl_admin rechte für die neue DB bekommt.(oder eben neue DBs mittels SQL Script anlegen und das dort mit angeben)
Grund für das ganze ist, das nur die administratoren Datenbanken anlegen udn löschen sollen. Die Entwickler jedoch nur innerhalb der Datenbanken handwerken dürfen.
-
... also muss ich jedes mal wenn ich eine neue DB anlege darauf achten das der benutzer die ddl_admin rechte für die neue DB bekommt.(oder eben neue DBs mittels SQL Script anlegen und das dort mit angeben)...
Andreas Wolter (Blog | Twitter)
MCM - Microsoft Certified Master SQL Server 2008
MCSM - Microsoft Certified Solutions Master Data Platform, SQL Server 2012
www.andreas-wolter.com | www.SarpedonQualityLab.com -
Hallo,
es gibt schon eine "automatische Lösung", zu der ich aber nicht gerade raten würde.
Wenn man eine neue Datenbank anlegt, wird die Systemdatenbank "model" mit allen Objekten als Vorlage und das schließt die Berechtigungen mit ein. Wenn Du also den besagten User dort die gewünschten Rechte gibt's, hat er automatisch diese auch in jeder neu erstellten Datenbank.
Nur wie gesagt würde ich es nicht empfehlen, irgendwann soll eine Datenbank erstellt werden, zu der er keine Rechte haben soll und dann wird dieser Automatismus vergessen.
Olaf Helper
[ Blog] [ Xing] [ MVP]- Als Antwort markiert Steven86 Dienstag, 15. April 2014 11:46
-
Wenn Du uns einen RePro zur Verfügung stellen könntest und eine exakte Liste der Schritte, inkl. Ausführung, die Du ausgeführt hast, könnten wir leichter herausfinden, woran es bei Dir liegt.
Prinzipiell sollte der db_ddladmin ein CREATE PROC ausführen dürfen
Andreas Wolter (Blog | Twitter)
MCM - Microsoft Certified Master SQL Server 2008
MCSM - Microsoft Certified Solutions Master Data Platform, SQL Server 2012
www.andreas-wolter.com | www.SarpedonQualityLab.com -
ich habe mir eine neue Test Datenbank angelegt. auch hier kein erfolg.
erst wenn ich den user zur Rolle Sysadmin hinzufüge geht der command.
der fehler leigt schienbar in der eigens erstellten Rolle: hier wurde der punkt "beliebige Datenbank erstellen und ändern" explizit verweigert.- Bearbeitet Steven86 Dienstag, 15. April 2014 12:55
-
Könntest Du uns bitte genauere Infos geben, was Du mit "eigens erstellter Rolle" meinst?
Ich sehe in dem Sceenshot ja keine.
Teste es doch einfach mal ohne diese, dann weisst Du ja, ob es wirklich an dieser liegt, oder?
Denies auf Systemebene sind ja unnötig, wenn dort gar keine Rechte erst vergeben wurden.
Ansonsten benötige ich wirklich eine detaillierte Angabe, was Du Schritt für Schritt getan hast, um dem Fehler auf die Schliche zu kommen.
Andreas Wolter (Blog | Twitter)
MCM - Microsoft Certified Master SQL Server 2008
MCSM - Microsoft Certified Solutions Master Data Platform, SQL Server 2012
www.andreas-wolter.com | www.SarpedonQualityLab.com -
also fehler gefunden.
es liegt daran das ich eine eigene gruppe erstellt habe in der der user drin ist. sprich er ist in public und in der "eigenen gruppe"
hier wurde explizit punkt "beliebige Datenbank ändern" verweigert. Wenn ich das zulassen gehts auch mit dem kommando, allerdings kann der user dann auch die datenbank löschen - was ja nicht ziel ist.
-
Weder die Serverrolle public noch die Datenbankrolle db_ddladmin können Datenbanken löschen.
Wenn es in der eigenen "erlaubt" wurde, klar. Wenn es denied wurde, sehe ich zwar eigentlich keinen Zusammenhang mit dem in der Datenbank, aber da fehlt mir wie gesagt eine genaue Definition.
Und dieses Recht einfach zu entziehen/revoken sollte ausreichen. Denien wäre meines Erachtens zu viel.
Andreas Wolter (Blog | Twitter)
MCM - Microsoft Certified Master SQL Server 2008
MCSM - Microsoft Certified Solutions Master Data Platform, SQL Server 2012
www.andreas-wolter.com | www.SarpedonQualityLab.com- Bearbeitet Andreas.WolterMicrosoft employee Dienstag, 15. April 2014 13:14
-
oh man ich kotz hier gleich aufn tisch.
jetzt geht der execute befehl nicht mehr mit dem user.
Aktuell ist er in den gruppen
db_datareader
db_datawriter
db_ddladmin
publicin der MSDB ist der user als
public
SQLAgentOperator
SQLAgentReader
SQLAgentUserRoleGibt es denn keine simple Möglichkeit einen Benutzer im SQL zu haben der alles innerhalb der DBs darf außer diese zu löschen oder neue DBs zu erstellen.
- Bearbeitet Steven86 Dienstag, 15. April 2014 14:10
-
Das Execute-Recht müssstest Du über eine eigene Rolle erschlagen.
Das kann so aussehen:
CREATE ROLE [role_db_executor] GO GRANT EXECUTE TO [role_db_executor]
Was Du in der msdb machen möchtest, erschließt sich mir aus dem bisherigen Verlauf nicht.
Und Nein, dafür ist Handarbeit gefragt. Zu db_owner schrieb ich oben ja bereits, das ich es nicht empfehlen kann.
Andreas Wolter (Blog | Twitter)
MCM - Microsoft Certified Master SQL Server 2008
MCSM - Microsoft Certified Solutions Master Data Platform, SQL Server 2012
www.andreas-wolter.com | www.SarpedonQualityLab.com -
Alternativ dazu sollte man diese User vielleicht zum Besitzer des jeweiligen Schemas machen.
Oder mit dem "CONTROL"-Recht auf das jeweilige Schema arbeiten. Dafür ist es hilfreich, sich schon etwas mit der Berechtigungshierarchie in SQL Server auszukennen. So schnell ist das leider nicht erklärt. Aber sicher findest Du über bing/google und BOL viel Hilfestellung.
Andreas Wolter (Blog | Twitter)
MCM - Microsoft Certified Master SQL Server 2008
MCSM - Microsoft Certified Solutions Master Data Platform, SQL Server 2012
www.andreas-wolter.com | www.SarpedonQualityLab.com -
datareader/-writer deckt den Zugriff auf Tabellen ab, aber nicht auf Stored Procedure.
Wenn sich alle Stored Procedure in einem Schema wie "dbo" befinden, kannst Du die Berechtigungen einfach mit
GRANT EXECUTE ON SCHEMA::dbo TO [User oder Rolle];
festlegen; dann dürfen alle SP in dem Schema ausgeführt werden.Olaf Helper
[ Blog] [ Xing] [ MVP] -
hmm und die create role dann für jede DB richtig?
Selbstverständlich. Die Rolle existiert ja nur im Datenbank-Scope.Andreas Wolter (Blog | Twitter)
MCM - Microsoft Certified Master SQL Server 2008
MCSM - Microsoft Certified Solutions Master Data Platform, SQL Server 2012
www.andreas-wolter.com | www.SarpedonQualityLab.com