db_ddladmin vs db_owner
db_ddladmin
Nach 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. . .
db_datareader
ermöglicht den SELECT
Zugriff auf alle Tabellen
db_datarwriter
ermöglicht INSERT
, UPDATE
und den DELETE
Zugriff auf alle Tabellen
db_executor
ermöglicht den EXECUTE
Zugriff 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 DEFINITION
wo 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_ddladmin
Rolle 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_executor
aber 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 DENY
Einschränkung db_ddladmin
der 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 DENY
fü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