Lệnh sau có hiệu quả cung cấp cho người dùng, "MyUser", quyền thực thi TẤT CẢ các thủ tục được lưu trữ trong cơ sở dữ liệu không?GRANT EXECUTE cho tất cả các thủ tục được lưu trữ
GRANT EXECUTE TO [MyDomain\MyUser]
Lệnh sau có hiệu quả cung cấp cho người dùng, "MyUser", quyền thực thi TẤT CẢ các thủ tục được lưu trữ trong cơ sở dữ liệu không?GRANT EXECUTE cho tất cả các thủ tục được lưu trữ
GRANT EXECUTE TO [MyDomain\MyUser]
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]
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]
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
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.
+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. –
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
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) –