Sql 在Oracle中防止删除视图

Sql 在Oracle中防止删除视图,sql,oracle,view,Sql,Oracle,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;

如何防止用户即使拥有删除视图的权限也不删除视图?我有一个应用程序正在使用的视图。然而,它被用户丢弃了好几次。是否有类似于撤销任何视图的内容?我必须使用触发器吗?

触发器可能会有所帮助。这里有一个例子

首先,要删除的几个对象:

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_部门,因此:

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>

扳机可能会有帮助。这里有一个例子

首先,要删除的几个对象:

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_部门,因此:

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>

“防止用户删除他/她有权限删除的视图”他/她为什么首先拥有这样的权限?@PavelSmirnov在我们的场景中,多个用户使用一个通用管理员帐户进行管理。那么。。。在这种情况下,视图并不是唯一需要担心的对象。Littlefoot举了一个很好的例子,但老实说,问题是用户有特权做他们不应该做的事情。虽然目前您可能只对一个视图有问题,但其他对象也可能有问题。但是,如果开发人员/团队认为他们需要对所有内容进行根级别访问,并且不相信有任何特权,那么与他们合作可能会很困难,如果您没有关于职责分离和最低特权的对话,这几乎肯定会成为一个持续存在的问题。我们在这方面没有任何问题,因为ony 2是我们组中的管理员,并且最近创建了一个后缀为“\u test”的视图。在某些数据库维护例行程序中删除了它。我完全同意你们的观点,我们需要一个更强大的解决方案。但我只是想知道,从技术上讲,是否有一种方法可以防止像这种情况下删除视图或表。“防止用户删除他/她有权这样做的视图”他/她为什么一开始就有这样的特权?@PavelSmirnov在我们的场景中,一个通用管理帐户被多个用户用于管理目的。嗯。。。在这种情况下,视图并不是唯一需要担心的对象。Littlefoot举了一个很好的例子,但老实说,问题是用户有特权做他们不应该做的事情。虽然目前您可能只对一个视图有问题,但其他对象也可能有问题。但是,如果开发人员/团队认为他们需要对所有内容进行根级别访问,并且不相信有任何特权,那么与他们合作可能会很困难,如果您没有关于职责分离和最低特权的对话,这几乎肯定会成为一个持续存在的问题。我们在这方面没有任何问题,因为ony 2是我们组中的管理员,并且最近创建了一个后缀为“\u test”的视图。在某些数据库维护例行程序中删除了它。我完全同意你们的观点,我们需要一个更强大的解决方案。但我只是想知道技术上是否有一种方法可以防止视图或表像这种情况一样被删除。