实现ORACLE如何去除某些用户的DROP权限!

有时在进行项目开发过程中,由于一些误操作会导致数据库的表给误删除掉,为了避免这一情况的发生,如何严格控制某用户不能对自己的库进行DROP权限,需要进行相关设置,由于默认connect的权限也是具有drop自己用户的表结构,通过product_user_profile只能限制sql*plus的操作,而不能限制其它第三方oracle连接工具,最有效的方法就是通过在system用户下建立触发器来限制。

具体如下:

这个trigger建到了system用户下,TEMP几个用户都无法Dop自己的对象,你可以参照进行修改。

CREATE OR REPLACE TRIGGER "TRG_DENY_DROP_UBISP" BEFORE
DROP ON DATABASE
BEGIN
  IF (ORA_DICT_OBJ_OWNER='TEMP_ODS' OR
      ORA_DICT_OBJ_OWNER='TEMP_MID' OR
      ORA_DICT_OBJ_OWNER='TEMP_DW' OR
      ORA_DICT_OBJ_OWNER='TEMP_REPORT' OR
      ORA_DICT_OBJ_OWNER='TEMP_WEB' OR
      ORA_DICT_OBJ_OWNER='TEMP_REPORT_NEW')
     AND ORA_LOGIN_USER<>'TEMP_ADMIN'---排除的用户
     AND ORA_DICT_OBJ_TYPE='TABLE' AND ORA_DICT_OBJ_NAME NOT LIKE '%OLD' THEN--可以让被限制的用户删除的表
     RAISE_APPLICATION_ERROR(-20010,'你不能创建/删除TEMP_%用户下的任何表.');
  END IF;
END TRG_DENY_DROP_UBISP;

注:如果要对当前用户限制所有对象的DROP操作,可将触发器中的ORA_DICT_OBJ_TYPE和ORA_DICT_OBJ_NAME的属性去掉即可。

发布了90 篇原创文章 · 获赞 65 · 访问量 62万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章