Izin GRANT ke semua tabel, tampilan, prosedur di SQL Server 2000

8

Saya bertanya-tanya apakah ada cara yang cukup efisien untuk menggunakan T-SQL dengan sintaks SQL Server 2000 untuk GRANT SELECT, INSERT, UPDATE, DELETE, pada semua TABLES dan VIEWS untuk database tertentu sambil mengecualikan 2 atau 3 dari lebih dari 100 objek. Saya juga ingin dapat memberikan hak istimewa EXEC pada semua Prosedur yang Disimpan.

Saat ini saya menggunakan kode di bawah ini untuk mengubahnya satu per satu. Melakukan ini untuk sekitar 100 tabel dan 100 tampilan terlalu lama dan akan memakan waktu lebih lama melalui GUI (Kecuali jika saya melakukan itu juga salah).

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

Bagaimana saya bisa menggunakan T-SQL untuk menggilir SEMUA Tabel dan Tampilan Pengguna untuk memberikan hak tertentu sambil mengecualikan beberapa objek?

Geoff Dawdy
sumber

Jawaban:

8

Ugh, 2000.

Dengan asumsi semua objek dimiliki oleh dbo, Anda dapat membuat skrip, misalnya:

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';

Sekarang Anda dapat menyalin dan menempelkan output jika Anda ingin mengecualikan entri atau memvalidasi. Jika Anda hanya ingin mengeksekusi secara membabi buta, Anda bisa melakukan ini, tetapi itu bergantung pada konten dari setiap set perintah yang sedang <4K:

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
sumber