Benutzer mit den meisten Antworten
Grant alter any table

Frage
-
Hi,
ich möchte gerne einer Datenbank-Rolle Ändern-Rechte auf alle Tabellen der DB zuweisen.
Folgendes habe ich probiert:
use [Database]
GRANT ALTER ANY TABLE to [DB_Role]
Bekomme als Rückgabe "Incorrect syntax near 'Alter'.
Mache ich da was verkehrt?
Grüße
Julian
Antworten
-
Hallo Julian,
ich verstehe die Frage nicht. Wenn Du einer Person ALTER-Berechtigungen erteilen möchtest, dann musst Du ihn lediglich der Datenbankrolle [db_ddladmin] hinzufügen.
Diese Rechte wirken sich auf ALLE Objekte aus.
https://technet.microsoft.com/de-de/library/ms189121.aspx
Eine andere Möglichkeit gibt es nicht!
Wenn Du ein bestimmtes Recht auf alle Objekte in einem Schema erteilen möchtest, dann geht das wie folgt:GRANT SELECT ON SCHEMA::dbo TO PUBLIC;
Um Berechtigungen auf einzelne Objekte zu erteilen, könntest Du mit Hilfe eines Cursors diese Berechtigungen erteilen:
DECLARE @stmt NVARCHAR(128); DECLARE c CURSOR FOR SELECT N'GRANT SELECT ON ' + QUOTENAME(SCHEMA_NAME(schema_id)) + N'.' + QUOTENAME(name) + N' TO User;' FROM sys.tables; OPEN c FETCH NEXT FROM c INTO @stmt; WHILE @@FETCH_STATUS != -1 BEGIN EXEC sp_executesql @stmt; FETCH NEXT FROM c INTO @stmt; END CLOSE c; DEALLOCATE c;
Uwe Ricken (Blog | Twitter)
Microsoft Certiied Master - SQL Server 2008
Microsoft Certified Solution Master - CHARTER Data Platform
Microsoft Certified Solution Expert - Data Platform
db Berater GmbH
Microsoft SQL Server Blog (german only)- Als Antwort markiert Julian79 Donnerstag, 8. Juni 2017 05:56
Alle Antworten
-
Hallo Julian,
AFAICS gibt es dieses Konstrukt in Verbindung mit TABLE bei T-SQL nicht. Die Syntax passt wohl auf Oracle.
Schau dir dazu bitte diesen MSDN Artikel an:
GRANT (Datenbankberechtigungen) (Transact-SQL)
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
Hallo Julian,
um Tabellenstrukturen zu ändern, muss der User entweder der Eigentümer des Objekts (oder der Datenbank) sein oder aber er muss Mitglied der Gruppe [ddl_admin] sein.
ALTER ROLE [db_ddladmin] ADD MEMBER [DatabaseUser];
Uwe Ricken (Blog | Twitter)
Microsoft Certiied Master - SQL Server 2008
Microsoft Certified Solution Master - CHARTER Data Platform
Microsoft Certified Solution Expert - Data Platform
db Berater GmbH
Microsoft SQL Server Blog (german only) -
Hallo Julian,
ich verstehe die Frage nicht. Wenn Du einer Person ALTER-Berechtigungen erteilen möchtest, dann musst Du ihn lediglich der Datenbankrolle [db_ddladmin] hinzufügen.
Diese Rechte wirken sich auf ALLE Objekte aus.
https://technet.microsoft.com/de-de/library/ms189121.aspx
Eine andere Möglichkeit gibt es nicht!
Wenn Du ein bestimmtes Recht auf alle Objekte in einem Schema erteilen möchtest, dann geht das wie folgt:GRANT SELECT ON SCHEMA::dbo TO PUBLIC;
Um Berechtigungen auf einzelne Objekte zu erteilen, könntest Du mit Hilfe eines Cursors diese Berechtigungen erteilen:
DECLARE @stmt NVARCHAR(128); DECLARE c CURSOR FOR SELECT N'GRANT SELECT ON ' + QUOTENAME(SCHEMA_NAME(schema_id)) + N'.' + QUOTENAME(name) + N' TO User;' FROM sys.tables; OPEN c FETCH NEXT FROM c INTO @stmt; WHILE @@FETCH_STATUS != -1 BEGIN EXEC sp_executesql @stmt; FETCH NEXT FROM c INTO @stmt; END CLOSE c; DEALLOCATE c;
Uwe Ricken (Blog | Twitter)
Microsoft Certiied Master - SQL Server 2008
Microsoft Certified Solution Master - CHARTER Data Platform
Microsoft Certified Solution Expert - Data Platform
db Berater GmbH
Microsoft SQL Server Blog (german only)- Als Antwort markiert Julian79 Donnerstag, 8. Juni 2017 05:56
-
...
ich verstehe die Frage nicht. Wenn Du einer Person ALTER-Berechtigungen erteilen möchtest, dann musst Du ihn lediglich der Datenbankrolle [db_ddladmin] hinzufügen.
Diese Rechte wirken sich auf ALLE Objekte aus.
https://technet.microsoft.com/de-de/library/ms189121.aspx
Eine andere Möglichkeit gibt es nicht!
...Autsch..!
Eben weil ddl_admin dann ALLE Objektypen anfassen kann, inklusive erstellen und löschen, ist das keine gute Empfehlung. Von da zum db_owner ist es nicht mehr weit... Sicherheit muss man heute schon etwas genauer nehmen, weswegen ich mir diese Bemerkung erlaube.
Selbst wenn es zum heutigen Zeitpunkt möglicherweise keine Sichten, Prozeduren, Funktionen etc gibt, können diese ja noch kommen – und dann mag man an diese Rollenmitgliedschaft nicht mehr denken.
Neben dem Besitzer der Tabelle und der besagten weitreichenden Datenbankrolle gibt es übrigens doch auch auch ein ALTER-Recht für Tabellen. Leider müsst man dieses jedoch einzeln (z.B. via Cursor) vergeben, ein ALTER "ANY" gibt es ja, wie ihr korrekt herausgefunden habt, nicht.
GRANT ALTER ON [schema].[table] TO [User]
Was noch ginge: Wenn der Benutzer auch neue Tabellen erstellen dürfte, und Tabellen löschen darf, kann man mit einem Recht pro Schema auskommen ("ALTER SCHEMA") plus dem "CREATE TABLE"-Recht auf 1x auf Datenbankebene.
-> Auch da ist er dann weder Besitzer noch ddl_admin.
(Das gesamte Berechtigungskonzept wurde mit SQL Server 2005 deutlich angepasst - seit dem funktioniert das so.)
Andreas Wolter (Blog | Twitter)
MCSM: Data Platform / SQL Server 2012
(Ja, zusätzlich auch "Charter Member", wie alle MCMs ihn tragen dürfen, aber vor allem auch geprüft und deswegen auch MCSM ohne den Zusatz "Charter" der für rein... gar Nichts steht.)
MCM SQL Server 2008
MVP Data Platform
www.SarpedonQualityLab.com | www.andreas-wolter.com- Bearbeitet Andreas.WolterMicrosoft employee Freitag, 16. Juni 2017 22:07