DBMS: PostgreSQL 14.9 |
postgres계정처럼 superuser의 login 권한을 제거하였을 경우 접속이 불가한 경우 해결하는 방법입니다
싱글모드로 접속하여 postgres 계정에 grant 문을 통한 권한 부여로 복구합니다
[목차여기]
postgres 계정 권한 제거
superuser인 postgres 계정의 login 권한을 제거한 후 테스트 시 접속 실패합니다
-- postgres(super user)로그인 권한 제거
postgres=# alter user postgres nologin ;
ALTER ROLE
postgres=# \du
List of roles
Role name | Attributes | Member of
-------------+--------------------------------------------------------------------------+----------------------------------
postgres | Superuser, Create role, Create DB, Cannot login, Replication, Bypass RLS | {}
sk | | {}
postgres=# exit
-- DB 접속 실패
[postgres@svr1 ~]$ psql
psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL: role "postgres" is not permitted to log in
[postgres@svr1 ~]$
single 모드 접속 후 권한부여
기존 postgres 엔진이 살아있을 경우 에러가 발생하니 종료 후 진행해 주세요
-- single 모드 접속(postgres 명령 주의)
-- 기존 postgres 엔진 살아있으면 에러발생
[postgres@svr1 pg_data]$ postgres --single
2024-01-26 18:41:33.711 KST [824491] FATAL: lock file "postmaster.pid" already exists
2024-01-26 18:41:33.711 KST [824491] HINT: Is another postmaster (PID 824441) running in data directory "/pg_data"?
-- DB STOP
[postgres@svr1 pg_data]$ pg_ctl stop
waiting for server to shut down.... done
server stopped
[postgres@svr1 pg_data]$ ps -ef | grep -i postgres
postgres 824534 816668 0 18:41 pts/0 00:00:00 grep --color=auto -i postgres
반응형
DB중지 후 single 모드 접속하여 postgres계정에 login 권한 부여 후 접속 테스트
싱글모드접속 명령: postgres --single
-- single 모드 접속
[postgres@svr1 pg_data]$ postgres --single
PostgreSQL stand-alone backend 14.9
backend> select * from pg_roles ;
1: rolname = "postgres" (typeid = 19, len = 64, typmod = -1, byval = f)
2: rolsuper = "t" (typeid = 16, len = 1, typmod = -1, byval = t)
3: rolinherit = "t" (typeid = 16, len = 1, typmod = -1, byval = t)
4: rolcreaterole = "t" (typeid = 16, len = 1, typmod = -1, byval = t)
5: rolcreatedb = "t" (typeid = 16, len = 1, typmod = -1, byval = t)
6: rolcanlogin = "f" (typeid = 16, len = 1, typmod = -1, byval = t)
7: rolreplication = "t" (typeid = 16, len = 1, typmod = -1, byval = t)
8: rolconnlimit = "-1" (typeid = 23, len = 4, typmod = -1, byval = t)
9: rolpassword = "********" (typeid = 25, len = -1, typmod = -1, byval = f)
11: rolbypassrls = "t" (typeid = 16, len = 1, typmod = -1, byval = t)
13: oid = "10" (typeid = 26, len = 4, typmod = -1, byval = t)
----
-- postgres 계정 로그인 권한 부여
backend> alter user postgres login ;
-- 종료시는 (Control+D)
backend> [postgres@svr1 pg_data]$
-- DB 기동
[postgres@svr1 pg_data]$ pg_ctl start
waiting for server to start....2024-01-26 18:43:46.434 KST [824916] LOG: redirecting log output to logging collector process
2024-01-26 18:43:46.434 KST [824916] HINT: Future log output will appear in directory "/pg_logs".
done
server started
-- 접속 테스트
[postgres@svr1 pg_data]$ psql
psql (14.9)
Type "help" for help.
postgres=# select count(*) from pg_tables ;
count
-------
71
(1 row)
postgres=#
'DBMS > PostgreSQL' 카테고리의 다른 글
[PostgreSQL] dead tuple 모니터링 시 주의(vacuum full) (0) | 2024.04.21 |
---|---|
[PostgreSQL] ERROR: current transaction is aborted 에러 해결 법 (0) | 2024.04.07 |
[PostgreSQL] pg_dump 파일에서 테이블명 변경하여 복구 (0) | 2024.03.12 |
[PostgreSQL] WAL 경로 변경하는법 (0) | 2024.03.07 |
[PostgreSQL] auto_explain 사용/미사용 성능 테스트 (0) | 2024.02.29 |
댓글