sql - 在 Oracle 中防止删除视图
问题描述
即使他/她有特权这样做,如何防止用户不放弃视图?我有一个应用程序正在使用的视图。但是,它被用户丢弃了几次。有没有像 REVOKE DROP ANY VIEW 这样的东西?我必须为此使用触发器吗?
解决方案
触发器可能会有所帮助。这是一个例子。
首先,要删除的一些对象:
SQL> create table test as select * From emp where 1 = 2;
Table created.
SQL> create or replace view v_dept as select * From dept;
View created.
SQL>
我不想让 V_DEPT 被丢弃,所以:
SQL> create or replace trigger trg_drop
2 before drop on schema
3 declare
4 l_name varchar2(30);
5 begin
6 select ora_dict_obj_name
7 into l_name
8 from dual;
9 if l_name = 'V_DEPT' then
10 raise_application_error(-20001, 'Forbidden');
11 end if;
12 end;
13 /
Trigger created.
测试:
SQL> drop view v_dept;
drop view v_dept
*
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-20001: Forbidden
ORA-06512: at line 8
SQL> drop table test;
Table dropped.
SQL>
推荐阅读
- snowflake-cloud-data-platform - 在 Snowflake Webui 中看不到角色
- c++ - 我的 esp32 M5 StickC plus 的 Wifi 不工作
- javascript - 反应承诺“无法读取 null 的属性‘nodeName’”
- neo4j - 使用密码进行元胞自动机样式搜索?
- java - else 语句每次都会与 if 语句一起打印
- python - 找不到元素 - Selenium python
- ionic-framework - 无法在本地提供离子文档
- go - 使用不同的 go.mod 文件构建一个 go 项目
- c++ - 为什么我不断收到访问冲突异常?
- django - 如何在 Django-CKEditor 中上传 PDF?