SQL Server "Выполнить как" / Восстановить шаблон в блоке "Попробуйте / поймать"
Я хочу убедиться, что я использую "лучший" шаблон при использовании "Выполнить как / вернуть" из блока Try/Catch в SQL Server 2012. Кажется, что приведенный ниже код "работает" правильно... Я что-то пропустил или есть какие-либо проблемы безопасности, "лучшие" подходы и т. д.?
Ниже мой код:
CREATE PROCEDURE [dbo].[TryItOut]
WITH EXECUTE as 'NoTable1Access' --does not have access (select) to Table1!
AS
Begin
Declare @execErrorNumber int,
@execErrorMessage nvarchar(2048),
@xactState smallint
Begin Try
Execute as user='HasTable1Access'
select *, 1/0 as [SimulateError] from [T1].[Table1]; -- This will be a Stored Procedure call, but a select statement was easier to demo...
Revert --Revert on 'HasTable1Access'
End Try
Begin Catch;
select @execErrorNumber = ERROR_NUMBER(),
@execErrorMessage = ERROR_MESSAGE(),
@xactState = XACT_STATE();
Revert -- Revert on 'HasTable1Access' when in error...
--Do some error processing in context of 'NoTable1Access'
End Catch
select * from [T1].[Table1] --Should NOT have any access now and select should fail...
End