在尝试解决有关 Oracle 的 VPD 策略的作业时,我遇到了一些问题。问题是“MYADMIN帐户有权选择和更新学生的注册信息。但他不能看到学生的注册信息的分数以及更新学生的注册信息的分数。
我已经完成了第一项任务(不允许他们通过使用列掩码查看学生注册信息的分数),但是当我尝试像这样将 statement_type 中的“更新”一词添加到我的代码中时,DBMS 会通知错误。我已经搜索了互联网并意识到列掩码只能用于“选择”语句。
因此,如果我想应用 Oracle VPD 策略来限制 MYADMIN 更新学生注册信息的分数。我怎样才能做到这一点?我必须创建一个 session_context 视图吗?
这是我的代码。太感谢了
CREATE OR REPLACE FUNCTION Question5
(p_schema IN VARCHAR2, p_object IN VARCHAR2)
RETURN VARCHAR2
AS
user_value VARCHAR2(60);
user varchar2(60);
BEGIN
user := SYS_CONTEXT('userenv','session_user');
user_value:= '(select (SYS_CONTEXT(''USERENV'',''SESSION_USER'')) from dual)';
IF(UPPER(user) = 'MYADMIN') THEN
RETURN 'USER != ''MYADMIN''';
ELSE
RETURN 'StudentID = ' || user_value;
END IF;
END;
/
BEGIN
DBMS_RLS.ADD_POLICY(
object_schema =>'SYSTEM',
object_name => 'EnrollInformation',
policy_name => 'Question5_MyAdmin',
statement_types => 'select, update',
function_schema => 'sec_mgr',
policy_function => 'Question5',
sec_relevant_cols => 'Score',
sec_relevant_cols_opt => dbms_rls.all_rows,
update_check => TRUE);
end;
/