Я пытаюсь воссоздать сертификат с истекшим сроком действия, который использовался на наших серверах для создания принципов, а затем эти принципы использовались с олицетворением для выполнения хранимых процедур.
Это то, что я делаю (конечно, намного сложнее в продакшене, но этот точный тест также не проходит).
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
Не уверен, действительно ли мне нужна мастер-часть базы данных. Все это успешно до создания хранимой процедуры, затем:
Msg 15517, уровень 16, состояние 1, процедура Reports_DC_Project_sp, строка 47
Невозможно выполнить в качестве участника базы данных, потому что участник «TestReportUser» не существует, этот тип участника не может быть олицетворен или у вас нет разрешения.
Я также пробовал создать хранимую процедуру с EXECUTE AS 'dbo'. Это отлично работает ... затем добавление подписи к хранимой процедуре и, наконец, изменение хранимой процедуры для выполнения от имени моего пользователя сертификата. Та же ошибка на последнем шаге.
Есть ли параметр / шаг, который мне не хватает?