程序 - '执行'

时间:2014-11-15 22:15:39

标签: sql-server tsql stored-procedures

我创建了以下proc

ALTER PROCEDURE secret 
WITH EXECUTE AS ... 
AS
begin
end

我想找出(通过查询)数据库引擎用来验证此对象权限的用户帐户?

2 个答案:

答案 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团队中的某个人运行,则完全准确。这很可能。