Benutzer mit den meisten Antworten
Datenbankrolle für IndexRebuild

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