Theo hiểu biết của tôi, tôi có thể sử dụng EXECUTE AS OWNER
mệnh đề như một phần của thủ tục mà tôi tạo để làm cho phần thân của thủ tục đó chạy như một người dùng khác. Mục tiêu của tôi là thực thi một lệnh yêu cầu sysadmin
vai trò ( DBCC TRACEON(1224)
). Thủ tục này được cho là được gọi bởi một người dùng không có đặc quyền.
Tôi đã chạy đoạn script sau dưới sa
người dùng:
SELECT USER_NAME(), USER_ID(), IsSysAdmin = IS_SRVROLEMEMBER('sysadmin')
-- dbo 1 1
IF EXISTS(SELECT * FROM sys.procedures WHERE name = 'MyProc')
DROP PROCEDURE MyProc
GO
CREATE PROCEDURE MyProc
WITH EXECUTE AS OWNER
AS
SELECT USER_NAME(), USER_ID(), IsSysAdmin = IS_SRVROLEMEMBER('sysadmin');
-- dbo 1 0
DBCC TRACEON(1224)
--Msg 2571, Level 14, State 3, Procedure MyProc, Line 7
--User 'dbo' does not have permission to run DBCC TRACEON.
RETURN
GO
EXEC MyProc
Đầu ra là nội tuyến trong ý kiến. Hóa ra bên ngoài thủ tục tôi dường như có sysadmin
tư cách thành viên, nhưng không phải bên trong thủ tục.
Thủ tục thuộc sở hữu của dbo
người dùng. Tôi hiểu rằng không thể cấp sysadmin
vai trò cho người dùng cơ sở dữ liệu (ít nhất GUI không cung cấp khả năng này). Vì vậy, tôi không thấy làm thế nào tôi có thể làm cho người dùng cơ sở dữ liệu có vai trò máy chủ.
Tôi cũng đã thử EXECUTE AS 'sa'
kết quả trong Cannot execute as the user 'sa', because it does not exist or you do not have permission.
. Các tài liệu nói rằng tôi chỉ có thể chỉ định một tên người dùng, không phải là một tên đăng nhập. Vì vậy, tôi hiểu tại sao điều đó không làm việc.
Làm thế nào tôi có thể chạy thủ tục của tôi với sysadmin
vai trò thành viên?