如何找到扩展事件的用户?

How Do I find the user for an extended event?

对于 MSSQL 服务器上的“简单”请求,我得到一个充满 Xml 的列:

SELECT CONVERT(XML, event_data) As event_data_xml 
    FROM sys.fn_xe_file_target_read_file('Test*.xel', NULL, NULL, NULL)

结果:

其中一个详细信息:

<event name="login" package="sqlserver" timestamp="2020-07-17T10:09:20.922Z">
  <data name="is_cached">
    <value>true</value>
  </data>
  <data name="is_recovered">
    <value>false</value>
  </data>
  <data name="is_dac">
    <value>false</value>
  </data>
  <data name="database_id">
    <value>1</value>
  </data>
  <data name="packet_size">
    <value>4096</value>
  </data>
  <data name="options">
    <value>2000002838f4010000000000</value>
  </data>
  <data name="options_text">
    <value />
  </data>
  <data name="database_name">
    <value />
  </data>
  <action name="attach_activity_id" package="package0">
    <value>093CAB81-B0B7-46CF-A807-F32D0469235A-2</value>
  </action>
</event>

在这些细节中我没有得到任何提示,哪个用户调用了这个事件。所以:

如何通过 SQL 代码找出用户调用此事件?

感谢帮助!

设置扩展事件时,您应该展开事件(通过单击它)并在全局字段选项卡中检查 nt_username and/or username 和任何其他字段这可能很有趣。 (即:client_hostname、client_app_name)

您应该根据您的屏幕截图、登录和注销对您案例中的所有选定事件执行此操作。

在 T-SQL:

-- Drop the existing Login event
ALTER EVENT SESSION [Test_Event] ON SERVER 
DROP EVENT sqlserver.login

-- Drop the existing logout event
ALTER EVENT SESSION [Test_Event] ON SERVER 
DROP EVENT sqlserver.logout

-- Add a new login event with properties : nt_username and username
ALTER EVENT SESSION [Test_Event] ON SERVER 
ADD EVENT sqlserver.login(
    ACTION(sqlserver.nt_username,sqlserver.username))

-- Add a new logout event with properties : nt_username and username
ALTER EVENT SESSION [Test_Event] ON SERVER 
ADD EVENT sqlserver.logout(
    ACTION(sqlserver.nt_username,sqlserver.username))

新事件将包含所选字段:

<event name="login" package="sqlserver" timestamp="2020-07-27T05:59:26.931Z">
  <data name="is_cached">
    <value>true</value>
  </data>
  <data name="is_recovered">
    <value>false</value>
  </data>
  <data name="is_dac">
    <value>false</value>
  </data>
  <data name="database_id">
    <value>1</value>
  </data>
  <data name="packet_size">
    <value>8000</value>
  </data>
  <data name="options">
    <value>2000002838f4010000000000</value>
  </data>
  <data name="options_text">
    <value />
  </data>
  <data name="database_name">
    <value />
  </data>
  <!--Newly selected global fields-->
  <action name="username" package="sqlserver">
    <value>Domain\Username</value>
  </action>
  <action name="nt_username" package="sqlserver">
    <value>Domain\Username</value>
  </action>
</event>