Я пытаюсь воссоздать сертификат с истекшим сроком действия, который использовался на наших серверах для создания принципов, а затем эти принципы использовались с олицетворением для выполнения хранимых процедур.Невозможно создать хранимые процедуры с помощью EXECUTE AS, используя принципала, основанного на сертификате
Это то, что я делаю (конечно, намного сложнее при производстве, но этот точный тест также терпит неудачу).
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'. Это отлично работает ... затем добавляет подпись к хранимой процедуре и, наконец, изменяет хранимую процедуру для выполнения в качестве моего пользователя сертификата. Такая же ошибка на последнем шаге.
Есть ли настройка/шаг, который мне не хватает?
Привет. Вы смогли заставить это работать? Я опубликовал [ответ] (http://stackoverflow.com/a/41421145/577765) ниже, объясняющий, почему это происходит и как его исправить. –