Quyền GRANT cho tất cả các bảng, dạng xem, thủ tục trong SQL Server 2000


8

Tôi đã tự hỏi liệu có một cách khá hiệu quả để sử dụng cú pháp T-SQL với cú pháp SQL Server 2000 để GRANT SELECT, INSERT, UPDATE, DELETE, trên tất cả BẢNG và XEM cho một cơ sở dữ liệu cụ thể trong khi loại trừ 2 hoặc 3 trong số hơn 100 đối tượng. Tôi cũng muốn có thể cấp các đặc quyền EXEC cho tất cả các Thủ tục được lưu trữ.

Hiện tại tôi đang sử dụng mã dưới đây để thay đổi từng cái một. Làm điều này cho khoảng 100 bảng và 100 lượt xem mất quá nhiều thời gian và sẽ mất nhiều thời gian hơn thông qua GUI (Trừ khi tôi cũng làm sai điều đó).

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

Làm cách nào tôi có thể sử dụng T-SQL để duyệt qua TẤT CẢ các Bảng và Chế độ xem của người dùng để cấp các quyền riêng tư nhất định trong khi loại trừ một vài đối tượng?

Câu trả lời:


8

Ugh, 2000.

Giả sử tất cả các đối tượng được sở hữu bởi dbo, bạn có thể tạo tập lệnh, ví dụ:

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

Bây giờ bạn có thể sao chép và dán đầu ra trong trường hợp bạn muốn loại trừ bất kỳ mục nhập hoặc xác nhận. Nếu bạn chỉ muốn thực thi một cách mù quáng, thay vào đó bạn có thể thực hiện việc này, nhưng nó phụ thuộc vào nội dung của bất kỳ nhóm lệnh riêng lẻ nào <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;
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.