【发布时间】:2017-04-02 19:24:50
【问题描述】:
我正在尝试重新创建一个过期的证书,该证书在我们的服务器上用于创建原则,然后这些原则与模拟一起用于执行存储过程。
这就是我正在做的事情(当然在生产上要复杂得多,但这个确切的测试也失败了)。
Use ReportingDb
GO
CREATE CERTIFICATE MyCertTest ENCRYPTION BY PASSWORD = 'acrazygoodpassword'
WITH SUBJECT = 'Stored procedure signing for Reports'
,EXPIRY_DATE = '11/18/2019';
GO
BACKUP CERTIFICATE MyCertTest TO FILE = 'D:\MyCertTest.CER';
GO
CREATE USER TestReportUser
FROM CERTIFICATE MyCertTest;
GO
EXEC sp_addrolemember 'db_datareader','TestReportUser';
GRANT AUTHENTICATE
TO TestReportUser;
GO
GRANT EXECUTE
TO TestReportUser;
GO
USE Master;
GO
CREATE CERTIFICATE MyCertTest
FROM FILE = 'D:\MyCertTest.CER';
GO
CREATE USER TestReportUser
FROM CERTIFICATE MyCertTest;
GO
EXEC sp_addrolemember 'db_datareader','TestReportUser';
GRANT AUTHENTICATE
TO TestReportUser;
GRANT EXECUTE
TO TestReportUser;
GO
use ReportingDb
GO
CREATE PROCEDURE dbo.Reports_DC_Project_sp
WITH EXECUTE AS 'TestReportUser'
AS
SELECT 1
GO
不确定我是否真的需要主数据库。这一切都成功了,直到创建存储过程,然后:
消息 15517,级别 16,状态 1,程序 Reports_DC_Project_sp,第 47 行
无法作为数据库主体执行,因为主体“TestReportUser”不存在,无法模拟此类主体,或者您没有权限。
我还尝试使用 EXECUTE AS 'dbo' 创建存储过程。效果很好......然后将签名添加到存储过程中,最后更改存储过程以作为我的证书用户执行。上一步同样的错误。
是否有我遗漏的设置/步骤?
【问题讨论】:
-
您好。你能让这个工作吗?我在下面发布了answer,解释了为什么会发生这种情况以及如何解决它。
标签: sql sql-server sql-server-2012 impersonation digital-certificate