Tôi tạo tập lệnh từ cơ sở dữ liệu cũ, tạo cơ sở dữ liệu mới và nhập tất cả dữ liệu từ cơ sở dữ liệu cũ. Tuy nhiên, cho đến nay vẫn không có người dùng nào thực hiện quyền đối với các thủ tục được lưu trữ. Tôi biết tôi có thể sử dụng
GRANT EXECUTE ON [storedProcName] TO [userName]
Nếu đó chỉ là một vài thủ tục, tuy nhiên, tôi có khoảng 100 cách dễ nhất để tôi cấp quyền truy cập thực thi cho một người dùng cụ thể cho tất cả chúng là gì?
Cảm ơn trước.
Tạo vai trò thêm vai trò này cho người dùng và sau đó bạn có thể cấp quyền thực thi cho tất cả các thường trình trong một lần chụp cho vai trò này.
CREATE ROLE <abc>
GRANT EXECUTE TO <abc>
CHỈNH SỬA
Điều này làm việc trong SQL Server 2005, tôi không chắc chắn về tính tương thích ngược của tính năng này, tôi chắc chắn rằng bất cứ điều gì sau năm 2005 nên được sử dụng tốt.
Đây là một giải pháp có nghĩa là khi bạn thêm các thủ tục được lưu trữ mới vào lược đồ, người dùng có thể thực hiện chúng mà không cần phải gọi cấp quyền thực hiện trên thủ tục được lưu trữ mới:
IF EXISTS (SELECT * FROM sys.database_principals WHERE name = N'asp_net')
DROP USER asp_net
GO
IF EXISTS (SELECT * FROM sys.database_principals
WHERE name = N'db_execproc' AND type = 'R')
DROP ROLE [db_execproc]
GO
--Create a database role....
CREATE ROLE [db_execproc] AUTHORIZATION [dbo]
GO
--...with EXECUTE permission at the schema level...
GRANT EXECUTE ON SCHEMA::dbo TO db_execproc;
GO
--http://www.patrickkeisler.com/2012/10/grant-execute-permission-on-all-stored.html
--Any stored procedures that are created in the dbo schema can be
--executed by users who are members of the db_execproc database role
--...add a user e.g. for the NETWORK SERVICE login that asp.net uses
CREATE USER asp_net
FOR LOGIN [NT AUTHORITY\NETWORK SERVICE]
WITH DEFAULT_SCHEMA=[dbo]
GO
--...and add them to the roles you need
EXEC sp_addrolemember N'db_execproc', 'asp_net';
EXEC sp_addrolemember N'db_datareader', 'asp_net';
EXEC sp_addrolemember N'db_datawriter', 'asp_net';
GO
Tài liệu tham khảo: Cấp quyền thi hành trên tất cả các thủ tục được lưu trữ
sử dụng mã dưới đây, thay đổi tên cơ sở dữ liệu thích hợp và tên người dùng và sau đó lấy đầu ra đó và thực hiện trong SSMS. CHO SQL 2005 TRÊN
USE <database_name>
select 'GRANT EXECUTE ON ['+name+'] TO [userName] '
from sys.objects
where type ='P'
and is_ms_shipped = 0
Nếu không có quá phức tạp vấn đề, để cấp EXECUTE trên cơ sở dữ liệu đã chọn:
USE [DB]
GRANT EXEC TO [User_Name];
USE [DATABASE]
DECLARE @USERNAME VARCHAR(500)
DECLARE @STRSQL NVARCHAR(MAX)
SET @USERNAME='[USERNAME] '
SET @STRSQL=''
select @STRSQL+=CHAR(13)+'GRANT EXECUTE ON ['+ s.name+'].['+obj.name+'] TO'+@USERNAME+';'
from
sys.all_objects as obj
inner join
sys.schemas s ON obj.schema_id = s.schema_id
where obj.type in ('P','V','FK')
AND s.NAME NOT IN ('SYS','INFORMATION_SCHEMA')
EXEC SP_EXECUTESQL @STRSQL