触发在Oracle上创建策略

时间:2014-07-25 14:49:41

标签: oracle triggers policy create-table

我有两个模式:

  

my_user sec_admin

sec_admin有权在my_user的任何表格上创建政策。 我们在包my_package.my_proc()内创建了一个过程,用于生成并执行所有创建策略语句。

到目前为止一切顺利,一切都运转良好。 现在,我们已经意识到当my_user删除一个表(并重新创建它)时,附加的策略会自动被删除。解决方案是手动重用my_package.my_proc()以重新生成策略。但事实是,drop和create table语句是由无法访问Oracle SQL Developer的SAS开发人员创建的。因此,应使用触发器

自动化对my_package.my_proc()的调用

所以我们在my_user创建了一个简单的触发器:

create or replace
TRIGGER test_trig
AFTER CREATE
ON SCHEMA

DECLARE
--oper ddl_log.operation%TYPE;
v_object_type varchar2(100);
BEGIN

  SELECT  ora_dict_obj_type
  into v_object_type
  FROM DUAL;
  If upper(v_object_type)='TABLE' then 
      SEC_ADMIN.my_package.my_proc();
  end if;
END test_trig;

似乎当我们创建一个表时,触发器第一次部分工作。当我们创建第二个表时,触发器似乎有效,但PF_OWNER内的dba_policiesmy_user而不是SEC_ADMIN。因此,我的政策不再适用。

似乎我必须将SEC_ADMIN.my_package.my_proc()作为SEC_ADMIN作为解决方案的一部分运行,但我不知道如何。

如果你有任何解决方案,我也会接受替代解决方案。似乎问题在于,每当删除一个表时,附加的策略都会随之丢弃......

感谢您的帮助

0 个答案:

没有答案