我正在使用SYS.DM_EXEC_SESSIONS
从我的系统获取所有活动的 SQL Server 连接。我知道如果登录的用户没有 VIEW SERVER STATE 权限,则只显示登录的用户,否则显示所有用户。
但我不想给所有基本用户 VIEW SERVER STATE 权限(为了安全),但我需要让所有用户。因此,我使用 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 权限,但是函数返回一个空的结果集,为什么?
有没有办法为基本用户获取所有连接?