Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Oracle虚拟专用数据库列限制_Sql_Database_Oracle - Fatal编程技术网

Sql Oracle虚拟专用数据库列限制

Sql Oracle虚拟专用数据库列限制,sql,database,oracle,Sql,Database,Oracle,我正在尝试创建一个限制数据库访问的虚拟专用数据库。我一直在研究如何限制用户查看所有列。我的作业要求将用户限制为两列: 设计并实现一个限制数据库访问的虚拟专用数据库。您的设计应该基于两个列和两个表。(提示:其中col1=value1和col2=value2) 以下是我当前的DDL语句: CREATE OR REPLACE FUNCTION auth_client( v_schema IN VARCHAR2, v_objname IN VARCHAR2) RETURN VARCHAR2 AS

我正在尝试创建一个限制数据库访问的虚拟专用数据库。我一直在研究如何限制用户查看所有列。我的作业要求将用户限制为两列:

设计并实现一个限制数据库访问的虚拟专用数据库。您的设计应该基于两个列和两个表。(提示:其中col1=value1和col2=value2)

以下是我当前的DDL语句:

CREATE OR REPLACE FUNCTION auth_client(
 v_schema IN VARCHAR2,
 v_objname IN VARCHAR2)
 RETURN VARCHAR2 AS
 con VARCHAR2 (200); 
BEGIN 
 con := 'SALES_REP_ID = 4111';
 RETURN (con); 
END auth_client; 
/

BEGIN 
 DBMS_RLS.ADD_POLICY (
 object_schema => 'general_manager', 
 object_name => 'client', 
 policy_name => 'client_policy', 
 policy_function => 'auth_client',
 sec_relevant_cols => 'sales_rep_id'); 
END; 
/

据我所知,sec_related_cols语句假定限制查询中除指定列以外的所有列,但所有列仍显示

VPD只允许从列中隐藏值,而不允许从结果中删除列

create table vpd_table 
as select mod(level,2) as nr,level lv from dual connect by level < 100;

select * from vpd_table;


CREATE OR REPLACE FUNCTION auth_function(
 v_schema IN VARCHAR2,
 v_objname IN VARCHAR2)
 RETURN VARCHAR2 AS
 con VARCHAR2 (200); 
BEGIN 
 con := 'nr = 1';
 RETURN (con); 
END ; 
/

BEGIN 
 DBMS_RLS.ADD_POLICY (
 object_name => 'vpd_table', 
 policy_name => 'client_policy', 
 policy_function => 'auth_function',
 sec_relevant_cols => 'nr', 
 sec_relevant_cols_opt => dbms_rls.ALL_ROWS); 
END; 
/

begin 
DBMS_RLS.DROP_POLICY(null, 'vpd_table', 'client_policy');
end;
创建表vpd\u表
选择mod(2级)作为nr,双连接的lv级<100级;
从vpd_表中选择*;
创建或替换函数auth_函数(
VARCHAR2中的v_模式,
VARCHAR2中的v_objname)
返回VARCHAR2作为
con VARCHAR2(200);
开始
con:='nr=1';
返回(con);
结束;
/
开始
DBMS_RLS.ADD_策略(
对象名称=>'vpd\U表',
策略\u名称=>“客户端\u策略”,
策略函数=>“验证函数”,
第二节相关内容=>'nr',
sec_relevant_cols_opt=>dbms_rls.所有行);
结束;
/
开始
DBMS_RLS.DROP_策略(null、“vpd_表”、“客户端_策略”);
结束;
什么是重要的

sec\u relevant\u cols
-敏感列列表<代码>'col1 col2'或'col1,col2'-支持这两种格式

sec\u relevant\u cols\u opt
-仅使用
sec\u relevant\u cols
。如果是
dbms。所有行
-用于敏感列oracle,而不是原始值dispaly null。 /

若要从结果中删除列,则必须创建视图。并且只允许访问vie