阻止当前用户查看他们的记录? VPD-ORACL12C
Prevent current user from seeing their record? VPD - ORACL12C
我正在尝试创建一个功能,以防止当前登录的用户在 scott.emp table.
中查看他们自己的记录
我已经编写了一个函数来执行该策略。当前 return 语句是 return 'ename != CURRENT_USER';
但这不起作用。
我不确定是否必须添加新的函数参数,或者是否只需要更改 return 语句。在 return 语句中放置多个引号会使函数编译出错。我缺少格式吗?
create or replace function self(
p_schema in varchar2,
p_object in varchar2)
return varchar2 as
begin
return 'ename != CURRENT_USER';
end;
/
begin
dbms_rls.add_policy
(object_schema => 'SCOTT',
object_name => 'EMP',
policy_name => 'self',
policy_function => 'self');
end;
/
"my function return statement is ... however this does not work"
您当前的函数正在返回一个固定的字符串。除非您的 table 有一个名为 CURRENT_USER
的列,否则它总是会引发运行时错误。
"Putting multiple quotes in the return statement compiles the function with errors."
你没有说你得到了什么错误,但我猜 ORA-00984: column not allowed here
。那是因为 current_user()
不是有效的 Oracle 数据库函数(我认为它在 JDBC 中受支持,但那是不同的)。
您需要的是USER。试试这个功能,它会为你工作:
create or replace function banself(
p_schema in varchar2,
p_object in varchar2)
return varchar2 as
begin
return 'ename != USER';
end;
/
CURRENT_USER 可通过 sys_context('userenv'、'current_user')或函数 DBMS_UTILITY.OLD_CURRENT_USER 访问。
您必须将 return 语句更改为。
return 'ename != DBMS_UTILITY.OLD_CURRENT_USER ';
要么
return 'ename != sys_context (''userenv'', ''current_user'') ';
我正在尝试创建一个功能,以防止当前登录的用户在 scott.emp table.
中查看他们自己的记录我已经编写了一个函数来执行该策略。当前 return 语句是 return 'ename != CURRENT_USER';
但这不起作用。
我不确定是否必须添加新的函数参数,或者是否只需要更改 return 语句。在 return 语句中放置多个引号会使函数编译出错。我缺少格式吗?
create or replace function self(
p_schema in varchar2,
p_object in varchar2)
return varchar2 as
begin
return 'ename != CURRENT_USER';
end;
/
begin
dbms_rls.add_policy
(object_schema => 'SCOTT',
object_name => 'EMP',
policy_name => 'self',
policy_function => 'self');
end;
/
"my function return statement is ... however this does not work"
您当前的函数正在返回一个固定的字符串。除非您的 table 有一个名为 CURRENT_USER
的列,否则它总是会引发运行时错误。
"Putting multiple quotes in the return statement compiles the function with errors."
你没有说你得到了什么错误,但我猜 ORA-00984: column not allowed here
。那是因为 current_user()
不是有效的 Oracle 数据库函数(我认为它在 JDBC 中受支持,但那是不同的)。
您需要的是USER。试试这个功能,它会为你工作:
create or replace function banself(
p_schema in varchar2,
p_object in varchar2)
return varchar2 as
begin
return 'ename != USER';
end;
/
CURRENT_USER 可通过 sys_context('userenv'、'current_user')或函数 DBMS_UTILITY.OLD_CURRENT_USER 访问。
您必须将 return 语句更改为。
return 'ename != DBMS_UTILITY.OLD_CURRENT_USER ';
要么
return 'ename != sys_context (''userenv'', ''current_user'') ';