有時在進行項目開發過程中,由於一些誤操作會導致數據庫的表給誤刪除掉,爲了避免這一情況的發生,如何嚴格控制某用戶不能對自己的庫進行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的屬性去掉即可。