【问题标题】:How to define a current user?如何定义当前用户?
【发布时间】:2010-05-10 15:09:28
【问题描述】:

是否可以定义当前用户?

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

请指教。

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

【问题讨论】:

  • sp_GetSQLStatements 返回用户名(连同 SQL 语句)作为其正常输出的一部分。那是你要找的吗?看来您可以将其与 sp_mgGetConnectedUsers() 中的用户名相关联。
  • 我看到这已经是京东的建议了。我是盲人。

标签: advantage-database-server system-procedures


【解决方案1】:

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

select user() from system.iota;

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

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

【讨论】:

  • 是的,你说得对,杰里米。我的描述不是很详细,抱歉。我需要的只是知道谁给我的 SP 打电话。并且取决于用户的不同行为应该是。因此,您使用标量函数 USER() 的解决方案正是我所需要的。谢谢。
【解决方案2】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多