2012-02-17 31 views

Trả lời

156

SQL Server 2008 và Ảnh trên:

/* CREATE A NEW ROLE */ 
CREATE ROLE db_executor 

/* GRANT EXECUTE TO THE ROLE */ 
GRANT EXECUTE TO db_executor 

Đối với chỉ một người dùng (không phải là một vai trò):

USE [DBName] 
GO 
GRANT EXECUTE TO [user] 
+16

+1 plus: thậm chí nó còn cấp quyền EXECUTE cho các thủ tục được lưu trữ trong tương lai, ví dụ: những cái chưa có trong cơ sở dữ liệu của bạn - nhưng sẽ được tạo sau này. –

+1

Tôi nghĩ đáng lưu ý rằng 'người dùng' của bạn có thể phải nằm trong dấu ngoặc vuông. Điều này đúng trong trường hợp sử dụng của tôi ít nhất một phần vì người dùng của tôi có một miền được đính kèm (ví dụ: nó có một \ ký tự trong đó). chỉnh sửa: cố định dấu gạch chéo không có ký tự – PrinceTyke

+1

Tại sao không gán cho người dùng vai trò db_ddladmin? "Các thành viên của vai trò cơ sở dữ liệu cố định db_ddladmin có thể chạy bất kỳ lệnh Ngôn ngữ Định nghĩa Dữ liệu (DDL) nào trong cơ sở dữ liệu." - xem [ở đây] (https://docs.microsoft.com/en-us/sql/relational-databases/security/authentication-access/database-level-roles) –

60

SQL Server 2005 giới thiệu khả năng grant database execute permissions đến một nguyên tắc cơ sở dữ liệu, như bạn đã mô tả:

GRANT EXECUTE TO [MyDomain\MyUser] 

Điều đó sẽ cấp quyền tại phạm vi cơ sở dữ liệu, bao gồm tất cả các thủ tục được lưu trữ trong tất cả các lược đồ. Điều này có nghĩa rằng bạn không phải cấp quyền rõ ràng cho mỗi thủ tục được lưu trữ.

Bạn cũng có thể hạn chế bằng cách granting schema execute permissions nếu bạn muốn trở thành chi tiết hơn:

GRANT EXECUTE ON SCHEMA ::dbo TO [MyDomain\MyUser] 
+4

Tuyệt vời để có thể làm điều này với một lược đồ cụ thể , để tránh các quyền trên sys – RemarkLima

8

Ngoài các câu trả lời ở trên, tôi muốn thêm:

Bạn có thể muốn cấp này để thay vào đó, hãy nhập vai trò và sau đó gán vai trò cho (các) người dùng.

CREATE ROLE [myAppRights] 
GRANT EXECUTE TO [myAppRights] 

làm điều đó.

Nếu bạn muốn làm điều đó trên mức schema:

GRANT EXECUTE ON SCHEMA ::dbo TO [myAppRights] 

cũng làm việc (trong ví dụ này, vai trò myAppRights sẽ phải thực thi quyền trên tất cả các yếu tố của schema dbo sau đó). Bằng cách này, bạn chỉ phải làm điều đó một lần và có thể gán/thu hồi tất cả các quyền ứng dụng liên quan dễ dàng đến/từ một người dùng nếu bạn cần thay đổi sau này - đặc biệt hữu ích nếu bạn muốn tạo các hồ sơ truy cập phức tạp hơn.

Các vấn đề liên quan