您好,我创建了一个存储过程,其行为为'以所有者身份执行(我需要拥有者的权利)。
我希望获得调用它的用户的原始角色,这有什么办法吗?不幸的是,“ select current_role()”语句返回了所有者的角色...
如果有解决方法,我将不胜感激;)
[使用EXECUTE AS OWNER
时,rules do not permit reading the caller's session details,包括其身份或作用:
所有者权利存储过程在会话中遵守以下规则:
[…]
无法访问大多数特定于呼叫者的信息。例如:
无法查看,设置或取消设置呼叫者的会话变量。
只能读取特定的会话参数,并且无法设置或取消设置任何呼叫者的会话参数。
无法查询基于当前用户返回结果的INFORMATION_SCHEMA表函数,例如AUTOMATIC_CLUSTERING_HISTORY。
虽然不方便,但是您可以在存储过程中使用逻辑来强制调用者的角色名称应作为参数传递:
CREATE OR REPLACE PROCEDURE PROC(ROLE_NAME STRING)
[…]
var VALID_ROLES_ARRAY = ["FOO", "BAR"];
var IS_VALID_CALLER_ROLENAME = VALID_ROLES_ARRAY.includes(ROLE_NAME);
[…];
CALL PROC(CURRENT_ROLE());
(代替参数,您也可以通过passed(并且灵活)permitted要求设置它,并要求QUERY_TAG
session parameter)>
再次失败^^有我的代码。也许您会看到我的错误。