存储过程的用户,使用哪个变量?

User of stored process, which variable to use?

当我查看 SAS 日志时,有 4 个不同的变量可以获取用户:

 _METAPERSON
 _METAUSER
 _SECUREUSERNAME
 _USERNAME

当我检查日志时,当我执行该过程时,所有 4 个变量都具有相同的值。所以我构建了一个进程来检查 _Metauser 是否有特定用户,这样只有我想要的用户才能做某事。 但是我的一个同事有一个问题,变量中不是他调用进程时为他存储的用户名,而是username@Context。在其他 3 个变量中,只为他存储了用户名,所以也许我可以更改为其中一个。我不能使用 Metauser,因为对于某些人来说,用户名后可能有一个@Context。

不,我有问题,要使用哪个变量? 4个变量有什么区别?使用哪个,以确保我只(并且总是)获得纯用户名,无论用户从何处以及哪个 programm/Version 调用进程?

_SECUREUSERNAME宏变量是在应用服务器执行存储过程时创建的。 _SECUREUSERNAME 的值包含客户端身份,如果 _USERNAME 尚未包含值,则此值将写入 _USERNAME 宏变量。 在大多数情况下,_SECUREUSERNAME 的值将与 _USERNAME

相同

_USERNAME 指定从 Web 客户端身份验证获得的用户名的值。

_METAPERSON 指定与 _METAUSER 登录变量关联的个人元数据名称。此变量的值可以是未知的。客户端不能修改此变量。

_METAUSER 指定用于连接到元数据服务器的登录用户名。客户端不能修改此变量。

您的问题没有简单的答案,因为这取决于您的设置。您的用户是否必须使用 Metaserver 登录?您的代码是否总是使用 WebService 访问?用户 ID,它们是什么,它们是来自 AD 的 ID 吗?是否启用了单点登录 (SSO)?如何在 SAS 上配置 ID?人们是否使用受信任的用户进行连接?

此致, 瓦西里

我正在使用_METAUSER。现在,我们的系统设置了 SSO,因此用户名始终没有“@”。我也在没有 SSO 的情况下使用过它,但后来我不得不使用 %scan(&_METAUSER,1,@) 去除 @context 部分。

来自存储过程会话中的测试,使用 SSO 的 9.2 (windows) 环境:

OS 用户名(在我的例子中,我的 windows ID)

  • _METAUSER(使用 OS 登录时,例如使用 SSO,请参阅已接受答案中的@Vasilij Nevlev 评论)
  • _SECUREUSERNAME

SAS 用户名(在元数据中)

  • _METAPERSON - 指定人物元数据名称 与 _METAUSER 登录变量。 不确定这怎么可能是未知的,因为 SMC 不会让您输入空白值..(匿名网络用户是 webanon)
  • _USERNAME - 绝对是用户名,因为您可以在 URL 中将其与 _password 一起使用以绕过 SAS 登录屏幕。