如何修改函数以便用户 (HR1) 可以查看 CTL_UPD_USER 为 VPD_CLERK1 或 VPD_CLERK2 的行?
我对 Oracle 和 pl/sql 很陌生。
RETURN VARCHAR2 AS
con VARCHAR2 (200);
BEGIN
IF USER ='HR1' THEN
con := 'CTL_UPD_USER=' ||'''VPD_CLERK1''';
else
con:= 'CTL_UPD_USER=USER';
end if;
RETURN (con);
END;
我尝试了 OR 的各种用法并得到一个编译错误:pl/sql 语句被忽略,表达式类型错误:
Con := 'CTL_UPD_USER=' ||'''VPD_CLERK1''' OR
'CTL_UPD_USER='||'''VPD_CLERK3''';
工作代码:
CREATE TABLE CUSTOMERS (
SALES_REP_ID NUMBER(4),
CUSTOMER_ID NUMBER(8),
CTL_UPD_DTTM DATE,
CTL_UPD_USER VARCHAR2(30),
CTL_REC_STAT CHAR(1),
primary key (sales_rep_id, customer_id)
);
insert into customers values (1000, 90000,NULL, 'VPD_CLERK1','1');
insert into customers values (1000, 90001,NULL, 'VPD_CLERK1','2');
insert into customers values (1000, 90002,NULL, 'VPD_CLERK2','3');
insert into customers values (1000, 90003,NULL, 'VPD_CLERK2','4');
insert into customers values (1000, 90004,NULL, 'VPD_CLERK3','5');
CREATE OR REPLACE FUNCTION
DBSEC_ROW_OWNER_WHERE(
P_SCHEMA_NAME IN VARCHAR2,
P_OBJECT_NAME IN VARCHAR2)
RETURN VARCHAR2 AS
con VARCHAR2 (200);
BEGIN
IF USER ='HR1' THEN
con := 'CTL_UPD_USER=' ||'''VPD_CLERK1''';
else
con:= 'CTL_UPD_USER=USER';
end if;
RETURN (con);
END;
exec dbms_rls.add_policy(object_schema =>'DBSEC',object_name =>
'CUSTOMERS',policy_name => 'dbsec_row_onwer_policy', function_schema =>
'SYS',
policy_function =>'DBSEC_ROW_OWNER_WHERE', enable => true);
我希望能够以 HR1 身份登录并查看 CTL_UPD_USER 为 VPD_CLERK1 或 VPD_CLERK2 或用户为 HR1 的行。