我有两个模式:
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_policies
为my_user
而不是SEC_ADMIN
。因此,我的政策不再适用。
似乎我必须将SEC_ADMIN.my_package.my_proc()
作为SEC_ADMIN
作为解决方案的一部分运行,但我不知道如何。
如果你有任何解决方案,我也会接受替代解决方案。似乎问题在于,每当删除一个表时,附加的策略都会随之丢弃......
感谢您的帮助