實現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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章