J'essaie de recréer un certificat expiré qui était utilisé sur nos serveurs pour créer des principes, puis ces principes étaient utilisés avec l'usurpation d'identité pour exécuter des procédures stockées.
Voici ce que je fais (bien sûr, c'est beaucoup plus complexe en production, mais ce test exact échoue également).
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
Je ne sais pas si j'ai vraiment besoin de la pièce maîtresse. Tout se passe bien jusqu'à la création de la procédure stockée :
Msg 15517, Level 16, State 1, Procedure Reports_DC_Project_sp, Line 47
Impossible d'exécuter en tant que principal de la base de données car le principal "TestReportUser" n'existe pas, ce type de principal ne peut pas être personnalisé ou vous n'avez pas l'autorisation.
J'ai également essayé de créer la procédure stockée avec EXECUTE AS 'dbo'. Cela fonctionne bien... puis j'ai ajouté la signature à la procédure stockée et enfin j'ai modifié la procédure stockée pour qu'elle soit exécutée en tant qu'utilisateur de mon certificat. Même erreur à la dernière étape.
Y a-t-il un paramètre/une étape que j'ai manqué(e) ?