GRANT-Berechtigungen für alle Tabellen, Ansichten und Prozeduren in SQL Server 2000

8

Ich habe mich gefragt, ob es eine ziemlich effiziente Möglichkeit gibt, T-SQL mit SQL Server 2000-Syntax zu verwenden, um SELECT, INSERT, UPDATE, DELETE für alle TABELLEN und ANSICHTEN für eine bestimmte Datenbank zu gewähren, wobei 2 oder 3 der über 100 Objekte ausgeschlossen werden. Ich möchte auch EXEC-Berechtigungen für alle gespeicherten Prozeduren gewähren können.

Derzeit verwende ich den folgenden Code, um sie einzeln zu ändern. Dies für ungefähr 100 Tabellen und 100 Ansichten zu tun, dauert viel zu lange und wird über die GUI noch länger dauern (es sei denn, ich mache das auch falsch).

use [DATABASE_NAME]
GO
GRANT DELETE ON [dbo].[table_name]TO [user_name]
GO
use [DATABASE_NAME]
GO
GRANT INSERT ON [dbo].[table_name]TO [user_name]
GO
use [DATABASE_NAME]
GO
GRANT SELECT ON [dbo].[table_name]TO [user_name]
GO
use [DATABASE_NAME]
GO
GRANT UPDATE ON [dbo].[table_name]TO [user_name]
GO

Wie kann ich mit T-SQL ALLE Benutzertabellen und -ansichten durchlaufen, um bestimmte Berechtigungen zu erteilen und dabei einige Objekte auszuschließen?

Geoff Dawdy
quelle

Antworten:

8

Ugh, 2000.

Angenommen, alle Objekte gehören Eigentum von dbo, können Sie ein Skript generieren, z.

SELECT N'GRANT INSERT, UPDATE, DELETE, SELECT ON dbo.' + QUOTENAME(name)
  + N' TO [user];'
FROM sysobjects WHERE type IN (N'U', N'V');

SELECT N'GRANT EXECUTE ON dbo.' + QUOTENAME(name)
  + N' TO [user];'
FROM sysobjects WHERE type = N'P';

Jetzt können Sie die Ausgabe kopieren und einfügen, falls Sie Einträge ausschließen oder validieren möchten. Wenn Sie nur blind ausführen möchten, können Sie dies stattdessen tun, dies hängt jedoch davon ab, dass der Inhalt jedes einzelnen Befehlssatzes <4K ist:

DECLARE @sql NVARCHAR(4000) = N'';

SELECT @sql = @sql + N'GRANT INSERT, UPDATE, DELETE, SELECT ON dbo.' + QUOTENAME(name)
  + N' TO [user];'
FROM sysobjects WHERE type = N'U';

EXEC sp_executesql @sql;

SET @sql = N'';

SELECT @sql = @sql + N'GRANT INSERT, UPDATE, DELETE, SELECT ON dbo.' + QUOTENAME(name)
  + N' TO [user];'
FROM sysobjects WHERE type = N'V';

EXEC sp_executesql @sql;

SET @sql = N'';

SELECT @sql = @sql + N'GRANT EXECUTE ON dbo.' + QUOTENAME(name)
  + N' TO [user];'
FROM sysobjects WHERE type = N'P';

EXEC sp_executesql @sql;
Aaron Bertrand
quelle