0

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

パワーユーザーには VIEW SERVER STATE 権限がありますが、関数は空の結果セットを返します。なぜですか?

基本ユーザーのすべての接続を取得する方法はありますか?

4

1 に答える 1

0

関数が作成されたデータベースの信頼できるプロパティを設定することで、これを機能させることができました。注意: かなり大きなセキュリティ ホールが開くため、ベスト プラクティスとしてはお勧めしません。

または、証明書ベースのログインを作成し、モジュール署名を使用する演習を行うこともできます。

于 2015-12-22T11:47:13.723 に答える