it-swarm.com.de

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

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, während 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 dauert über die GUI noch länger (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, während einige Objekte ausgeschlossen werden?

8
Geoff Dawdy

Ugh, 2000.

Angenommen, alle Objekte gehören 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;
8
Aaron Bertrand