是否可以增加RLS谓词中的oracle替换变量值长度?

是否可以增加RLS谓词中的oracle替换变量值长度?,oracle,security,plsql,oracle11gr2,Oracle,Security,Plsql,Oracle11gr2,神谕的朋友们 今天,我发现我的RLS工作不正常。。 我有一个视图-HR\u V\u EMPLOYEE\u字母表。 在这个视图中,我有带谓词的RLS策略函数 NUMDEPTID的长度因oracle用户而异,它在HR_V_EMPLOYEE_字母表视图上执行查询。 我有一个用户,在这个视图上有很长的谓词: NUMDEPTID IN (17923354,3412,20680619,3455,25203933,3470,3487,3487,18903226,3520,17923246,3564,17923

神谕的朋友们

今天,我发现我的RLS工作不正常。。 我有一个视图-HR\u V\u EMPLOYEE\u字母表。 在这个视图中,我有带谓词的RLS策略函数 NUMDEPTID的长度因oracle用户而异,它在HR_V_EMPLOYEE_字母表视图上执行查询。 我有一个用户,在这个视图上有很长的谓词:

NUMDEPTID IN (17923354,3412,20680619,3455,25203933,3470,3487,3487,18903226,3520,17923246,3564,17923436,732603,3409,16404471,3556,17458291,17458301,17458301,17862534,17862534,6296438,17862616,17923013,17923013,3401,17949231,3423,17975096,17975101,17975101,18197184,18197184,18903152,18903152,3490,20308150)
长度是290个符号,我使用1字节字符集,所以这个谓词的长度是290字节

我发现,该用户在视图中没有看到一些数据。我已经做了实验,并将谓词从NUMBER数据类型转换为VARCHAR2数据类型:

NUMDEPTID IN ('17923354','3412','20680619','3455','25203933','3470','3487','3487','18903226','3520','17923246','3564','17923436','732603','3409','16404471','3556','17458291','17458301','17458301','17862534','17862534','6296438','17862616','17923013','17923013','3401','17949231','3423','17975096','17975101','17975101','18197184','18197184','18903152','18903152','3490','20308150')
我运行了一个查询:

SELECT* FROM HR_V_EMPLOYEE_ALPHABET;
哎哟,我收到一个错误ORA-28113策略谓词有错误。 我看到了一个跟踪文件,发现了以下内容:

*** 2014-08-08 17:09:55.762
-------------------------------------------------------------
Error information for ORA-28113:
Logon user     : GULKINA_IF
Table/View     : APPROOT.HR_V_EMPLOYEE_ALPHABET
Policy name    : RLS_HRWATCHER_HR_V_EMP_ALPHAB
Policy function: CONTEXT_OWNER.PKG_HRWATCHER_SEC_FUNC.F_HRWATCHER_RLS
RLS view  :
SELECT  "ID","EMPLOYEEID","CITEZENID","ALPATATUS","ARCHIVEDATE","DESCR","DESCR2","OLD_DCODE","OLD_TABNUMB","OLD_PROD","STRUCTUREID","STATUSID","INDATE","DCODE","CONDCODE","DNAME","TABNUMB","LASTNAME","NAME","FATHERSHIP","JOBTITLE","JOBTITLE_FULL","JOBTITL_CUT","CATEGORYNUMB","CATEGCODE","WORKCODE","WORKTYPE","INN","INSURANCE","SALARY_HOUR","QUAL_NUMB","SALARY_MONTH","DISMISSDATE","SALARY_CODE","ADDITIONHARM","ADDITIONSECRET","ADDITIONOTHER","EXPA_ALL","EXPA_LOCAL","EXPA_DEPT","POL","BIRTHDATE","BRIGADE","D_GROUP","OLD_TAB","GEN_UNIT","NUMDEPTID","FINDATE","BIRTH_HOLIDAY","CHILD_HOLIDAY","CHANGESTATUSDATE","WORKGRAFF","ORDERBILL","INSTATE","DEPTID","OLDDCODE","GRAFID","SCHEDULENAME","OUTDATE" FROM "APPROOT"."HR_V_EMPLOYEE_ALPHABET"   "HR_V_EMPLOYEE_ALPHABET" WHERE (NUMDEPTID IN ('17923354','3412','20680619','3455','25203933','3470','3487','3487','18903226','3520','17923246','3564','17923436','732603','3409','16404471','3556','17458291','17458301','17458301','17862534','17862534','6296438','17862616','17923013','17923013','3401','1)) 
ORA-01756: quoted string not properly terminated
所以,Oracle trim谓词。 我发现oracle对替换变量值的限制为256字节

嗯,我不确定,我的问题确实有这个原因。。 如何增加RLS谓词的oracle替换变量值长度?有没有可能


向您致意,Sergey

您引用的文档是为Essbase提供的。这是一个与Oracle完全不同的数据库产品,尽管它恰好属于Oracle公司。您能否发布一个可复制的测试用例来说明问题?我倾向于猜测谓词函数中存在一些bug。为什么您的策略函数要添加硬编码文本列表,而不是简单地添加一个SELECT语句来获取您要查找的特定值?您可以将这些部门ID放入一个表中,然后使用…WHERE NUMDEPTID in SELECT NUMDEPTID FROM table\ U of\ U DEPT\ ID吗?只是一个想法。。。