1

是否可以定义当前用户?

我找到了一个存储过程“sp_mgGetConnectedUsers”。它返回一个具有唯一唯一字段“地址”的结果集。我怎么能将执行查询与这样的“地址”相关联。

请指教。

注意:据我了解,获取当前用户的另一种方法是为每个连接设置一个唯一的应用程序 Id,但我不太喜欢这种方式。

4

2 回答 2

3

如果使用数据字典,您可以使用用户标量函数:

select user() from system.iota;

并将其与从 sp_mgGetConnectedUsers 返回的 DictionaryUser 字段相关联。

如果不使用字典,最简单的方法是使用 sp_SetApplicationID 和 sp_GetApplicationID。你为什么不喜欢这样?如果我们知道您的最终目标是什么,可能会更容易为您提供帮助。如果您只想查看与查询关联的用户,请执行 sp_GetSQLStatements 过程。

于 2010-05-10T20:52:10.190 回答
2

有多种方式可以考虑当前用户。这取决于您如何使用 Advantage。

sp_mgGetConnectedUsers 输出提供以下内容:
UserName - 计算机名称
Dictionary User - 用于登录 ADS 字典的用户
Address - IP、IPX 或 IPC 地址
OSUserLoginName - 客户端操作系统登录名
TS Address - 客户端地址的最终用户的 IP 地址
ApplicationID - 唯一可设置的 ID 默认=exe 名称

如果您使用字典并且每个人都使用唯一名称连接字典,那么字典用户将是可行的方法(您也可以通过“从 system.iota 中选择用户()”(或用于 sql 脚本等)来获取此信息)。地址和用户名将是用户的 IP 地址和用户的计算机名。这也应该有助于您唯一地识别用户。如果您的用户是通过终端服务器进入的,您可以结合使用 TS 地址和 OSUserLoginName 来识别他们。由于您明确表示您不关心此解决方案,因此我不会详细介绍 ApplicationID。但是...虽然您可以将其设置为任何您想要的默认值是应用程序的名称(即 ARC.exe)

您问题的 B 部分是如何关联查询。sp_getsqlstatements 过程将返回当前活动的查询(或者您可以使用 ARC 中的远程服务器信息)。这将返回与 sp_mgGetConnectedUsers 中的 UserName 相同的连接名称。使用组合,您可以知道计算机名称、IP 地址(或终端地址)、字典用户名、客户端操作系统登录名和应用程序名称。

于 2010-05-10T20:48:39.977 回答