关于add_policy过程调用问题

FGA审计调用函数问题: 
 begin
  DBMS_FGA.ADD_POLICY(
     object_schema   =>'sec',
     object_name     =>'t',
     policy_name     =>'audit_t' ,
     audit_condition =>'X>300 and Y>300',
     audit_column    =>'X,Y',
     handler_schema  =>'SEC',
     handler_module  =>'PROC_NAME,
     enable          =>true,
     statement_types =>'select',
     audit_trail    =>DBMS_FGA.DB+DBMS_FGA.EXTENDED,
     audit_column_opts =>DBMS_FGA.ANY_COLUMNS);
  end;
以上过程handler_module  =>'PROC_NAME‘该项调用的PROC_MON_T过程写法是由讲究的。过程名可以随便设定,但是过程的参数必须是(schema_name varchar2,table_name varchar2, policy_name varchar2) 这种格式。要不然,审计调用这个过程的时候就会报错。
一下是我开始定义的过程(不含标准输入参数):
CREATE OR REPLACE PROCEDURE PROC_MON_T
as
begin
insert into mon_t values(sysdate);
end;
 
当执行查询语句 sec@prod>select * from t where x>300时,就会爆如下错误:
ERROR:
ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to 'PROC_MON_T'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
------------------------------------------------------
然后报过程的输入参数改为要求的标准输入参数。代码如下:
CREATE OR REPLACE PROCEDURE PROC_MON_T(schema_name varchar2,table_name varchar2, policy_name varchar2)
as
begin
insert into mon_t values(sysdate);
end;
 
再次执行语句 sec@prod>select * from t where x>300 就不不会以上报错了。
 
附:精细化审计对调用过程有要求;官方文档里有特别说明,如下
#
The audit function (handler_module) is an alerting mechanism for the administrator. The required interface for such a function is as follows:
PROCEDURE ( object_schema VARCHAR2, object_name VARCHAR2, policy_name VARCHAR2 )  AS ...
where fname is the name of the procedure, object_schema is the name of the schema of the table audited, object_name is the name of the table to be audited, and policy_name is the name of the policy being enforced.
位置:Oracle? Database Security Guide—>12 Configuring and Administering Auditing
 
 
 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9606353/viewspace-775233/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/9606353/viewspace-775233/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Status TableBuilder::Finish() { Rep* r = rep_; Flush(); assert(!r->closed); r->closed = true; BlockHandle filter_block_handle, metaindex_block_handle, index_block_handle; // Write filter block if (ok() && r->filter_block != nullptr) { WriteRawBlock(r->filter_block->Finish(), kNoCompression, &filter_block_handle); } // Write metaindex block if (ok()) { BlockBuilder meta_index_block(&r->options); if (r->filter_block != nullptr) { // Add mapping from "filter.Name" to location of filter data std::string key = "filter."; key.append(r->options.filter_policy->Name()); std::string handle_encoding; filter_block_handle.EncodeTo(&handle_encoding); meta_index_block.Add(key, handle_encoding); } // TODO(postrelease): Add stats and other meta blocks WriteBlock(&meta_index_block, &metaindex_block_handle); } // Write index block if (ok()) { if (r->pending_index_entry) { r->options.comparator->FindShortSuccessor(&r->last_key); std::string handle_encoding; r->pending_handle.EncodeTo(&handle_encoding); r->index_block.Add(r->last_key, Slice(handle_encoding)); r->pending_index_entry = false; } WriteBlock(&r->index_block, &index_block_handle); } // Write footer if (ok()) { Footer footer; footer.set_metaindex_handle(metaindex_block_handle); footer.set_index_handle(index_block_handle); std::string footer_encoding; footer.EncodeTo(&footer_encoding); r->status = r->file->Append(footer_encoding); if (r->status.ok()) { r->offset += footer_encoding.size(); } } return r->status; }在这段代码里 GenerateFiler()函数被调用了吗
最新发布
06-02

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值