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