有没有办法获得发起 user/schema 的 sys_context('USERENV', 'CURRENT_USER')
Is there a way to get the sys_context('USERENV', 'CURRENT_USER') of the initiating user/schema
如果我从 admin1 访问 table emp,则使用下面的这个函数,理想情况下它应该 return 0 表示连接用户为“ADMIN”,但它 return 1 (最终用户的连接作为其使用 ADMINT_TEST1.emp)
即使选择 audit_test1.emp,我也想识别 ADMIN1 用户的连接
(函数 check_user 在两种模式中都可用)
例如:
来自 admin1 用户
create or replace function check_user
return number
is
n number;
begin
SELECT sys_context('USERENV', 'CURRENT_USER') into usrname FROM dual;
if (usrname ='AUDIT_TEST') then
dbms_output.put_line('show user'||usrname);
return 1;
else
return 0;
end if;
end ;
测试功能(运行 来自用户:ADMIN1)
declare
n number(1);
begin
select audit_test.check_user into n from dual;
dbms_output.put_line(n);
select check_user into n from dual;
dbms_output.put_line(n);
end;
/
Output
===============
show user AUDIT_TEST
1
show user ADMIN1
0
这是预期的功能吗?即使发起用户是 ADMIN1,当我们发出 admin_test.emp(connection_identifier)更改为 AUDIT_TEST;
(我已经尽力表达了我的意思,不知道表达的是否清楚,有不明白的地方欢迎评论)
您可以简单地使用 dbms_output.put_line(sys_context('USERENV', 'CURRENT_USER'));
- 不需要 SELECT ... INTO ... FROM dual
无论如何,检查 documentation:
CURRENT_USER
The name of the database user whose privileges are currently active. This may change during the duration of a database session as Real Application Security sessions are attached or detached, or to reflect the owner of any active definer's rights object. When no definer's rights object is active, CURRENT_USER returns the same value as SESSION_USER.
CURRENT_USER
不是当前用户,显示的是当前激活的权限。默认情况下(即定义者的权利)在 Procedure/Function/Package 中 过程所有者的权限 适用于当前用户。
为了得到当前用户使用这个用途sys_context('USERENV', 'SESSION_USER')
或者干脆USER
.
如果我从 admin1 访问 table emp,则使用下面的这个函数,理想情况下它应该 return 0 表示连接用户为“ADMIN”,但它 return 1 (最终用户的连接作为其使用 ADMINT_TEST1.emp)
即使选择 audit_test1.emp,我也想识别 ADMIN1 用户的连接 (函数 check_user 在两种模式中都可用) 例如: 来自 admin1 用户
create or replace function check_user
return number
is
n number;
begin
SELECT sys_context('USERENV', 'CURRENT_USER') into usrname FROM dual;
if (usrname ='AUDIT_TEST') then
dbms_output.put_line('show user'||usrname);
return 1;
else
return 0;
end if;
end ;
测试功能(运行 来自用户:ADMIN1)
declare
n number(1);
begin
select audit_test.check_user into n from dual;
dbms_output.put_line(n);
select check_user into n from dual;
dbms_output.put_line(n);
end;
/
Output
===============
show user AUDIT_TEST
1
show user ADMIN1
0
这是预期的功能吗?即使发起用户是 ADMIN1,当我们发出 admin_test.emp(connection_identifier)更改为 AUDIT_TEST;
(我已经尽力表达了我的意思,不知道表达的是否清楚,有不明白的地方欢迎评论)
您可以简单地使用 dbms_output.put_line(sys_context('USERENV', 'CURRENT_USER'));
- 不需要 SELECT ... INTO ... FROM dual
无论如何,检查 documentation:
CURRENT_USER
The name of the database user whose privileges are currently active. This may change during the duration of a database session as Real Application Security sessions are attached or detached, or to reflect the owner of any active definer's rights object. When no definer's rights object is active, CURRENT_USER returns the same value as SESSION_USER.
CURRENT_USER
不是当前用户,显示的是当前激活的权限。默认情况下(即定义者的权利)在 Procedure/Function/Package 中 过程所有者的权限 适用于当前用户。
为了得到当前用户使用这个用途sys_context('USERENV', 'SESSION_USER')
或者干脆USER
.