【问题标题】:DM_EXEC_SESSIONS not returning active connectionsDM_EXEC_SESSIONS 未返回活动连接
【发布时间】:2015-12-22 07:32:08
【问题描述】:

我正在使用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权限,但是函数返回一个空的结果集,为什么?

有没有办法为基本用户获取所有连接?

【问题讨论】:

    标签: sql-server session execute-as


    【解决方案1】:

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

    或者,您可以完成创建基于证书的登录并使用模块签名的练习。

    【讨论】:

    • 我尝试设置trustworthy=true,但没有帮助。模块签名似乎是一个复杂的过程。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-23
    • 2016-02-03
    • 1970-01-01
    • 1970-01-01
    • 2022-06-09
    • 1970-01-01
    相关资源
    最近更新 更多