時(shí)間:2024-02-05 11:03作者:下載吧人氣:29
在oracle中我們可以通過設(shè)置FAILED_LOGIN_ATTEMPTS來限制用戶密碼登錄錯(cuò)誤的次數(shù),但是在postgresql中是不支持這個(gè)功能的。盡管PostgreSQL支持event trigger,可是event局限于DDL,對于登錄登出事件是沒辦法使用event trigger的。
不過像登錄新建會話觸發(fā)某個(gè)事件這個(gè)需求可以通過hook實(shí)現(xiàn),不過該方法比較復(fù)雜,需要修改內(nèi)核代碼,在客戶端認(rèn)證中添加邏輯,判斷輸入密碼次數(shù)統(tǒng)計(jì)。這里推薦一種比較簡單的方法實(shí)現(xiàn)類似的功能。
這里我們要使用到session_exec這個(gè)插件,使用該插件會在登錄時(shí)執(zhí)行一個(gè)指定的function。
https://github.com/okbob/session_exec
下載解壓之后需要進(jìn)行以下配置:
該插件有以下特點(diǎn):
利用該插件我們可以寫一個(gè)簡單的函數(shù)來實(shí)現(xiàn)限制用戶登錄錯(cuò)誤次數(shù)的功能。
1、建立外部表記錄數(shù)據(jù)庫日志信息。
CREATE SERVER pglog FOREIGN DATA WRAPPER file_fdw;
CREATE FOREIGN TABLE pglog (
log_time timestamp(3) with time zone,
user_name text,
database_name text,
process_id integer,
connection_from text,
session_id text,
session_line_num bigint,
command_tag text,
session_start_time timestamp with time zone,
virtual_transaction_id text,
transaction_id bigint,
error_severity text,
sql_state_code text,
message text,
detail text,
hint text,
internal_query text,
internal_query_pos integer,
context text,
query text,
query_pos integer,
location text,
application_name text,
backend_type text
) SERVER pglog
OPTIONS ( program ‘find $PGDATA/log -type f -name “*.csv” -mtime -1 -exec cat {} ;’, format ‘csv’ );
網(wǎng)友評論