ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

๋ฐ˜์‘ํ˜•

๐Ÿ“Œ PostgreSQL๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ: ์ด๋ก ๊ณผ ์‹ค์Šต

3.2 PostgreSQL ๋ณด์•ˆ ๋ฐ ์ ‘๊ทผ ์ œ์–ด

PostgreSQL์„ ์•ˆ์ „ํ•˜๊ฒŒ ์šด์˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์‚ฌ์šฉ์ž ์ ‘๊ทผ ์ œ์–ด, ์ธ์ฆ ๋ฐฉ์‹ ์„ค์ •, ๋ฐ์ดํ„ฐ ์•”ํ˜ธํ™” ๋“ฑ ๋‹ค์–‘ํ•œ ๋ณด์•ˆ ๊ธฐ๋Šฅ์„ ์ดํ•ดํ•˜๊ณ  ์ ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์ด๋ฒˆ ๊ธ€์—์„œ๋Š” PostgreSQL์˜ ๋ณด์•ˆ ๊ฐœ๋…๊ณผ ์ฃผ์š” ์„ค์ • ๋ฐฉ๋ฒ•์„ ๋‹ค๋ฃจ๊ฒ ์Šต๋‹ˆ๋‹ค.


3.2.1 PostgreSQL ๋ณด์•ˆ ๊ฐœ์š”

PostgreSQL์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐ•๋ ฅํ•œ ๋ณด์•ˆ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋ฉฐ,
โœ… ์‚ฌ์šฉ์ž ์ธ์ฆ(Authentication)
โœ… ๊ถŒํ•œ ๊ด€๋ฆฌ(Role & Privileges)
โœ… ๋ฐ์ดํ„ฐ ์•”ํ˜ธํ™”(Encryption)
โœ… ๋„คํŠธ์›Œํฌ ๋ณด์•ˆ(SSL/TLS)
โœ… ๋กœ๊ทธ ๋ฐ ๊ฐ์‚ฌ ๊ธฐ๋Šฅ(Logging & Auditing)

๋“ฑ์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ๋ณดํ˜ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


3.2.2 PostgreSQL ์‚ฌ์šฉ์ž ๋ฐ ์—ญํ• (Role) ๊ด€๋ฆฌ

๋ฐ˜์‘ํ˜•

PostgreSQL์—์„œ๋Š” ์‚ฌ์šฉ์ž๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด Role(์—ญํ• ) ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
โœ… CREATE ROLE์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ์‚ฌ์šฉ์ž๋ฅผ ์ƒ์„ฑ
โœ… GRANT ๋ช…๋ น์–ด๋กœ ํŠน์ • ๊ถŒํ•œ์„ ๋ถ€์—ฌ
โœ… REVOKE ๋ช…๋ น์–ด๋กœ ๊ถŒํ•œ ์ œ๊ฑฐ

๐Ÿ”น ์‚ฌ์šฉ์ž(Role) ์ƒ์„ฑํ•˜๊ธฐ

CREATE ROLE db_user WITH LOGIN PASSWORD 'securepassword';

โœ… WITH LOGIN → ๋กœ๊ทธ์ธ ๊ฐ€๋Šฅํ•œ ์‚ฌ์šฉ์ž ์ƒ์„ฑ
โœ… PASSWORD → ๋ณด์•ˆ ๊ฐ•ํ™”๋ฅผ ์œ„ํ•ด ๊ฐ•๋ ฅํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ ์‚ฌ์šฉ


๐Ÿ”น ์‚ฌ์šฉ์ž(Role)์— ํŠน์ • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘๊ทผ ๊ถŒํ•œ ๋ถ€์—ฌ

GRANT CONNECT ON DATABASE mydb TO db_user;

โœ… mydb ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘์† ๊ถŒํ•œ๋งŒ ๋ถ€์—ฌ

GRANT ALL PRIVILEGES ON DATABASE mydb TO db_user;

โœ… mydb ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ชจ๋“  ๊ถŒํ•œ ๋ถ€์—ฌ


๐Ÿ”น ํ…Œ์ด๋ธ” ๋ฐ ๊ฐœ๋ณ„ ๊ถŒํ•œ ๋ถ€์—ฌ

GRANT SELECT, INSERT, UPDATE ON users TO db_user;

โœ… users ํ…Œ์ด๋ธ”์— ์ฝ๊ธฐ(SELECT), ์‚ฝ์ž…(INSERT), ์ˆ˜์ •(UPDATE) ๊ถŒํ•œ ๋ถ€์—ฌ

REVOKE INSERT ON users FROM db_user;

โœ… db_user์˜ INSERT ๊ถŒํ•œ ์ œ๊ฑฐ


3.2.3 PostgreSQL ์ธ์ฆ ๋ฐฉ์‹ ์„ค์ • (pg_hba.conf)

PostgreSQL์€ ์‚ฌ์šฉ์ž ์ธ์ฆ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด pg_hba.conf (Host-Based Authentication) ์„ค์ • ํŒŒ์ผ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

sudo nano /etc/postgresql/17/main/pg_hba.conf

โœ… ํŒŒ์ผ ์œ„์น˜๋Š” OS ๋ฐ PostgreSQL ๋ฒ„์ „์— ๋”ฐ๋ผ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Œ


๐Ÿ”น pg_hba.conf ์„ค์ • ํ˜•์‹

# TYPE  DATABASE  USER  ADDRESS       METHOD
local   all       all                 md5
host    all       all   192.168.1.0/24 scram-sha-256
host    all       all   127.0.0.1/32   trust

๐Ÿ”น ์ฃผ์š” ์ธ์ฆ ๋ฐฉ์‹ ์„ค๋ช…

์ธ์ฆ ๋ฐฉ์‹ ์„ค๋ช…

trust ์ธ์ฆ ์—†์ด ๋กœ๊ทธ์ธ ํ—ˆ์šฉ (๋น„์ถ”์ฒœ)
md5 ๋น„๋ฐ€๋ฒˆํ˜ธ ๊ธฐ๋ฐ˜ ์ธ์ฆ (SHA-256 ๋ฏธ์ง€์›)
scram-sha-256 ๋ณด์•ˆ์ด ๊ฐ•ํ™”๋œ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ธ์ฆ (๊ถŒ์žฅ)
peer OS ๊ณ„์ •๊ณผ PostgreSQL ๊ณ„์ •์ด ๋™์ผํ•˜๋ฉด ์ธ์ฆ ์ƒ๋žต
ldap LDAP ์„œ๋ฒ„๋ฅผ ์ด์šฉํ•œ ์™ธ๋ถ€ ์ธ์ฆ
cert SSL/TLS ์ธ์ฆ์„œ ๊ธฐ๋ฐ˜ ์ธ์ฆ

๐Ÿ’ก ์šด์˜ ํ™˜๊ฒฝ์—์„œ๋Š” scram-sha-256 ๋˜๋Š” cert ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค.


3.2.4 PostgreSQL ๋ฐ์ดํ„ฐ ์•”ํ˜ธํ™” ๋ฐ ๋ณด์•ˆ ์„ค์ •

๐Ÿ”น ๋น„๋ฐ€๋ฒˆํ˜ธ ์•”ํ˜ธํ™” ์„ค์ • (scram-sha-256)

PostgreSQL 10๋ถ€ํ„ฐ scram-sha-256 ์ธ์ฆ ๋ฐฉ์‹์ด ๊ธฐ๋ณธ ์ง€์›๋ฉ๋‹ˆ๋‹ค.
postgresql.conf์—์„œ ๋น„๋ฐ€๋ฒˆํ˜ธ ์•”ํ˜ธํ™” ๋ฐฉ์‹์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

password_encryption = scram-sha-256

โœ… ๊ธฐ์กด ์‚ฌ์šฉ์ž ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์•”ํ˜ธํ™” ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ

ALTER ROLE db_user WITH ENCRYPTED PASSWORD 'securepassword';

๐Ÿ”น SSL/TLS๋ฅผ ์ด์šฉํ•œ ๋„คํŠธ์›Œํฌ ์•”ํ˜ธํ™”

PostgreSQL์€ ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ์„ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•ด SSL/TLS ์•”ํ˜ธํ™”๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
postgresql.conf์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด SSL์„ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ssl = on
ssl_cert_file = '/etc/postgresql/server.crt'
ssl_key_file = '/etc/postgresql/server.key'

โœ… SSL์„ ํ™œ์„ฑํ™”ํ•˜๊ณ  ์ธ์ฆ์„œ(server.crt) ๋ฐ ๊ฐœ์ธ ํ‚ค(server.key) ์ง€์ •


3.2.5 PostgreSQL ๋กœ๊ทธ ๋ฐ ๊ฐ์‚ฌ(Auditing) ์„ค์ •

PostgreSQL์—์„œ๋Š” ๋ณด์•ˆ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ๊ฐ์‚ฌ ๋กœ๊ทธ(Audit Log) ๋ฅผ ์„ค์ •ํ•˜์—ฌ ๋น„์ •์ƒ์ ์ธ ์ ‘๊ทผ์„ ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ”น PostgreSQL ๋กœ๊ทธ ํ™œ์„ฑํ™” (postgresql.conf)

logging_collector = on
log_directory = 'pg_log'
log_filename = 'postgresql-%Y-%m-%d.log'
log_statement = 'all'

โœ… ๋ชจ๋“  SQL ์ฟผ๋ฆฌ๋ฅผ ๊ธฐ๋ก (log_statement = 'all')

๐Ÿ”น ํ™•์žฅ ๋ชจ๋“ˆ pgAudit ์‚ฌ์šฉ (๊ณ ๊ธ‰ ๊ฐ์‚ฌ ๋กœ๊น…)

PostgreSQL์˜ pgAudit ํ™•์žฅ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋” ์ •๋ฐ€ํ•œ ๋ณด์•ˆ ๋กœ๊ทธ๋ฅผ ๋‚จ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

CREATE EXTENSION pgaudit;
ALTER SYSTEM SET pgaudit.log = 'all';

โœ… pgAudit๋ฅผ ํ™œ์„ฑํ™”ํ•˜์—ฌ ๋ชจ๋“  SQL ํ™œ๋™์„ ๋กœ๊น…


3.2.6 PostgreSQL ๋ณด์•ˆ ์ฒดํฌ๋ฆฌ์ŠคํŠธ

์šด์˜ ํ™˜๊ฒฝ์—์„œ PostgreSQL์„ ์•ˆ์ „ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋ณด์•ˆ ์ฒดํฌ๋ฆฌ์ŠคํŠธ๋ฅผ ํ™œ์šฉํ•˜์„ธ์š”.

โœ… ์ตœ์‹  PostgreSQL ๋ฒ„์ „ ์‚ฌ์šฉ (SELECT version(); ๋กœ ํ™•์ธ)
โœ… scram-sha-256 ๋˜๋Š” SSL ์ธ์ฆ ๋ฐฉ์‹ ์‚ฌ์šฉ (pg_hba.conf ์„ค์ • ํ™•์ธ)
โœ… ๊ธฐ๋ณธ postgres ์‚ฌ์šฉ์ž ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ
โœ… pgAudit๋ฅผ ํ™œ์„ฑํ™”ํ•˜์—ฌ ๊ฐ์‚ฌ ๋กœ๊ทธ ๊ธฐ๋ก
โœ… ๋ถˆํ•„์š”ํ•œ ์ ‘๊ทผ ์ฐจ๋‹จ (pg_hba.conf์—์„œ ์ ‘๊ทผ IP ์ œํ•œ)
โœ… ์ •๊ธฐ์ ์ธ ๋ฐฑ์—… ๋ฐ ๋ณด์•ˆ ์—…๋ฐ์ดํŠธ ์ˆ˜ํ–‰


3.2.7 ๊ฒฐ๋ก : PostgreSQL ๋ณด์•ˆ ์ตœ์ ํ™” ์ „๋žต

โœ… ์‚ฌ์šฉ์ž(Role) ๊ด€๋ฆฌ๋ฅผ ํ†ตํ•ด ์ตœ์†Œ ๊ถŒํ•œ ์›์น™ ์ ์šฉ
โœ… ๊ฐ•๋ ฅํ•œ ์ธ์ฆ ๋ฐฉ์‹(scram-sha-256, SSL/TLS) ์„ ํ™œ์šฉํ•˜์—ฌ ๋ณด์•ˆ ๊ฐ•ํ™”
โœ… ๋ฐ์ดํ„ฐ ์•”ํ˜ธํ™” ๋ฐ ๋„คํŠธ์›Œํฌ ๋ณด์•ˆ ์„ค์ • ํ•„์ˆ˜
โœ… ๋กœ๊ทธ ๋ฐ ๊ฐ์‚ฌ(Auditing) ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜์—ฌ ์ด์ƒ ์ง•ํ›„ ๊ฐ์ง€
โœ… ๋ณด์•ˆ ์—…๋ฐ์ดํŠธ ๋ฐ ํŒจ์น˜ ์ ์šฉ์„ ์ •๊ธฐ์ ์œผ๋กœ ์ˆ˜ํ–‰

์ด์ œ PostgreSQL์˜ ๋ณด์•ˆ ๋ฐ ์ ‘๊ทผ ์ œ์–ด์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ๊ฐœ๋…์„ ์ตํ˜”์Šต๋‹ˆ๋‹ค!
๋‹ค์Œ ๊ธ€์—์„œ๋Š” PostgreSQL ์„ฑ๋Šฅ ์ตœ์ ํ™” ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ๋‹ค๋ฃจ๊ฒ ์Šต๋‹ˆ๋‹ค. ๐Ÿš€


๐Ÿ”Ž ๋‹ค์Œ ๊ธ€ ์˜ˆ๊ณ : PostgreSQL ์„ฑ๋Šฅ ์ตœ์ ํ™” ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง

๐Ÿ“Œ ๋‹ค์Œ ํŽธ: 3.3 PostgreSQL ์„ฑ๋Šฅ ์ตœ์ ํ™” ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง


์ด์ œ PostgreSQL์˜ ๋ณด์•ˆ ๋ฐ ์ ‘๊ทผ ์ œ์–ด์— ๋Œ€ํ•œ ๊ธ€์ด ์™„์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค!
๋‹ค์Œ ๊ธ€์—์„œ๋Š” PostgreSQL ์„ฑ๋Šฅ ์ตœ์ ํ™” ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ๋‹ค๋ฃจ๊ฒ ์Šต๋‹ˆ๋‹ค. ๐Ÿš€๐Ÿ˜Š

๋ฐ˜์‘ํ˜•
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
ยซ   2025/03   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
๊ธ€ ๋ณด๊ด€ํ•จ
๋ฐ˜์‘ํ˜•