none
Berechtigung zum Anlegen und Löschen nehmen RRS feed

  • 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?

    Dienstag, 15. April 2014 08:32

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

    Dienstag, 15. April 2014 10:45
  • 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
    Dienstag, 15. April 2014 11:35
  • Danke hat sich gelöst

    der User einfach in die gruppe public und db_ddladmin und zur Rolle Public und fertig.

    Die eigene Rolle habe ich entfernt.

    • Als Antwort markiert Steven86 Dienstag, 15. April 2014 13:21
    Dienstag, 15. April 2014 13:20

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

    Dienstag, 15. April 2014 10:45
  • 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.

    Dienstag, 15. April 2014 11:07
  • ... 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)...

    Korrekt. Solch einen Prozess kann man sich gut per Script definieren.

    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 markiert Steven86 Dienstag, 15. April 2014 11:10
    • Tag als Antwort aufgehoben Steven86 Dienstag, 15. April 2014 11:46
    Dienstag, 15. April 2014 11:10
  • 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
    Dienstag, 15. April 2014 11:35
  • so leider geht es nicht

    ich habe den benutzer die rechte

    db_ddladmin gegeben und dennoch kommt beim ausführen der fehler

    Die CREATE PROCEDURE-Berechtigung wurde in der Datenbank verweigert.

    Dienstag, 15. April 2014 12:33
  • 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

    Dienstag, 15. April 2014 12:41
  • 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
    Dienstag, 15. April 2014 12:46
  • 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

    Dienstag, 15. April 2014 12:59
  • 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.

    Dienstag, 15. April 2014 13:01
  • 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

    Dienstag, 15. April 2014 13:12
  • Danke hat sich gelöst

    der User einfach in die gruppe public und db_ddladmin und zur Rolle Public und fertig.

    Die eigene Rolle habe ich entfernt.

    • Als Antwort markiert Steven86 Dienstag, 15. April 2014 13:21
    Dienstag, 15. April 2014 13:20
  • 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
    public

    in der MSDB ist der user als 
    public
    SQLAgentOperator
    SQLAgentReader
    SQLAgentUserRole

    Gibt 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
    Dienstag, 15. April 2014 14:08
  • 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

    Dienstag, 15. April 2014 14:16
  • hmm und die create role dann für jede DB richtig?
    Dienstag, 15. April 2014 14:19
  • 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

    Dienstag, 15. April 2014 14:22
  • 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]

    Dienstag, 15. April 2014 14:22
  • 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

    Dienstag, 15. April 2014 14:22