1. Factors的概念
Factors是用来构建安全策略,规则集使用因子
2. 测试恢复
1.SYSTEM用户无法在远程进行访问SCOTT的表,是因为有规则
SQL>select * from scott.emp;
select* from scott.emp
ORA-47306:18446744073709531615: Restricted Command
2.把规则集中的规则去掉,auth对应的规则集不动 dvowner用户
begin
DVSYS.DBMS_MACADM.delete_rule_from_rule_set(
rule_set_name=> 'Access_From_Local',
rule_name => 'ip_limit');
end;
/
3.SYSTEM用户可以访问SCOTT的表了
3. 创建删除因子
创建因子:
begin
DVSYS.DBMS_MACADM.create_factor(
factor_name => 'Client_IP1',
factor_type_name => 'IP Address',
description => '限制IP访问',
rule_set_name => 'Access_From_Local',
get_expr =>'UPPER(SYS_CONTEXT(''USERENV'',''IP_ADDRESS''))',
validate_expr => '',
identify_by => DVSYS.DBMS_MACUTL.g_identify_by_method,
labeled_by =>DVSYS.DBMS_MACUTL.g_labeled_by_self,
eval_options => DVSYS.DBMS_MACUTL.G_EVAL_ON_SESSION,
audit_options =>DVSYS.DBMS_MACUTL.G_AUDIT_ON_VALIDATE_FALSE,
fail_options => DVSYS.DBMS_MACUTL.G_FAIL_WITH_MESSAGE);
commit;
end;
/
当创建了因子,在DVF用户下,就自动生成函数f$client_ip1
SQL>select dvf.f$Client_IP1 from dual;
F$CLIENT_IP1
---------------
192.168.4.7
其中validate_expr表示,当满足条件时,该函数(因子)会返回值,
如果validate_expr设为true=false,表明任何时侯dvf.f$Client_IP1返回值都为null
这样规则里就可以使用因子函数来进行设定条件
rule_set_name: Rule set name if you want to use a ruleset to control when and how a factor identity is set.
删除因子:
execDVSYS.DBMS_MACADM.delete_factor(factor_name => 'Client_IP1');
4. 规则使用因子
前面创建的规则表达式是:
begin
DVSYS.DBMS_MACADM.CREATE_RULE(
rule_name=> 'ip_limit',
rule_expr=> 'sys_context (''userenv'',''ip_address'')=''127.0.0.1'' orsys_context(''userenv'',''ip_address'') is null'); -- 规则表达式
commit;
end;
/
这次更新为因子函数:
begin
DVSYS.DBMS_MACADM.update_rule(rule_name =>'ip_limit',
rule_expr =>'dvf.f$Client_IP1 is null');
end;
/
5. 相关视图
DBA_DV_FACTOR
DBA_DV_FACTOR_LINK
DBA_DV_FACTOR_SCOPE
DBA_DV_FACTOR_TYPE
DBA_DV_RULE
DBA_DV_RULE_SET
DBA_DV_RULE_SET_RULE