DM_EXEC_SESSIONS未返回活动连接

时间:2015-12-22 07:32:09

标签: sql-server session execute-as

我正在使用SYS.DM_EXEC_SESSIONS从我的系统获取所有活动的SQL Server连接。我知道如果记录的用户没有VIEW SERVER STATE权限,则只显示已记录的用户,否则显示所有用户。

但我不想给所有基本用户提供VIEW SERVER STATE权限(为安全起见),但我需要获得所有用户。所以我做了以下函数WITH EXECUTE作为选项:

ALTER FUNCTION dbo.allusers(@DUMMY CHAR(5))
RETURNS  @rtnTable TABLE
(
LOGINAIKA datetime,
TYOASEMA nchar(128),
LOGINNIMI varchar(50),
OHJELMA varchar(50), 
WKAYTTAJA nchar(128)
)
WITH EXECUTE AS 'poweruser'

as
BEGIN
--print USER_NAME()
INSERT @rtnTable

SELECT LOGIN_TIME AS LOGINAIKA,CAST(host_name AS nchar(128)) AS TYOASEMA,
LOGIN_NAME AS LOGINNIMI, PROGRAM_NAME AS OHJELMA,
NT_DOMAIN+'\'+CAST(nt_user_name AS nchar(128)) AS WKAYTTAJA FROM   SYS.DM_EXEC_SESSIONS
WHERE PROGRAM_NAME LIKE 'J%'
and DB_NAME(database_id)=DB_NAME()
order by PROGRAM_NAME, LOGIN_NAME 
RETURN
END

poweruser具有VIEW SERVER STATE权限,但该函数返回空结果集,为什么?

有没有办法让基本用户获得所有连接?

1 个答案:

答案 0 :(得分:0)

通过设置创建函数的数据库的可信属性,我能够使其工作。注意:我不建议将其作为最佳实践,因为它会打开一个相当大的安全漏洞。

或者,您可以继续创建基于证书的登录并使用模块签名。