私たちのサーバーで使用されていた有効期限の切れた証明書を再作成しようとしています。証明書ベースのプリンシパルを使用して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
本当にマスターのデータベースが必要かどうかはわかりません。これは、その後、ストアドプロシージャの作成まで、すべて成功している:
メッセージ15517、レベル16、状態1、プロシージャReports_DC_Project_sp、校長「TestReportUser」は存在しないため、データベースプリンシパルとして実行できませんライン47
、このタイプのプリンシパルを偽装することはできません。または、あなたはパーミッションを持っていません。
また、EXECUTE AS 'dbo'を使用してストアドプロシージャを作成しようとしました。それは正常に動作します...その後、署名をストアドプロシージャに追加し、最後にストアドプロシージャを変更してcertユーザとして実行します。最後のステップで同じエラーが発生しました。
設定/手順がありますか?私は当社のサーバー上で使用されていた再作成期限切れの証明書にしようとしています
こんにちは。これを動作させることができましたか?私は、なぜこれが起こっているのか、それを修正する方法を説明する[回答](http://stackoverflow.com/a/41421145/577765)を投稿しました。 –