none
Datenbankrolle für IndexRebuild RRS feed

  • Frage

  • Hallo zusammen,

    Ein Service Account "A" hat auf seine Datenbank "DB_A" datareader- und datawriter-Rechte. Zusätzlich soll dieser User jetzt noch die Möglichkeit haben eine Store Procedure die in der Master-Datenbank liegt auf DB_A auszuführen. Die Stored Procedure macht einen Index Rebuild.

    Wenn ich dem User auf DB_A dbo_owner-Rechte gebe, dann funktioniert alles. Die spannende Frage, welche Rechte benötigt der Service Account "A" um zu seinen vorhandenen Rechten (datareader und datawriter) noch einen IndexRebuild machen kann?

    Vollzugriff (dbo_owner) - Rechte soll der User aber nicht haben!

    Um das Problem zu lösen, könnte ich mir eine neue Datenbank-Rolle vorstellen. Ich habe das noch nie gemacht und benötige eure Hilfe! :-)

    Grüße

    Julian


    • Bearbeitet Julian79 Donnerstag, 12. Januar 2017 11:48
    Donnerstag, 12. Januar 2017 11:40

Antworten

  • Hallo Julian,

    Index Rebuild/Reorganize laufen über ein ALTER INDEX (Transact-SQL) Befehl und in der MSDN sind auch immer die benötigten Mindest-Rechte dokumentiert:
    "Zum Ausführen von ALTER INDEX benötigen Sie mindestens die ALTER-Berechtigung auf der Tabelle bzw. Sicht."


    Olaf Helper

    [ Blog] [ Xing] [ MVP]



    • Bearbeitet Olaf HelperMVP Donnerstag, 12. Januar 2017 12:34
    • Als Antwort markiert Julian79 Montag, 16. Januar 2017 08:17
    Donnerstag, 12. Januar 2017 12:34
  • Hallo,

    Wenn ich es richtig verstanden habe braucht die SP dann die Alter Berechtigung und der Account braucht dann die Execute Berechtigung.

    Gruß Benjamin


    Benjamin Hoch
    MCSE: Data Platform & Data Management and Analytics
    MCSA: SQL Server 2012/2014 & 2016 DB Administration
    MCSA: Windows Server 2012

    • Als Antwort markiert Julian79 Montag, 16. Januar 2017 08:17
    Donnerstag, 12. Januar 2017 12:39
  • Du kannst in der SP mit Execute as caller definieren. Dann funktioniert die SP nur dann wenn der Aufrufer auch die Rechte auf der DB hat.

    Benjamin Hoch
    MCSE: Data Platform & Data Management and Analytics
    MCSA: SQL Server 2012/2014 & 2016 DB Administration
    MCSA: Windows Server 2012

    • Als Antwort markiert Julian79 Montag, 16. Januar 2017 08:17
    Donnerstag, 12. Januar 2017 13:11
  • kann ich denn der Stored Procedure die Alter-Berechtigung geben?

    Hallo Julian,

    Du kannst einer SP Rechte geben, aber Du kannst in der SP mit der EXECUTE AS (Transact-SQL) Klausel angeben, unter welchem Benutzer die SP ausgeführt wird und da musst Du einen Benutzer angeben, der die benötigten Rechte hat.


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    • Als Antwort markiert Julian79 Montag, 16. Januar 2017 08:15
    Freitag, 13. Januar 2017 09:29

Alle Antworten

  • Hallo Julian,

    Index Rebuild/Reorganize laufen über ein ALTER INDEX (Transact-SQL) Befehl und in der MSDN sind auch immer die benötigten Mindest-Rechte dokumentiert:
    "Zum Ausführen von ALTER INDEX benötigen Sie mindestens die ALTER-Berechtigung auf der Tabelle bzw. Sicht."


    Olaf Helper

    [ Blog] [ Xing] [ MVP]



    • Bearbeitet Olaf HelperMVP Donnerstag, 12. Januar 2017 12:34
    • Als Antwort markiert Julian79 Montag, 16. Januar 2017 08:17
    Donnerstag, 12. Januar 2017 12:34
  • Hallo,

    Wenn ich es richtig verstanden habe braucht die SP dann die Alter Berechtigung und der Account braucht dann die Execute Berechtigung.

    Gruß Benjamin


    Benjamin Hoch
    MCSE: Data Platform & Data Management and Analytics
    MCSA: SQL Server 2012/2014 & 2016 DB Administration
    MCSA: Windows Server 2012

    • Als Antwort markiert Julian79 Montag, 16. Januar 2017 08:17
    Donnerstag, 12. Januar 2017 12:39
  • Hallo Benjamin,

    danke für deine Antwort.

    Ich habe auf dem SQL-Server mehrere Datenbanken mit den dazugehörigen Service-Usern. Jeder Service User darf die SP jeweils nur auf seine eigene Datenbank ausführen.

    Wenn ich es nach deinem Vorschlag machen würde, könnte jeder Service User der die Execute Berechtigung auf die SP besitzt auf jede verfügbare Datenbank die SP ausführen und anwenden. Oder täusche ich mich da?

    Grüße

    Julian 

    Donnerstag, 12. Januar 2017 13:05
  • Hallo Olaf,

    Danke für deine Antwort!

    Ich würde dies am liebsten mit einer Database Role umsetzen. Damit der Service Account automatisch das "Alter Table"-Recht erhält, sollte mal eine neue Tabelle der Datenbank hinzugefügt werden.

    In den Securables im Database Role Wizard finde ich leider keinen "Alter any Tables". Gibt es das irgendwo?

    Grüße

    Julian 

    Donnerstag, 12. Januar 2017 13:10
  • Du kannst in der SP mit Execute as caller definieren. Dann funktioniert die SP nur dann wenn der Aufrufer auch die Rechte auf der DB hat.

    Benjamin Hoch
    MCSE: Data Platform & Data Management and Analytics
    MCSA: SQL Server 2012/2014 & 2016 DB Administration
    MCSA: Windows Server 2012

    • Als Antwort markiert Julian79 Montag, 16. Januar 2017 08:17
    Donnerstag, 12. Januar 2017 13:11
  • Hallo Julian,

    schau Dir mal die Rolle db_ddladmin an. Ist mehr als reines ALTER TABLE, aber CREATE TABLE willst Du ja auch und dann bestimmt noch CREATE INDEX und und und.


    Einen schönen Tag noch, Christoph -- Data Platform MVP - http://www.insidesql.org/blogs/cmu

    Freitag, 13. Januar 2017 08:20
    Beantworter
  • Hallo Benjamin,

    wie kann ich denn der Stored Procedure die Alter-Berechtigung geben?

    Folgendes habe ich bisher getan:

    1. DB: MASTER (dort liegt die Stored Procedure)

    - Database Rolle "db_Execute_RebuildIndex" erstellt

    - Die Database Rolle hat Execute Rechte auf die Stored Procedure

    - Mitglieder sind die Service Accounts aller Datenbanken

    2. In einer der Datenbanken, bei dem der Index Rebuild durchgeführt werden soll:

    - Database Rolle "db_AlterTable" erstellt

    - Die Database Rolle hat Alter Table Rechte auf die Datenbank

    Als Mitglied kann ich allerdings keine Stored Procedure einfügen. Habe ich da was falsch verstanden? :-)

    Grüße

    Julian


    • Bearbeitet Julian79 Freitag, 13. Januar 2017 09:02
    Freitag, 13. Januar 2017 08:46
  • kann ich denn der Stored Procedure die Alter-Berechtigung geben?

    Hallo Julian,

    Du kannst einer SP Rechte geben, aber Du kannst in der SP mit der EXECUTE AS (Transact-SQL) Klausel angeben, unter welchem Benutzer die SP ausgeführt wird und da musst Du einen Benutzer angeben, der die benötigten Rechte hat.


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    • Als Antwort markiert Julian79 Montag, 16. Januar 2017 08:15
    Freitag, 13. Januar 2017 09:29
  • Hallo Christoph,

    danke für den Tip, ich habe mir die Rolle angesehen. In diesem Fall hatte sie etwas zu viel Berechtigungen!

    Grüße

    Julian

    Montag, 16. Januar 2017 08:16