Postgresql 사용자 로그인 오류 횟수를 제한하는 실례 코드
4882 단어 Postgresql사용자로그인오류 횟수
그러나 새 세션에 로그인하여 어떤 이벤트를 촉발하는 것과 같은 수요는 훅을 통해 실현할 수 있지만 이 방법은 비교적 복잡하기 때문에 내부 코드를 수정하고 클라이언트 인증에 논리를 추가하여 입력 암호 횟수 통계를 판단해야 한다.여기에 비슷한 기능을 실현하는 비교적 간단한 방법을 추천한다.
여기 저희가 세션에 사용할 거예요_이 플러그인을 사용하면 로그인할 때 지정한 기능을 실행합니다.
다운로드 주소:
https://github.com/okbob/session_exec
압축 해제를 다운로드하려면 다음 구성이 필요합니다.
예:
1. 외부 테이블을 만들어 데이터베이스 로그 정보를 기록한다.
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' );
2, 테이블 만들기 t_login에서 데이터베이스 로그의 로그인 정보를 추출합니다.
create table t_login
(
login_time timestamp(3) with time zone -- ,
user_name text,
flag int -- ,0
);
로그인 정보를 삽입하려면 다음과 같이 하십시오.
bill=# insert into t_login select log_time,user_name from pglog where command_tag='authentication' and error_severity= 'FATAL'
bill-# ;
INSERT 0 4
3. 로그인 실행 function 만들기
create or replace function lock_user() returns void as $$
declare
res text;
c1 timestamp(3) with time zone;
begin
select login_time from t_login where flag = 0 order by login_time desc limit 1 into c1; --
insert into t_login select log_time,user_name from pglog where command_tag='authentication' and error_severity= 'FATAL' and log_time > c1; -- t_login
update t_login set flag = 1 where login_time > c1;
for res in select user_name from t_login where flag = 1 group by user_name having count(*) >=3 -- 3, 3
loop
EXECUTE format('alter user %I nologin',res); --
EXECUTE 'select pg_terminate_backend(pid) from pg_stat_activity where usename=$1' using res; --
raise notice 'Account % is locked!',res;
end loop;
end;
$$ language plpgsql strict;
4. postgresql를 편집합니다.conf 파일, 로그인 함수 설정
session_preload_libraries='session_exec'
session_exec.login_name='lock_user'
5. 테스트아날로그 test1 사용자 로그인 오류가 3회 이상:
bill=# select * from t_login;
login_time | user_name | flag
----------------------------+-----------+------
2020-08-26 07:26:45.42+08 | test1 | 1
2020-08-26 07:26:50.179+08 | test1 | 1
2020-08-26 07:26:52.487+08 | test1 | 1
2020-08-26 07:26:54.537+08 | test1 | 1
(4 rows)
test1 사용자가 로그인할 때 연결할 수 없습니다
pg13@cnndr4pptliot-> psql bill test1
Password for user test1:
NOTICE: c1 = <NULL>
psql: error: could not connect to server: FATAL: terminating connection due to administrator command
CONTEXT: SQL statement "select pg_terminate_backend(pid) from pg_stat_activity where usename=$1"
PL/pgSQL function lock_user() line 13 at EXECUTE
다시 로그인하면 사용자가 잠겼다는 메시지가 표시됩니다.
pg13@cnndr4pptliot-> psql bill test1
Password for user test1:
psql: error: could not connect to server: FATAL: role "test1" is not permitted to log in
6. 사용자 잠금 해제사용자를 잠금 해제하려면 다음을 수행해야 합니다.
bill=# alter user test1 login;
ALTER ROLE
그리고 주의해야 할 것은 t_를login에서 만료된 데이터 수정.
bill=# update t_login set flag = 0;
UPDATE 4
참조 링크:https://github.com/okbob/session_exec
이 글은 Postgresql에서 사용자의 로그인 오류 횟수를 제한하는 것에 대해 소개합니다. 더 많은 Postgresql에서 사용자의 로그인 오류 횟수를 제한하는 내용은 저희 이전의 글을 검색하거나 아래의 관련 글을 계속 보십시오. 앞으로 많은 응원 부탁드립니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Postgresql 사용자 로그인 오류 횟수를 제한하는 실례 코드oracle에서 FAILED_ 를 설정할 수 있습니다.LOGIN_ATTEMPTS는 사용자 비밀번호의 로그인 오류 횟수를 제한하지만postgresql에서는 이 기능을 지원하지 않습니다.PostgreSQL은 이벤트 트리...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.