我创建了以下proc
ALTER PROCEDURE secret
WITH EXECUTE AS ...
AS
begin
end
我想找出(通过查询)数据库引擎用来验证此对象权限的用户帐户?
答案 0 :(得分:0)
SELECT user_name();
此处有更多信息:http://msdn.microsoft.com/en-us/library/ms188014.aspx
答案 1 :(得分:-1)
简短的回答是,如果您没有专门捕获该信息,它可能无法使用。而且您通常会使用DDL触发器捕获该信息。如果这是您认为您将继续感兴趣的内容,请立即进行设置,以便下次回答此问题。
您拥有的另一个选项(假设信息尚未下达)是查看默认跟踪。根据{{3}},它捕获的一件事是“审计模式对象GDR事件”,其中“GDR”是“授予/拒绝/撤销”。换句话说,正是您正在寻找的。如果它发生在不久前,你将会失去运气。
但是,您可以检入sys.database_permissions系统视图。做类似的事情:
select user_name(grantor_principal_name)
from sys.database_permissions
where major_id = object_id('yourProcedure')
and grantee_principal_id = user_id('yourUser')
然而,大多数情况下,这将返回'dbo',如果它由例如DBA团队中的某个人运行,则完全准确。这很可能。