通過觸發器記錄資料庫連線資訊

Rangle發表於2018-04-11

最近在梳理資料庫程式連線資訊,這裡對指令碼做個總結,希望對需要的同仁有所幫助

一、Oracle連線資訊統計

create table logon_logs (logon_time date,
username varchar2(30),
machine varchar2(64),
ipaddr varchar2(30))
tablespace users; 


create or replace trigger logusersconnects
after logon on database 
begin
insert into logon_logs values(sysdate,
user,
sys_context('USERENV','HOST'),
sys_context('USERENV','IP_ADDRESS'));
commit;
end;
/ 

sys_context函式使用方法以及含義如下:

第一個引數為'USERENV',是固定的,第二個引數也是固定的,但是是多選固定,可選的值如下所示:

select sys_context('USERENV','AUTHENTICATION_TYPE') from dual;--使用者的認證型別
select sys_context('USERENV','AUTHENTICATION_DATA') from dual;--未知
select sys_context('USERENV','BG_JOB_ID') from dual;--當前指定id的會話是否為oracle後臺程式建立,不是則返回null
select sys_context('USERENV','CLIENT_INFO') from dual;--通過dbms_application_info包可以儲存高達64位元組的使用者會話資訊
select sys_context('USERENV','CURRENT_SCHEMA') from dual;--預設的schema將被當做當前的schema。當在當前會話中使用ALTER SESSION SET CURRENT_SCHEMA語句的時候,它的查詢返回值將被改變
select sys_context('USERENV','CURRENT_SCHEMAID') from dual;--當前schema的id
select sys_context('USERENV','CURRENT_USER') from dual;--當前的登陸使用者
select REPLACE(SUBSTR(sys_context('USERENV','HOST'),1,30),'\',':') from dual;--當前會話主機作業系統名
select sys_context('USERENV','CURRENT_USERID') from dual;--當前登陸的使用者的id
select sys_context('USERENV','DB_DOMAIN') from dual;--為資料庫的域指定初始化引數
select sys_context('USERENV','DB_NAME') from dual;--資料庫例項名
select sys_context('USERENV','ENTRYID') from dual;--可用的審計標示符。不能再分散式sql語句中使用此選項。使用USERENV關鍵字必須置AUDIT_TRAIL的初始化引數為真。
select sys_context('USERENV','EXTERNAL_NAME') from dual;--資料庫使用者的副檔名
select sys_context('USERENV','FG_JOB_ID') from dual;--返回作業id當此會話是客戶端程式建立。否則,返回null
select sys_context('USERENV','INSTANCE') from dual;--當前資料庫例項的標示id

select sys_context('USERENV','ISDBA') from dual;--當前使用者是否是以dba身份登入
select sys_context('USERENV','LANG') from dual;--iso對‘LANGUAGE’的簡稱,查詢的引數比“LANGUAGE”短
select sys_context('USERENV','LANGUAGE') from dual;--結果為當前資料庫使用的儲存語言,跟上面查詢意義一樣
select sys_context('USERENV','NETWORK_PROTOCOL') from dual;--用於通訊的網路協議
select sys_context('USERENV','NLS_CALENDAR') from dual;--當前會話使用的,格林尼治時間
select sys_context('USERENV','NLS_CURRENCY') from dual;--本地化的貨幣符,如人民幣為¥,美元符為$
select sys_context('USERENV','NLS_DATE_FORMAT') from dual;--當前使用的日期格式,一般中國為dd-mon-rr
select sys_context('USERENV','NLS_DATE_LANGUAGE') from dual;--表示日期的語言,如中文簡體SIMPLIFIED CHINESE

select sys_context('USERENV','NLS_TERRITORY') from dual;--資料庫伺服器所在區域,如中國CHINA
select sys_context('USERENV','OS_USER') from dual;--作業系統的使用者名稱
select sys_context('USERENV','PROXY_USER') from dual;--是否使用代理使用者。否返回null
select sys_context('USERENV','PROXY_USERID') from dual;--代理使用者id
select sys_context('USERENV','SESSION_USER') from dual;--當前認證的資料庫使用者名稱
select sys_context('USERENV','SESSION_USERID') from dual;--當前認證的資料庫使用者名稱id
select sys_context('USERENV','SESSIONID') from dual;--當前會話id
select sys_context('USERENV','TERMINAL') from dual;--作業系統使用者組
select sys_context('USERENV','IP_ADDRESS') from dual;--當前會話主機ip
select sys_context('USERENV','HOST') from dual;--當前會話主機作業系統名

二、SQLServer連線資訊統計

 

 

三、MySQL連線資訊統計

 

四、PG連線資訊統計

 

相關文章