如何定义当前用户?

时间:2010-05-10 15:09:28

标签: advantage-database-server system-procedures

是否可以定义当前用户?

我找到了一个存储过程'sp_mgGetConnectedUsers'。它返回一个结果集,其中包含唯一的唯一字段“Address”。如何将执行查询与此类“地址”相关联。

请建议。

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

2 个答案:

答案 0 :(得分:3)

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

select user() from system.iota;

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

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

答案 1 :(得分:2)

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

sp_mgGetConnectedUsers输出提供以下内容:
用户名 - 计算机名称
字典用户 - 用于登录ADS字典的用户
地址 - IP,IPX或IPC地址
OSUserLoginName - 客户端操作系统登录名
TS地址 - 客户端地址的最终用户的IP地址
ApplicationID - 唯一可选的ID default = exe name

如果您使用词典并且每个人都使用唯一名称连接词典,那么词典用户将是要走的路(您也可以通过“select user()from system.iota”(或)来获取sql脚本等等)。 Address和UserName将是用户的IP地址和用户的计算机名。这应该可以帮助您唯一地识别用户。如果您的用户通过终端服务器进入,您可以使用TS地址与OSUserLoginName一起识别它们。 我不会详细介绍ApplicationID,因为您明确声明您不关心此解决方案。但是......虽然您可以将其设置为您想要的任何内容,但默认值是应用程序的名称(即ARC.exe)

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