控制DDL許可權及紀錄DDL操作的Trigger
轉自:http://space.itpub.net/?uid-24800471-action-viewspace-itemid-719089
--建立一個控制DDL許可權及紀錄DDL操作的Trigger
--需要設定目錄utl_file_dir,此引數只能重啟才能生效
alter system set utl_file_dir='/usr/tmp/log/orginfo/' scope=spfile;
CREATE OR REPLACE TRIGGER SYS.NO_DDL_PRIVILEGE_HDB
BEFORE DDL
ON ORGINFO.SCHEMA
DECLARE
NSTATEMENT NUMBER;
NLINE NUMBER;
NINDEX NUMBER;
TYPE ARR_SQL IS TABLE OF VARCHAR2(32767) INDEX BY BINARY_INTEGER;
ARR_SQLSTATEMENT ARR_SQL;
SQLSTATEMENT VARCHAR2(32400);
ENDSTATEMENT VARCHAR2(32600);
LOGMESSAGE VARCHAR2(32767);
LINEMESSAGE VARCHAR2(32767);
SQL_TEXT ORA_NAME_LIST_T;
TERMINAL VARCHAR2(50);
IP_ADDRESS VARCHAR2(23);
OS_USER VARCHAR2(30);
EXETIMESTAMP VARCHAR2(15);
FILE_HANDLE UTL_FILE.FILE_TYPE;
BEGIN
NSTATEMENT := ORA_SQL_TXT(SQL_TEXT); -- 獲取執行的語句
NINDEX := 0;
SQLSTATEMENT := SQL_TEXT(1);
--插入相關資訊到表中
INSERT INTO ORGINFO.EVENT_RECORDS (HOST,
IP_ADDRESS,
OS_USER,
Login_User,
OBJ_TYPE,
OBJ_NAME,
EVENT,
TIMESTAMP)
VALUES (SYS_CONTEXT('USERENV','HOST'),
SYS_CONTEXT('USERENV','IP_ADDRESS'),
SYS_CONTEXT('USERENV','OS_USER'),
ORA_LOGIN_USER,
SYS.Dictionary_Obj_Type,
SYS.Dictionary_Obj_Name,
Sysevent,
TO_CHAR(SYSDATE,'YYYYMMDD HH24MISS'));
SELECT SYS_CONTEXT('USERENV','TERMINAL') INTO TERMINAL FROM DUAL;
SELECT SYS_CONTEXT('USERENV','IP_ADDRESS') INTO IP_ADDRESS FROM DUAL;
SELECT SYS_CONTEXT('USERENV','OS_USER') INTO OS_USER FROM DUAL;
SELECT TO_CHAR(SYSDATE,'YYYYMMDD HH24MISS') INTO EXETIMESTAMP FROM DUAL;
--紀錄執行的DDL終端,IP,使用者和詳細語句
LOGMESSAGE := 'ORA-20001' || ':' || TO_CHAR(SYSDATE,'YYYY/MM/DD HH24:MI:SS') || ':' || TERMINAL || ':' || IP_ADDRESS || ':' || OS_USER || ':' || CHR(10) || CHR(13) || SQLSTATEMENT;
--在上每天生成檔案紀錄執行DDL資訊
FILE_HANDLE := UTL_FILE.FOPEN ('/usr/tmp/log/orginfo/', TO_CHAR(SYSDATE,'yymmdd') || 'ddl_hdb.log', 'A',32767);
UTL_FILE.PUTF (FILE_HANDLE,LOGMESSAGE);
UTL_FILE.FCLOSE (FILE_HANDLE);
IF (USER = 'ORGINFO') AND (UPPER(SYS_CONTEXT('USERENV','OS_USER')) NOT IN ('LIMING_GU','YONG_WANG','YANLIN_XU','QILIANG_YUAN')) THEN
RAISE_APPLICATION_ERROR( -20001, 'Sorry,' || SYS_CONTEXT('USERENV','OS_USER') ||',you don''t have privileges to perform. this operation');
END IF;
END;
/
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/73920/viewspace-1057673/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 禁止DDL執行的trigger
- Create a trigger TO monitoring DDL
- 檔案目錄許可權操作
- 記錄資料庫所有ddl操作資料庫
- 許可權控制及AOP日誌
- 限制DDL操作(四)
- 限制DDL操作(三)
- 限制DDL操作(二)
- 限制DDL操作(一)
- MySQL DDL操作表MySql
- 配置GoldenGate啟動DDL支援同步DDL操作Go
- DDL操作的自動提交
- MYSQL學習筆記13: DCL許可權控制(使用者許可權操作)MySql筆記
- 帆軟——目錄及許可權配置
- 記錄一次 Online DDL 操作
- Elasticsearch 許可權控制Elasticsearch
- 透過trigger禁止使用者刪除或修改等DDL操作
- 通過trigger禁止使用者刪除或修改等DDL操作
- 檢視使用者的目錄操作許可權
- Linux的許可權控制Linux
- mysql 8.0.21使用者及許可權操作MySql
- 如何用 Vue 實現前端許可權控制(路由許可權 + 檢視許可權 + 請求許可權)Vue前端路由
- 禁止使用者的DDL操作
- 04 MySQL 表的基本操作-DDLMySql
- Oracle12c 新特性 - log記錄DDL操作Oracle
- Linux許可權控制Linux
- Appfuse:許可權控制APP
- oracle追蹤誤操作DDLOracle
- DML操作 DDL觸發器觸發器
- Linux 許可權管理之目錄許可權限制Linux
- 【LIUNX】目錄或檔案許可權,許可權授予
- 【自然框架】許可權的視訊演示(二):許可權到欄位、許可權到記錄框架
- 資料分析的許可權控制
- Solaris下控制ftp的許可權FTP
- 11gR1引入的新特性:可等待DDL操作
- MySQL的DDL和DML操作語法MySql
- logmnr挖掘中間有DDL的操作示例-對於執行DDL前的操作無法挖掘
- linux目錄的許可權Linux