有時,為了防止意外删除資料庫中的表或者其他資料庫對象,可以通過人為的增加一個trigger來實作。如下:
create or replace trigger ddl_deny
before create or alter or drop or truncate on database
declare
l_errmsg varchar2(100):= 'You have no permission to this operation';
begin
if ora_sysevent = 'CREATE' then
raise_application_error(-20001, ora_dict_obj_owner || '.' || ora_dict_obj_name || ' ' || l_errmsg);
elsif ora_sysevent = 'ALTER' then
raise_application_error(-20001, ora_dict_obj_owner || '.' || ora_dict_obj_name || ' ' || l_errmsg);
elsif ora_sysevent = 'DROP' then
elsif ora_sysevent = 'TRUNCATE' then
end if;
exception
when no_data_found then
null;
end;
/
最好用sysdba登入執行,然後使用一個業務使用者登入測試drop;
SQL> drop table test;
drop table a
ORA-00604: 遞歸 SQL 級别 1 出現錯誤
ORA-20001: TEST.TEST You have no permission to this operation
ORA-06512: 在 line 9
這裡是參考一位大師的解決思路,類似需求可以參考這個加以修改。