PostgreSQL Security
보안에 있어서 Client Authentication과 Database Role, Data 암호화는 중요한 역할을 한다.
1. Client Authentication
참고 : https://www.postgresql.org/docs/10/auth-methods.html
2. Role 부여 및 Public에 대한 Role 회수
3. Data 암호화
암호화 관련 함수를 사용하기 위해 pgcrypto 암호화 모듈을 설치한다.
CREATE EXTENSION pgcrypto; |
pgcrypto 모듈의 function 중 Password Hashing Functions, Raw Encryption Functions 에 대한 설명이다.
1) Password Hashing Functions
crypt() 및 gen_salt() 함수는 Password Hashing을 위해 특별히 설계되었으며, 아래와 같이 사용할 수 있다.
SELECT CRYPT('암호화할 문자열', gen_salt('암호화방식')); |
pgcrypto를 이용하여 MD5 방식으로 암호화 및 확인하는 방법이다.
INSERT INTO t_crypt (user_id, user_pw) VALUES (1, CRYPT('password01', gen_salt('md5'))), (2, CRYPT('password02', gen_salt('md5')));
SELECT * FROM t_crypt WHERE user_pw = CRYPT('password01', user_pw); |
* Supported Algorithms for crypt()
Algorithm | Max Password Length | Adaptive | Salt Bits | Output Length | Description |
bf | 72 | yes | 128 | 60 | Blowfish-based, variant 2a |
md5 | unlimited | no | 48 | 24 | MD5-based crypt |
xdes | 8 | yes | 24 | 20 | Extended DES |
des | 8 | no | 12 | 13 | Original UNIX crypt |
[참고]
# \df crypt
# \df gen_salt |
2) Raw Encryption Functions
* encrypt/decrypt : 암호화/복호화
* conver_to/conver_from : 문자열 변환/복원
SELECT encrypt ('Hello World', 'my key', 'aes'); SELECT decrypt ('\xe3d6d1ddea318dbf88e34421fd095727', 'my key' , 'aes'); -- 문자열 변환 SELECT convert_from('\x48656c6c6f20576f726c64', 'utf-8'); |
[참고]
# \df encrypt
# \df decrypt |