Reputation: 1
I am using Oracle 19 and Navicat.
When I execute this, it returns TRUE.
SELECT SYS_CONTEXT('SYS_SESSION_ROLES', 'DBA') FROM DUAL;
However, when I implement a policy to a table, using a function to control permission, in which SYS_CONTEXT('SYS_SESSION_ROLES', 'DBA')
returns FALSE.
But, when I try to use SYS_CONTEXT( 'USERENV', 'SESSION_USER' )
, it returns the same user in SQL and function.
Here only the last SYS_CONTEXT(''USERENV'', ''SESSION_USER'' ) works well.
CREATE OR REPLACE
FUNCTION show_own_salary(v_schema IN VARCHAR2, v_obj IN VARCHAR2)
RETURN VARCHAR2 AS condition VARCHAR2 (200);
BEGIN
IF SYS_CONTEXT('SYS_SESSION_ROLES', 'DBA') = 'TRUE' THEN
RETURN '';
END IF;
IF SYS_CONTEXT( 'SYS_SESSION_ROLES', 'ALL_ACCOUNTANT' ) = 'TRUE' THEN
RETURN '';
END IF;
RETURN 'SID = (SYS_CONTEXT(''USERENV'', ''SESSION_USER'' ))';
END show_own_salary;
I executed SELECT * FROM session_roles
and it shows below:
roles
USER_SYS_PRIVS USER_ROLE_PRIVS
Upvotes: 0
Views: 258