2013-09-24 46 views

Trả lời

14

Hãy thử điều gì đó tương tự. Nó tạo ra một vai trò mới và cấp quyền thực thi cho một lược đồ.

CREATE ROLE db_executor 
GRANT EXECUTE ON SCHEMA::schema_name TO db_executor 
exec sp_addrolemember 'db_executor', 'Username' 

Thay thế schema_name bằng lược đồ và 'Username' với người dùng của bạn.

+0

Có thể GRANT phép SCHEMA một đã tồn tại SQL SERVER vai trò như db_datareader? –

+0

@ FatihYarbaşı Nó sẽ là có thể nhưng tôi không chắc chắn về vai trò được xây dựng trong. Tôi khuyên bạn không nên mở rộng các vai trò dựng sẵn, tốt hơn nên tạo một vai trò tùy chỉnh của riêng bạn. – Szymon

1

Để cấp quyền thực thi cho tất cả các thủ tục được lưu trữ trong một lược đồ, truy vấn theo @szymon là đủ.

Truy vấn dưới đây sẽ cấp quyền thực thi cho quy trình cho người dùng đã chọn. Cung cấp cho người dùng đã tồn tại.

GRANT EXECUTE VỀ ĐỐI TƯỢNG :: [schema]. [Procedurename] TO [user] AS [schema]; GO

1

tôi muốn khuyên bạn nên làm những gì Szymon gợi ý vì nó là giải pháp thanh lịch hơn, nhưng nó, bạn muốn tránh tạo ra vai trò bạn có thể thực hiện truy vấn như thế này, sao chép kết quả vào trình soạn thảo truy vấn riêng biệt và thực hiện tất cả cùng một lúc.

này sẽ tạo ra CẤP câu lệnh EXECUTE cho tất cả các thủ tục được lưu trữ mà bạn có trong schema cụ thể

DECLARE @SchemaName varchar(20) 
DECLARE @UserName varchar(20) 

SET @SchemaName = 'dbo' 
SET @UserName = 'user_name' 

select 'GRANT EXECUTE ON OBJECT::' + @SchemaName + '.' + P.name + ' to ' + @UserName 
from sys.procedures P 
inner join sys.schemas S on P.schema_id = S.schema_id 
where S.name = @SchemaName 
+0

Nhưng nếu thủ tục lưu trữ mới sẽ được tạo ra thì sao? Tôi nghĩ rằng bạn cần phải cấp quyền exec cho các thủ tục được lưu trữ mới được tạo ra là tốt? –