Câu trả lời:
SQL Server 2008 trở lên:
/* CREATE A NEW ROLE */
CREATE ROLE db_executor
/* GRANT EXECUTE TO THE ROLE */
GRANT EXECUTE TO db_executor
Chỉ dành cho người dùng (không phải vai trò):
USE [DBName]
GO
GRANT EXECUTE TO [user]
user
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ó tên miền được đính kèm (nghĩa là nó có ký tự \ trong đó). chỉnh sửa: sửa ký tự gạch chéo không cố định
SQL Server 2005 đã giới thiệu khả năng cấp quyền thực thi cơ sở dữ liệu cho 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 ở 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 là 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 cấp quyền thực thi lược đồ nếu bạn muốn chi tiết hơn:
GRANT EXECUTE ON SCHEMA ::dbo TO [MyDomain\MyUser]
Ngoài các câu trả lời ở trên, tôi muốn thêm:
Thay vào đó, bạn có thể muốn cấp vai trò này và sau đó gán vai trò cho (các) người dùng. Giả sử bạn đã tạo một vai trò myAppRights
thông qua
CREATE ROLE [myAppRights]
sau đó bạn có thể đưa ra quyền thực thi thông qua
GRANT EXECUTE TO [myAppRights]
với vai trò đó.
Hoặc, nếu bạn muốn làm điều đó ở cấp lược đồ:
GRANT EXECUTE ON SCHEMA ::dbo TO [myAppRights]
cũng hoạt động (trong ví dụ này, vai trò myAppRights
sẽ có quyền thực thi trên tất cả các phần tử của lược đồ dbo
sau đó).
Bằng cách này, bạn chỉ phải thực hiện một lần và có thể dễ dàng gán / thu hồi tất cả các quyền ứng dụng liên quan đến / từ người dùng nếu bạn cần thay đổi điều đó sau này - đặc biệt hữu ích nếu bạn muốn tạo hồ sơ truy cập phức tạp hơn.
Ghi chú: Nếu bạn cấp một vai trò cho một lược đồ, điều đó cũng ảnh hưởng đến các yếu tố bạn sẽ tạo sau này - điều này có thể có lợi hay không tùy thuộc vào thiết kế bạn dự định, vì vậy hãy ghi nhớ điều đó.
THỰC HIỆN CẤP ĐẾN [VAI TRÒ]
Điều này chắc chắn sẽ giúp