DDL_admin vs db_owner Berechtigungen


15

Ich übernehme ein Projekt, bei dem Berechtigungen aller Datenbankbenutzer in unserer Serverfarm entfernt und eingeschränkt werden. (lustige Zeiten)

Eine der derzeit eingeschränkten Berechtigungen ist die Berechtigung db_owner.
Diese Berechtigung wird von Fall zu Fall überprüft. Eine häufige Änderung besteht jedoch darin, die Berechtigungen von db_owner durch folgende zu ersetzen:

Ich möchte den genauen Unterschied zwischen den beiden definieren (um Kunden zu informieren).
Soweit ich jedoch sagen kann, sollte der Unterschied zwischen den beiden sein:

  • db_accessadmin-Berechtigungen
  • Berechtigungen für db_backupoperator
  • Berechtigungen für db_securityadmin

Also in der Tat würden sie verlieren:
[ALTER ANY USER]
[CREATE SCHEMA]
[BACKUP DATABASE], [BACKUP LOG], [CHECKPOINT]
[ALTER ANY APPLICATION ROLE],[ALTER ANY ROLE]
[DROP DATABASE]

Gibt es noch etwas, das ein Benutzer verlieren würde, wenn db_owner durch die vier oben genannten Rollen ersetzt wird?
Dient dies tatsächlich in Bezug auf die Sicherheit zu einem großen Zweck?

Antworten:


16

db_ddladmin vs db_owner

db_ddladminNach allem, was ich aus dem, was ich getestet und nachgelesen habe, sagen kann, sieht Ihre Liste zum größten Teil korrekt aus, außer wenn Sie dies zulassen CREATE SCHEMA. Ich habe bestätigt, dass die anderen von Ihnen angegebenen Sicherheitsberechtigungen tatsächlich verweigert wurden.

Nur mit DDLADMIN verweigert:

[ALTER ANY USER]

[BACKUP DATABASE], [BACKUP LOG],[CHECKPOINT]

[ALTER ANY APPLICATION ROLE], [ALTER ANY ROLE]

[DROP DATABASE]

Unter Hinweis darauf, dass die. . .

  1. db_datareaderermöglicht den SELECTZugriff auf alle Tabellen
  2. db_datarwriterermöglicht INSERT, UPDATEund den DELETEZugriff auf alle Tabellen
  3. db_executorermöglicht den EXECUTEZugriff auf alle ausführbaren Objekte

Darüber hinaus können db_ddladmin-Rollenberechtigungen bedeuten. . .

Hinweis: Da es in den Jahren 2005 bis 2014 so viele verschiedene Versionen von SQL Server gibt, kann es am besten sein, wenn eine kleine Gruppe von Benutzern dies zunächst testet, um herauszufinden, wer schreit, um etwaige Knicke zu beseitigen.

  • Objekte, die sie mit dieser Rolle besitzen, gehören nicht DBO. Daher müssen Sie sich möglicherweise mit Problemen beim Ändern des Eigentums befassen, wenn auf dieser Ebene jemals ein Problem auftritt. Ich bin nicht zu 100% sicher, dass dies ein Problem sein würde, aber es ist erwähnenswert, nur für den Fall.

    Quelle: Eigentümerketten

  • Mit dieser Rolle (kann je nach Version von SQL Server variieren) können sie möglicherweise SQL-Sicherheitsprinzipien, die in der aktuellen Datenbank definiert sind, zu Objekten hinzufügen, die sie noch besitzen, nur nicht zu allen Objekten (die sie nicht besitzen), oder einen neuen Server hinzufügen -level definierter Principal auf der DB-Ebene.


Darüber hinaus kann das Fehlen von DBO-Rollenberechtigungen bedeuten. . .

Hinweis: Da es in den Jahren 2005 bis 2014 so viele verschiedene Versionen von SQL Server gibt, kann es am besten sein, wenn eine kleine Gruppe von Benutzern dies zunächst testet, um herauszufinden, wer schreit, um etwaige Knicke zu beseitigen.

  • Das Fehlen der DBO-Rolle kann dazu führen, dass bestimmte SSMS-Designer-GUI-Schnittstellen (SQL Server-Version variiert) nicht fehlerfrei ausgefüllt oder geöffnet werden (z. B. beim Ändern von Tabellen oder Spalten über die GUI) , obwohl dies über T-SQL funktioniert und die Berechtigungen vorhanden sind . In einigen Versionen von SQL Server kann dies behoben werden, indem zugelassen wird, GRANT VIEW DEFINITIONwo dies ein Problem ist, und es kann auch nur eine Warnung nur für bestimmte Versionen von SQL Server sein.

    Ressourcen

    • Sie sind nicht als Datenbankeigentümer oder als Benutzer angemeldet, der Mitglied der Rolle "db_owner" ist. Sie können keine Änderungen an Tabellen speichern, die Sie nicht besitzen.

    • db_ddladmin Die Rolle erlaubt keine Verwendung von "Design" -Funktionen in SSMS

      "Wir versuchen zu verhindern, dass Benutzer / Entwickler in ihren QS-Datenbanken so viel Dbo wie möglich erhalten. Eines der Probleme dabei ist, dass sie weiterhin Datenbankobjekte wie Benutzertabellen erstellen und ändern können müssen. Viele Entwickler sind neu in diesem Bereich MS SQL und bleiben daher in der Regel bei der GUI (SSMS) für diese Art von Arbeit. Das Problem entsteht, wenn wir ihnen db_ddladmin (nicht dbo) gewähren und sie nicht mehr in der Lage sind, Tabellen oder Spalten über die Table Designer-GUI zu ändern. Sie müssen sich zusätzliche Zeit nehmen, um sich mit den TSQL-Befehlen und ihrer Syntax (die sie möglicherweise nie wieder benötigen) vertraut zu machen, oder das DBA-Team einbeziehen, was Zeit für unsere anderen Aktivitäten kostet.

      Ich weiß nicht, ob dies ein Fehler oder eine Funktionsanforderung ist, aber ich halte es für einen Fehler, da der Benutzer über ausreichende Berechtigungen verfügt, um die Tabelle über TSQL zu ändern.

      " Sie sind nicht als Datenbankeigentümer oder Systemadministrator angemeldet. Sie können möglicherweise keine Änderungen an Tabellen speichern, deren Eigentümer Sie nicht sind." UND "Tabelle [schema].[table]ist schreibgeschützt, Benutzer hat nicht genügend Rechte für diese Tabelle. "

      Eine Ablaufverfolgung scheint darauf hinzudeuten, dass es sich bei der Prüfung um ein is_member ('db_owner') handelt, wodurch Mitglieder von db_ddladmin ausgeschlossen werden, obwohl sie tatsächlich über Berechtigungen zum Ändern des Objekts verfügen. Microsoft SQL Server Management Studio "


      Gepostet von Agent DBA am 25.01.2010, 07:06 Uhr

      Ich hatte ein ähnliches Problem und konnte es mit dem folgenden Stipendium lösen

      GRANT view definition on schema:: <schemaname> to <username>

Andere Überlegungen

Da Sie angeben, dass dies von Fall zu Fall überprüft wird

Eine der derzeit eingeschränkten Berechtigungen ist die Berechtigung db_owner.

Diese Berechtigung wird von Fall zu Fall überprüft. Eine häufige Änderung besteht jedoch darin, die Berechtigungen für db_owner durch die folgenden zu ersetzen:

  • db_datareader
  • db_datawriter
  • db_ddladmin
  • db_executor

Haben Sie darüber nachgedacht, zusätzliche benutzerdefinierte Rollen für mehr "All Object" -Zugriff auf DB-Ebene zu erstellen, die jede Person benötigt, anstatt ihnen die db_ddladminRolle zuzuweisen, da sie dadurch wahrscheinlich auch mehr als die tatsächlichen Objekte auf DB-Ebene benötigen.

Normalerweise gebe ich genau das, was benötigt wird, und nichts weiter, damit sie ihre Arbeit erledigen können. Wenn ein "normaler" oder "standardmäßiger" Zugriff auf alle Objekte in einer DB auf DB-Ebene erforderlich ist, erstelle ich eine benutzerdefinierte DB-Rollenart wie die db_executoraber siehe mein Beispiel unten. Auf diese Weise können Sie ALLEN DB-Objekten in einer bestimmten DB genau das gewähren, was sie wirklich benötigen, wenn Sie aus Sicherheitsgründen keine explizite Objektebene in Ihren DBs erhalten.

----Custom Database Roles

/* CREATE A NEW ROLE  -- Execute to all stored procs including newly created ones*/
-- Database specific
CREATE ROLE db_All_StoredProc_Execute
GRANT EXECUTE TO db_All_StoredProc_Execute

/* CREATE A NEW ROLE  -- Alter to all stored procs including newly created ones*/
-- Database specific
CREATE ROLE db_All_StoredProc_Alter
GRANT ALTER ANY SCHEMA TO db_All_StoredProc_Alter

/* CREATE A NEW ROLE  -- View Definition to all stored procs including newly created ones*/
-- Database specific
CREATE ROLE db_All_StoredProc_View
GRANT VIEW DEFINITION TO db_All_StoredProc_View

/* CREATE A NEW ROLE - Any schema alter and create procedure permissions */
-- Database specific
CREATE ROLE db_All_CreateProc_AlterSchema
GRANT ALTER ANY SCHEMA TO db_All_CreateProc_AlterSchema
GRANT CREATE PROCEDURE TO db_All_CreateProc_AlterSchema
GO

/* CREATE A NEW ROLE - Any schema alter and create table permissions */
-- Database specific
CREATE ROLE db_All_CreateTable_AlterSchema
GRANT ALTER ANY SCHEMA TO db_All_CreateTable_AlterSchema
GRANT CREATE TABLE TO db_All_CreateTable_AlterSchema

/* CREATE A NEW ROLE - Any schema alter and create function permissions */
-- Database specific
CREATE ROLE db_All_CreateFunction_AlterSchema
GRANT ALTER ANY SCHEMA TO db_All_CreateFunction_AlterSchema
GRANT CREATE FUNCTION TO db_All_CreateFunction_AlterSchema

/* CREATE A NEW ROLE - Any schema alter and create aggregate permissions */
-- Database specific
CREATE ROLE db_All_CreateAggregate_AlterSchema
GRANT ALTER ANY SCHEMA TO db_All_CreateAggregate_AlterSchema
GRANT CREATE AGGREGATE TO db_All_CreateAggregate_AlterSchema

/* CREATE A NEW ROLE - Any schema alter and create view permissions */
-- Database specific
CREATE ROLE db_All_CreateView_AlterSchema
GRANT ALTER ANY SCHEMA TO db_All_CreateView_AlterSchema
GRANT CREATE VIEW TO db_All_CreateView_AlterSchema

/* CREATE A NEW ROLE - Any schema alter and create schema permissions */
-- Database specific
CREATE ROLE db_All_CreateSchema_AlterSchema
GRANT ALTER ANY SCHEMA TO db_All_CreateSchema_AlterSchema
GRANT CREATE SCHEMA TO db_All_CreateSchema_AlterSchema

Ich wollte auch eine db_DDLAdmin_Restriction-Rolle freigeben, die Sie möglicherweise in Betracht ziehen möchten, um das Erstellen anderer Objekte mit expliziter DENYEinschränkung db_ddladminder Zugriffsberechtigung zu erwägen, sodass Sie diese zumindest in den DBs erstellen können, in denen Sie ihnen diese Rolle gewähren, und die explizite Berechtigung DENYfür die tatsächlichen Objekttypen festlegen usw. Sie möchten nicht, dass sie Zugriff auf haben.

Zum Beispiel, wenn Sie wissen , dass sie auf jeden Fall der Erstellung von gespeicherten Prozeduren und Funktionen, können Sie ausschließen DENY CREATE FUNCTION, DENY CREATE PROCEDURE, DENY ALTER ANY SCHEMA.

---Create ddladmin restriction custom DB role
DENY ALTER ANY ASSEMBLY                    TO db_DDLAdmin_Restriction
DENY ALTER ANY ASYMMETRIC KEY              TO db_DDLAdmin_Restriction
DENY ALTER ANY CERTIFICATE                 TO db_DDLAdmin_Restriction
DENY ALTER ANY CONTRACT                    TO db_DDLAdmin_Restriction
DENY ALTER ANY DATABASE DDL TRIGGER        TO db_DDLAdmin_Restriction
DENY ALTER ANY DATABASE EVENT NOTIFICATION TO db_DDLAdmin_Restriction
DENY ALTER ANY DATASPACE                   TO db_DDLAdmin_Restriction
DENY ALTER ANY FULLTEXT CATALOG            TO db_DDLAdmin_Restriction
DENY ALTER ANY MESSAGE TYPE                TO db_DDLAdmin_Restriction
DENY ALTER ANY REMOTE SERVICE BINDING      TO db_DDLAdmin_Restriction
DENY ALTER ANY ROUTE                       TO db_DDLAdmin_Restriction
DENY ALTER ANY SCHEMA                      TO db_DDLAdmin_Restriction
DENY ALTER ANY SERVICE                     TO db_DDLAdmin_Restriction
DENY ALTER ANY SYMMETRIC KEY               TO db_DDLAdmin_Restriction
DENY CHECKPOINT                            TO db_DDLAdmin_Restriction
DENY CREATE AGGREGATE                      TO db_DDLAdmin_Restriction
DENY CREATE DEFAULT                        TO db_DDLAdmin_Restriction
DENY CREATE FUNCTION                       TO db_DDLAdmin_Restriction
DENY CREATE PROCEDURE                      TO db_DDLAdmin_Restriction
DENY CREATE QUEUE                          TO db_DDLAdmin_Restriction
DENY CREATE RULE                           TO db_DDLAdmin_Restriction
DENY CREATE SYNONYM                        TO db_DDLAdmin_Restriction
DENY CREATE TABLE                          TO db_DDLAdmin_Restriction
DENY CREATE TYPE                           TO db_DDLAdmin_Restriction
DENY CREATE VIEW                           TO db_DDLAdmin_Restriction
DENY CREATE XML SCHEMA COLLECTION          TO db_DDLAdmin_Restriction
DENY REFERENCES                            TO db_DDLAdmin_Restriction
GO

8

Unter Verwendung eines SQL-Skripts zum Auflisten aller Berechtigungen habe ich Benutzer für jeden Fall erstellt.

EXECUTE AS USER = 'test_user'
SELECT 
    permission_name 
FROM fn_my_permissions(null, 'DATABASE')
ORDER BY subentity_name, permission_name
REVERT;

Ich verglich dann die Ergebnisse und kam zu der folgenden Liste mit der Dokumentation von hauptsächlich msdn (alle Anführungszeichen, auf die nicht speziell verwiesen wird, stammen aus dem msdn-Link).
Im Folgenden finden Sie einige der Dokumente, die ich verwendet habe, um die Personen, die DBO-Berechtigungen verlieren würden, darüber zu informieren, was genau sie verloren haben.

ÄNDERN

Vermittelt die Möglichkeit, die Eigenschaften eines bestimmten zu sichernden Objekts mit Ausnahme des Eigentums zu ändern. Wenn ALTER für einen Bereich gewährt wird, können mit ALTER auch alle in diesem Bereich enthaltenen Sicherheitselemente geändert, erstellt oder gelöscht werden. Die ALTER-Berechtigung für ein Schema umfasst beispielsweise die Möglichkeit, Objekte aus dem Schema zu erstellen, zu ändern und zu löschen.

ALTER ANY Anwendungsrolle
ALTER ANY AUDIT DATABASE
ALTER ANY ROLLE
ALTER ANY USER

Vermittelt die Möglichkeit, einzelne Instanzen der Datenbank Securable zu ERSTELLEN, ZU ÄNDERN oder ZU TROPFEN. Mit ALTER ANY SCHEMA können Sie beispielsweise ein beliebiges Schema in der Datenbank erstellen, ändern oder löschen.

Anwendungsrollen sind Datenbank-Principals, mit denen eine Anwendung mit eigenen, benutzerähnlichen Berechtigungen ausgeführt werden kann.

Das Überwachen einer Instanz von SQL Server oder einer SQL Server-Datenbank umfasst das Verfolgen und Protokollieren von Ereignissen, die auf dem System auftreten. Das Objekt "Prüfspezifikation auf Datenbankebene" gehört zu einer Prüfung. Sie können eine Datenbankprüfspezifikation pro SQL Server-Datenbank pro Prüfung erstellen.

Datenbankrollen werden verwendet, um die Berechtigungen in Ihren Datenbanken einfach zu verwalten. SQL Server bietet mehrere Rollen, die Sicherheitsprinzipale sind und andere Prinzipien gruppieren. Sie sind wie Gruppen im Microsoft Windows-Betriebssystem. Rollen auf Datenbankebene sind in ihrem Berechtigungsumfang datenbankweit.

AUTHENTICATE
Gefunden in MSDN.

Die Berechtigungen AUTHENTICATE & AUTHENTICATE SERVER werden nur verwendet, wenn EXECUTE AS in datenbankübergreifenden bzw. Serverzugriffsszenarien verwendet wird.

BACKUP DATABASE
BACKUP LOG

CONNECT REPLICATION

Wird für Datenbankreplikationsberechtigungen verwendet .

STEUERUNG

Verleiht dem Berechtigten eigentumsähnliche Funktionen. Der Berechtigte verfügt effektiv über alle definierten Berechtigungen für das Sicherungsobjekt. Ein Principal, dem CONTROL gewährt wurde, kann auch Berechtigungen für das Sicherungsobjekt erteilen.

ROLLE ERSTELLEN

Überträgt dem Berechtigten die Möglichkeit, die Datenbank Securable zu erstellen.

SHOWPLAN

Showplan-Berechtigungen werden für verschiedene Showplan-SET-Anweisungsoptionen verwendet, wenn sie mit Transact-SQL-Batches verwendet werden .

ABONNIEREN SIE ANFRAGEN-MITTEILUNGEN

Dokumentation zu Abfragebenachrichtigungen.

Abfragebenachrichtigungen basieren auf der Service Broker-Infrastruktur und ermöglichen es, Anwendungen zu benachrichtigen, wenn sich Daten geändert haben. Diese Funktion ist besonders nützlich für Anwendungen, die einen Informations-Cache aus einer Datenbank (z. B. einer Webanwendung) bereitstellen und benachrichtigt werden müssen, wenn die Quelldaten geändert werden.

IN BESITZ NEHMEN

Ermöglicht dem Berechtigten, das Eigentum an dem Sicherungsgegenstand zu übernehmen, auf dem er erteilt wurde.

DATENBANKSTAAT ANZEIGEN

Dient zum Anzeigen von dynamischen Verwaltungsansichten und -funktionen (Transact-SQL) .

DEFINITION ANZEIGEN

Dokumentation zu Ansichtsdefinitionsberechtigungen.

Mit der Berechtigung VIEW DEFINITION kann ein Benutzer die Metadaten des zu sichernden Objekts anzeigen, für das die Berechtigung erteilt wurde. Die Berechtigung VIEW DEFINITION gewährt jedoch keinen Zugriff auf das Sicherheitselement selbst. Beispielsweise kann ein Benutzer, dem nur die Berechtigung VIEW DEFINITION für eine Tabelle erteilt wurde, Metadaten in Bezug auf die Tabelle in der sys.objects-Katalogansicht anzeigen. Ohne zusätzliche Berechtigungen wie SELECT oder CONTROL kann der Benutzer jedoch keine Daten aus der Tabelle lesen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.