[๊ฐ์]
MySQL์ ์ฌ์ฉ์ ๊ณ์ ์ ๊ด๋ฆฌ ๋ฐฉ์์ด ๋ค๋ฅธ DBMS์ ์ฝ๊ฐ ์ฐจ์ด๊ฐ ์์ต๋๋ค ๋ง์ DBMS์์๋ ์์ด๋๋ก ์ฌ์ฉ์๋ฅผ ์๋ณํ์ง๋ง, MySQL์ ์ฌ์ฉ์ ์์ด๋ ์ธ์๋ ์ ์ํ๋ IP ์ฃผ์๋ฅผ ํจ๊ป ๊ณ ๋ คํ์ฌ ๋์ฑ ์ ๋ฐํ ์ ๊ทผ ์ ์ด๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ํ, MySQL 8.0 ๋ฒ์ ๋ถํฐ๋ '์ญํ (ROLE)'์ด๋ผ๋ ๊ฐ๋ ๋ ๋์ ๋์๊ณ , ์ด๋ฅผ ํตํด ๋ฏธ๋ฆฌ ์ ์๋ ๊ถํ ๊ทธ๋ฃน, ์ฆ 'Role'์ ์ฌ์ฉ์์๊ฒ ์ฝ๊ฒ ๋ถ์ฌํ ์ ์๊ฒ ๋์์ต๋๋ค.
[์ฌ์ฉ์ ์๋ณ]
๊ณ์ ๊ณผ ํธ์คํธ๋ช
๋๋ถ๋ถ์ DBMS๋ ๊ณ์ ์ด๋ฆ๋ง์ผ๋ก ์ฌ์ฉ์๋ฅผ ์๋ณํ์ง๋ง, MySQL์ ์ฌ์ฉ์์ ๊ณ์ ๊ณผ ์ ์ ์ง์ (ํด๋ผ์ด์ธํธ ํธ์คํธ๋ช , ๋๋ฉ์ธ, IP ์ฃผ์)์ ๋์์ ๊ณ ๋ คํฉ๋๋ค. ๋ฐ๋ผ์ MySQL ๊ณ์ ์ ์ธ๊ธํ ๋๋ ์๋์ ์์ฒ๋ผ ์์ด๋์ ํธ์คํธ ์ ๋ณด๋ฅผ ๋ช ์ํด์ผ ํฉ๋๋ค.
'svc_id'@'127.0.0.1'
์ ์์๋ 'svc_id' ๊ณ์ ์ด MySQL ์๋ฒ๊ฐ ๋์ ์ค์ธ ๋ก์ปฌ ํธ์คํธ์์๋ง ์ ์ํ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ๋ง์ฝ ๋ค๋ฅธ ์ปดํจํฐ์์ 'svc_id'๋ก ์ ์ํ๋ ค๊ณ ํ๋ค๋ฉด, ์ด ๊ณ์ ์ ๋ณด๋ก๋ ์ ์ํ ์ ์์ต๋๋ค.
์ธ๋ถ ์ ์์ ํ์ฉํ๋ ค๋ฉด ํธ์คํธ ๋ถ๋ถ์ %๋ก ๋์ฒดํด์ผ ํฉ๋๋ค. ์ด๋์ %๋ ๋ชจ๋ IP๋ ํธ์คํธ๋ช ์ ์๋ฏธํฉ๋๋ค.
์ค๋ณต๋ ๊ณ์ ๋ช ์ฃผ์
์ฌ์ฉ์ ๊ณ์ ์ ์๋ณํ ๋ ์ค์ํ ์ ์ด ์๋๋ฐ, ๋ฐ๋ก ๋์ผํ ์์ด๋๋ฅผ ๊ฐ์ง๋ ๊ฒฝ์ฐ์ ๋๋ค. MySQL ์๋ฒ๋ ๋์ผํ ์์ด๋๋ฅผ ๊ฐ์ง ์ฌ๋ฌ ๊ณ์ ์ด ์์ ๊ฒฝ์ฐ ๋ฌธ์ ๊ฐ ์๊ธฐ๋๋ฐ, MySQL์ ๋์ผํ ์์ด๋๋ฅผ ๊ฐ์ง๋ ์ ๋ณด๊ฐ ์์ ๋ ๋ฒ์๊ฐ ์ข์ ๊ณ์ ์ ์ ํํฉ๋๋ค.
'svc_id'@'192.168.0.10' -- ๋น๋ฐ๋ฒํธ: 123
'svc_id'@'%' -- ๋น๋ฐ๋ฒํธ: abc
์์ ๊ฐ์ ๊ณ์ ์ ๋ณด๊ฐ ์์ ๋, '192.168.0.10' IP๋ก ์ ์์ ์๋ํ๋ฉด, MySQL์ ๋ฒ์๊ฐ ์ข์ 'svc_id'@'192.168.0.10' ๊ณ์ ์ ์ฐ์ ์ธ์ฆํ๋ ค๊ณ ํฉ๋๋ค. ์ด ์ํฉ์์ 'svc_id' ๊ณ์ ์ผ๋ก 'abc' ๋น๋ฐ๋ฒํธ๋ก ๋ก๊ทธ์ธ์ ์๋ํ๋ฉด '๋น๋ฐ๋ฒํธ ๋ถ์ผ์น' ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ฒ ๋ฉ๋๋ค. ์ด์ฒ๋ผ ์ค์ฒฉ๋ ๊ณ์ ์ค์ ์ ์ฃผ์๊ฐ ํ์ํฉ๋๋ค.
[์ฌ์ฉ์ ๊ณ์ ๊ด๋ฆฌ]
์์คํ ๊ณ์ ๊ณผ ์ผ๋ฐ ๊ณ์
MySQL 8.0๋ถํฐ ๊ณ์ ์ 'SYSTEM_USER' ๊ถํ์ ์ ๋ฌด์ ๋ฐ๋ผ ์์คํ ๊ณ์ ๊ณผ ์ผ๋ฐ ๊ณ์ ์ผ๋ก ๋๋ฉ๋๋ค. ์์คํ ๊ณ์ ์ ์๋ฒ ๋ด๋ถ์ ์ธ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋์๋ ์ฐ๊ด์ด ์์ผ๋ฉฐ, ์ด ๊ณ์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ์์ฉ์ ๋๋ค. ๋ฐ๋ฉด ์ผ๋ฐ ๊ณ์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ฌ์ฉ์๋ ๊ฐ๋ฐ์๋ฅผ ์ํ ๊ฒ์ ๋๋ค.
์์คํ ๊ณ์ ์ ๋ชจ๋ ๊ณ์ ์ ๊ด๋ฆฌ ๊ถํ์ ๊ฐ์ง๋ฉฐ, ๋ค์๊ณผ ๊ฐ์ ์ค์ํ ๊ด๋ฆฌ ์์ ์ ์ํํ ์ ์์ต๋๋ค.
- ๊ณ์ ๊ด๋ฆฌ(๊ณ์ ์์ฑ, ์ญ์ ๋ฐ ๊ถํ ์ค์ )
- ๋ค๋ฅธ ์ธ์ ๋๋ ์ฟผ๋ฆฌ์ ๊ฐ์ ์ข ๋ฃ
- ์คํ ์ด๋ ํ๋ก๊ทธ๋จ ์์ฑ ์, ๋ค๋ฅธ ์ฌ์ฉ์๋ฅผ DEFINER๋ก ์ง์
์ด๋ฌํ ๊ตฌ๋ถ์ DBA ๊ณ์ ์๋ง 'SYSTEM_USER' ๊ถํ์ ๋ถ์ฌํ๊ณ ์ผ๋ฐ ์ฌ์ฉ์์๊ฒ๋ ๋ถ์ฌํ์ง ์๊ธฐ ์ํจ์ ๋๋ค.
๋ํ MySQL ์๋ฒ์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณต๋๋ ๋ค์๊ณผ ๊ฐ์ ๋ด์ฅ ๊ณ์ ๋ค์ด ์์ต๋๋ค. ๊ทธ์ค 'root'@'localhost'๋ฅผ ์ ์ธํ๋ฉด, ๋๋จธ์ง ๊ณ์ ๋ค์ ํน์ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋๋ฏ๋ก ์ญ์ ํ์ง ์์์ผ ํฉ๋๋ค.
- 'mysql.sys'@'localhost': MySQL 8.0๋ถํฐ ์ ๊ณต๋๋ฉฐ, sys ์คํค๋ง ๊ฐ์ฒด์ DEFINER๋ก ์ฌ์ฉ๋ฉ๋๋ค.
- 'mysql.session'@'localhost': MySQL ํ๋ฌ๊ทธ์ธ์ด ์ ๊ทผ์ฉ ๊ณ์ ์ ๋๋ค.
- 'mysql.infoschema'@'localhost': information_schema๋ทฐ์ DEFINER๋ก ์ฌ์ฉ๋ฉ๋๋ค.
์์ ์ธ๊ธํ 3๊ฐ์ ๊ณ์ ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ฒจ(account_locked ์นผ๋ผ) ์๋ ์ํ์ด๋ฏ๋ก ์๋์ ์ผ๋ก ์ ๊ธด ๊ณ์ ์ ํ์ง ์๋ ํ ์ ์์ ์ผ๋ก ์ฌ์ฉ๋ ๊ฑฑ์ ์ ํ์ง ์์๋ ๋ฉ๋๋ค.
๊ณ์ ์์ฑ
MySQL 5.7๊น์ง๋ 'GRANT' ๋ช ๋ น์ด๋ก ๊ถํ์ ๋ถ์ฌํ๋ฉด์ ๋์์ ๊ณ์ ์ ์์ฑํ ์ ์์์ง๋ง, MySQL 8.0๋ถํฐ๋ ๊ณ์ ์์ฑ์ ์ํ 'CREATE USER' ๋ช ๋ น๊ณผ ๊ถํ ๋ถ์ฌ๋ฅผ ์ํ 'GRANT' ๋ช ๋ น์ผ๋ก ๊ตฌ๋ถํ์ฌ ์คํํด์ผ ํฉ๋๋ค.
๊ณ์ ์์ฑ ์ ๋ค์๊ณผ ๊ฐ์ ์ต์ ์ ์ค์ ํ ์ ์์ต๋๋ค.
- ๊ณ์ ์ ์ธ์ฆ ๋ฐฉ์๊ณผ ๋น๋ฐ๋ฒํธ
- ๋น๋ฐ๋ฒํธ ๊ด๋ จ ์ต์ (๋น๋ฐ๋ฒํธ ์ ํจ ๊ธฐ๊ฐ, ๋น๋ฐ๋ฒํธ ์ด๋ ฅ ๊ฐ์, ๋น๋ฐ๋ฒํธ ์ฌ์ฌ์ฉ ๋ถ๊ฐ ์๊ฐ)
- ๊ธฐ๋ณธ ์ญํ (Role)
- SSL ์ต์
- ๊ณ์ ์ ๊ธ ์ฌ๋ถ
๋ค์์ ์ผ๋ฐ์ ์ผ๋ก ์์ฃผ ์ฌ์ฉ๋๋ 'CREATE USER' ๋ช ๋ น์ ์์์ ๋๋ค.
CREATE USER 'user'@'%'
IDENTIFIED WITH 'mysql_native_password' BY 'password'
REQUIRE NONE
PASSWORD EXPIRE INTERVAL 30 DAY
ACCOUNT UNLOCK
PASSWORD HISTORY DEFAULT
PASSWORD REUSE INTERVAL DEFAULT PASSWORD REQUIRE CURRENT DEFAULT;
์ ์์ ์ ๊ฐ ์ต์ ์ ํ๋์ฉ ์ดํด๋ด ์๋ค.
IDENTIFIED WITH
์ฌ์ฉ์์ ์ธ์ฆ ๋ฐฉ์๊ณผ ๋น๋ฐ๋ฒํธ๋ฅผ ์ค์ ํฉ๋๋ค. MySQL ์๋ฒ์์ ์ ๊ณตํ๋ ๋ค์ํ ์ธ์ฆ ๋ฐฉ์ ์ค ํ๋๋ฅผ ์ ํํ ์ ์๋๋ฐ, ์ฃผ์ ๋ฐฉ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- Native Pluggable Authentication: MySQL 5.7๊น์ง์ ๊ธฐ๋ณธ ๋ฐฉ์์ผ๋ก, SHA-1 ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํด ๋น๋ฐ๋ฒํธ ํด์๊ฐ์ ์ ์ฅํ๊ณ ์ธ์ฆํฉ๋๋ค.
- Cacging SHA-2 Pluggable Authentication: MySQL 8.0์ ๊ธฐ๋ณธ ์ธ์ฆ ๋ฐฉ์์ผ๋ก, ๋ณด์์ฑ์ด ๋์ SHA-2 ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํฉ๋๋ค. ์ด ๋ฐฉ์์ ํด์๊ฐ ๊ณ์ฐ์ ์๊ฐ์ด ๋ง์ด ์์๋๋ฏ๋ก, ์ต์ ํ๋ฅผ ์ํด ํด์๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ์บ์ฑํฉ๋๋ค.
- PAM pluggable Authentication: ์ ๋์ค๋ ๋ฆฌ๋ ์ค์ ํจ์ค์๋ ๋๋ LDAP๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์์ผ๋ก, MySQL ์ํฐํ๋ผ์ด์ฆ ์๋์ ์๋ง ์ ๊ณต๋ฉ๋๋ค.
- LDAP pluggable Authentication: LDAP ์ธ์ฆ์ ์ฌ์ฉํ๋ ๋ฐฉ์์ผ๋ก, MySQL ์ํฐํ๋ผ์ด์ฆ ์๋์ ์์๋ง ์ ๊ณต๋ฉ๋๋ค.
MySQL 5.7 ๋ฒ์ ๊น์ง๋ Native Authentication์ด ๊ธฐ๋ณธ ์ธ์ฆ ๋ฐฉ์์ผ๋ก ์ฌ์ฉ๋์ง๋ง MySQL. 8.0 ๋ฒ ์ ๋ถํฐ๋ Caching SHA-2 Authentication์ด ๊ธฐ๋ณธ ์ธ์ฆ์ผ๋ก ๋ฐ๋์์ต๋๋ค. ํ์ง๋ง ํธํ์ฑ ๋ฌธ์ ๋ก ์ธํด Native Authentication ๋ฐฉ์์ ๊ณ์ ์ฌ์ฉํ๋ ค๋ ๊ฒฝ์ฐ ์๋์ ๊ฐ์ด ์ค์ ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํฉ๋๋ค.
--// Native Authentication์ ๊ธฐ๋ณธ ์ธ์ฆ ๋ฐฉ์์ผ๋ก ์ค์
SET GLOBAL default_authentication_plugin="mysql_native_password";
์ฃผ์ ์ฌํญ
MySQL์ Caching SHA-2 Pluggable Authentication ๋ฐฉ์์ SCRAM ์ธ์ฆ์ ์ฌ์ฉํ๋ฉฐ, ์ด๋ ํ๋ฌธ ๋น๋ฐ๋ฒํธ๋ฅผ ์ฌ๋ฌ ๋ฒ ์ํธํํ์ฌ ๋ฌด์ฐจ๋ณ ๋์ ๊ณต๊ฒฉ์ ๋ฐฉ์งํฉ๋๋ค. ํ์ง๋ง ์ด๋ฌํ ๋ฐฉ์์ ์ผ๋ฐ์ ์ธ ์ฌ์ฉ์๋ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ฐ๊ฒฐ ์๋๋ฅผ ๋๋ฆฌ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค. SCRAM ์ธ์ฆ์ ํด์ ํจ์ ์คํ ํ์๋ 'sha2_password_digest_rounds' ๋ณ์๋ก ์ค์ ์ด ๊ฐ๋ฅํ๋ฉฐ, ๊ธฐ๋ณธ ๊ฐ์ 5000์ ๋๋ค.
REQUIRE
MySQL ์๋ฒ์ ์ ์ ์ SSL/TLS ์ํธํ ์ฑ๋์ ์ฌ์ฉ ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. ์ค์ ํ์ง ์์ผ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ๋น์ํธํ ์ฑ๋๋ก ์ฐ๊ฒฐ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ 'REQUIRE' ์ต์ ์ SSL๋ก ์ค์ ํ์ง ์๋๋ผ๋ Caching SHA-2 Authentication ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด MySQL ์๋ฒ ์ ์ ์ ์ํธํ ์ฑ๋๋ง ํ์ฉ๋ฉ๋๋ค.
PASSWORD EXPIRE
๋น๋ฐ๋ฒํธ์ ์ ํจ ๊ธฐ๊ฐ์ ์ค์ ํ๋ ์ต์ ์ด๋ฉฐ, ๋ณ๋๋ก ์ง์ ํ์ง ์์ผ๋ฉด default_password_lifetime ์์คํ ๋ณ์์ ์ ์ฅ๋ ๊ธฐ๊ฐ์ด ์ ์ฉ๋ฉ๋๋ค. ๋น๋ฐ๋ฒํธ ์ ํจ๊ธฐ๊ฐ ์ค์ ์ ๊ด๋ฆฌ์๋ ๊ฐ๋ฐ์ ๊ณ์ ์๋ ๊ถ์ฅ๋์ง๋ง, ์์ฉ ํ๋ก๊ทธ๋จ ๊ณ์ ์๋ ์ฃผ์๊ฐ ํ์ํฉ๋๋ค.
PASSWORD EXPIRE ์ ์ ์ค์ ๊ฐ๋ฅํ ์ต์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- PASSWORD EXPIRE: ๊ณ์ ์ ์์ฑํ ๋ ๋น๋ฐ๋ฒํธ ์ฆ์ ๋ง๋ฃ
- PASSWORD EXPIRE NEVER: ๋น๋ฐ๋ฒํธ ๋ง๋ฃ ์์
- PASSWORD EXPIRE DEFAULT: default_password_lifetime ์์คํ ๋ณ์์ ์ ์ฅ๋ ๊ธฐ๊ฐ์ผ๋ก ์ ํจ๊ธฐ๊ฐ ์ค์
- PASSWORD EXPIRE INTERVAL n DAY: ์ค๋๋ถํฐ n์ผ ํ ๋ง๋ฃ
PASSWORD HISTORY
ํ ๋ฒ ์ฌ์ฉํ๋ ๋น๋ฐ๋ฒํธ๋ฅผ ์ฌ์ฌ์ฉํ์ง ๋ชปํ๊ฒ ์ค์ ํ๋ ์ต์ ์ผ๋ก, PASSWORD HISTORY ์ ์ ์ค์ ๊ฐ๋ฅํ ์ต์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- PASSWORD HISTORY DEFAULT: ์์คํ ๋ฒ์์ ์ง์ ๋ ๊ฐ์๋งํผ์ ์ด์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ์ฅํ๋ฉฐ, ์ ์ฅ๋ ์ด๋ ฅ ์์ ๋น๋ฐ๋ฒํธ๋ ์ฌ์ฌ์ฉ ๋ถ๊ฐ
- PASSWORD HISTORY n: ์ต๊ทผ n๊ฐ์ ๋น๋ฐ๋ฒํธ๋ง ์ ์ฅํ๋ฉฐ, ์ ์ฅ๋ ๋น๋ฐ๋ฒํธ๋ ์ฌ์ฌ์ฉ ๋ถ๊ฐ
ํ ๋ฒ ์ฌ์ฉํ๋ ๋น๋ฐ๋ฒํธ๋ฅผ ์ฌ์ฉํ์ง ๋ชปํ๊ฒ ํ๋ ค๋ฉด ์ด์ ์ ์ฌ์ฉํ๋ ๋น๋ฐ๋ฒํธ๋ฅผ MySQL ์๋ฒ๊ฐ ๊ธฐ์ตํ๊ณ ์์ด์ผ ํ๋๋ฐ, ์ด๋ฅผ ์ํด MySQL ์๋ฒ๋ mysql DB์ password_history ํ ์ด๋ธ์ ์ฌ์ฉํฉ๋๋ค.
PASSWORD REUSE INTERVAL
ํ ๋ฒ ์ฌ์ฉํ๋ ๋น๋ฐ๋ฒํธ์ ์ฌ์ฌ์ฉ ๊ธ์ง ๊ธฐ๊ฐ์ ์ค์ ํ๋ ์ต์ ์ด๋ฉฐ, ๋ณ๋๋ก ๋ช ์ํ์ง ์์ผ๋ฉด password_reuse_interval ์์คํ ๋ณ์์ ์ ์ฅ๋ ๊ธฐ๊ฐ์ผ๋ก ์ค์ ๋ฉ๋๋ค. PASSWORD REUSE INTERVAL ์ ์ ์ค์ ๊ฐ๋ฅํ ์ต์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- PASSWORD REUSE INTERYAL DEFAULT: password_reuse_interval ๋ณ์์ ์ ์ฅ๋ ๊ธฐ๊ฐ์ผ๋ก ์ค์
- PASSWORD REUSE INTERVAL n DAY: n์ผ ์ดํ์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ฌ์ฌ์ฉํ ์ ์๊ฒ ์ค์
PASSWORD REQUIRE
๋น๋ฐ๋ฒํธ ๋ฐ๋ฃ ํ ๋ณ๊ฒฝ ์, ์ด์ ๋น๋ฐ๋ฒํธ์ ์ ๋ ฅ ์ฌ๋ถ๋ฅผ ์ค์ ํฉ๋๋ค. ๋ณ๋๋ก ๋ช ์๋์ง ์์ผ๋ฉด password_require_current ์์คํ ๋ณ์์ ๊ฐ์ผ๋ก ์ค์ ๋ฉ๋๋ค. PASSWORD REQUIRE ์ ์ ์ฌ์ฉ ๊ฐ๋ฅํ ์ต์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- PASSWORD REQUIRE CURRENT: ๋น๋ฐ๋ฒํธ๋ฅผ ๋ณ๊ฒฝํ ๋ ํ์ฌ ๋น๋ฐ๋ฒํธ๋ฅผ ๋จผ์ ์ ๋ ฅํ๋๋ก ์ค์
- PASSWORD REQUIRE OPTIONAL: ๋น๋ฐ๋ฒํธ๋ฅผ ๋ณ๊ฒฝํ ๋ ํ์ฌ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํ์ง ์์๋ ๋๋๋ก ์ค์
- PASSWORD REQUIRE DEFAULT: password_require_current ์์คํ ๋ณ์์ ๊ฐ์ผ๋ก ์ค์
ACCOUNT LOCK / UNLOCK
๊ณ์ ์์ฑ ์ ๋๋ ALTER USER ๋ช ๋ น์ ์ฌ์ฉํด ๊ณ์ ์ ๋ณด๋ฅผ ๋ณ๊ฒฝํ ๋ ๊ณ์ ์ ์ฌ์ฉํ์ง ๋ชปํ๊ฒ ์ ๊ธ์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.
- ACCOUNT LOCK: ๊ณ์ ์ ์ฌ์ฉํ์ง ๋ชปํ๊ฒ ์ ๊ธ
- ACCOUNT UNLOCK: ์ ๊ธด ๊ณ์ ์ ๋ค์ ์ฌ์ฉ ๊ฐ๋ฅ ์ํ๋ก ์ ๊ธ ํด์
[๋น๋ฐ๋ฒํธ ๊ด๋ฆฌ]
๊ณ ์์ค ๋น๋ฐ๋ฒํธ
MySQL์์๋ ๋น๋ฐ๋ฒํธ์ ์ ํจ๊ธฐ๊ฐ, ์ฌ์ฌ์ฉ ์ ํ, ๋ณต์ก์ฑ ๊ฒ์ฆ ๋ฑ ๋ค์ํ ๋ณด์ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ํนํ, ์ฌ์ฉ์๊ฐ ์์ํ๊ธฐ ์ฌ์ด ๋จ์ด๋ ํจํด์ ํฌํจํ๋ ๋น๋ฐ๋ฒํธ์ ์ฌ์ฉ์ ๋ฐฉ์งํ๋ ๊ธฐ๋ฅ์ด ์์ต๋๋ค. ์ด๋ฅผ ์ํด MySQL์ validate_password ์ปดํฌ๋ํธ๋ฅผ ์ ๊ณตํ๋๋ฐ, ์ด ์ปดํฌ๋ํธ๋ MySQL ์๋ฒ์ ๊ธฐ๋ณธ์ผ๋ก ํฌํจ๋์ด ์๊ธฐ ๋๋ฌธ์ ๋ณ๋์ ํ์ผ ๊ฒฝ๋ก ์ง์ ์์ด ๋ฐ๋ก ์ค์น๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
validate_password ์ปดํฌ๋ํธ ์ค์น
INSTALL COMPONENT 'file://component_validate_password';
์ปดํฌ๋ํธ ์ค์น ํ ํด๋น ์ปดํฌ๋ํธ์์ ์ ๊ณตํ๋ ์์คํ ๋ณ์๋ค์ ๋ค์๊ณผ ๊ฐ์ ๋ช ๋ น์ด๋ก ํ์ธํ ์ ์์ต๋๋ค.
SHOW VARIABLES LIKE 'validate_password%';
๋น๋ฐ๋ฒํธ ์ ์ฑ ์ ํฌ๊ฒ ๋ค์ 3๊ฐ์ง ์ค์์ ์ ํํ ์ ์์ผ๋ฉฐ, ๊ธฐ๋ณธ๊ฐ์ MEDIUM์ผ๋ก ์๋ ์ค์ ๋ฉ๋๋ค.
- LOW: ๋น๋ฐ๋ฒํธ์ ๊ธธ์ด๋ง ๊ฒ์ฆ
- MEDIUM: ๋น๋ฐ๋ฒํธ ๊ธธ์ด, ์ซ์, ๋์๋ฌธ์, ํน์๋ฌธ์ ํฌํจ ์ฌ๋ถ ๊ฒ์ฆ
- STRONG: MEDIUM์ผ ๋ชจ๋ ๊ฒ์ฆ์ ์ถ๊ฐ๋ก ๊ธ์น์ด ํฌํจ ์ฌ๋ถ๋ ๊ฒ์ฆ
validate_password.length๋ ๋น๋ฐ๋ฒํธ์ ๊ธธ์ด, validate_password.mixed_case_count์ validate_password.number_count, validate_password.special_char_count๋ ์ซ์์ ๋์๋ฌธ์, ํน์๋ฌธ์๋ฅผ ์ผ์ ์ ์ด์ ํฌํจํ๊ณ ์๋์ง ๊ฒ์ฆํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง์ผ๋ก ๊ธ์น์ด๋ validate_password.dictionary_file ์์คํ ๋ณ์์ ๊ธ์น์ด๋ค์ด ์ ์ฅ๋ ์ฌ์ ํ์ผ์ ๋ฑ๋กํ๋ฉด ๋ฉ๋๋ค.
๊ธ์น์ด ํ์ผ์ ๋ค์๊ณผ ๊ฐ์ด ๊ธ์น์ด๋ค์ ํ ์ค์ ํ๋์ฉ ๊ธฐ๋กํด์ ์ ์ฅํ ํ ์คํธ ํ์ผ๋ก ์์ฑํ๋ฉด ๋ฉ๋๋ค.
password
123456
admin
๊ธ์น์ด ํ์ผ์ ์์ฑํ ํ, ์ด๋ฅผ MySQL ์๋ฒ์ ์ ์ฉํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ค์ ํ๋ฉด ๋ฉ๋๋ค. ๋จ, ์ด ๊ธฐ๋ฅ์ validate_password.policy๊ฐ 'STRONG'์ผ ๋๋ง ์ ์ฉ๋ฉ๋๋ค.
SET GLOBAL validate_password.dictionary_file='/path/to/prohibitive_word.data';
SET GLOBAL validate_password.policy='STRONG';
์ด๋ ๊ฒ ์ค์ ํ๋ฉด MySQL์ ์ง์ ๋ ๊ธ์น์ด๋ฅผ ํฌํจํ๋ ๋น๋ฐ๋ฒํธ์ ์ฌ์ฉ์ ์ ํํ๊ฒ ๋ฉ๋๋ค.
์ด์ค ๋น๋ฐ๋ฒํธ
MySQL8.0๋ถํฐ๋ ๊ณ์ ์ ๋ณด์์ ๋์ฑ ๊ฐํํ๊ณ ์ ํ๋ ์๋๋ก ๋น๋ฐ๋ฒํธ๋ก 2๊ฐ์ ๊ฐ์ ๋์์ ์ฌ์ฉํ ์ ์๋ ๊ธฐ๋ฅ(DUAL ๋น๋ฐ๋ฒํธ)์ ์ถ๊ฐํ์ต๋๋ค. ์ด ๊ธฐ๋ฅ์ ํต์ฌ์ ํ๋์ ๊ณ์ ์ ๋ ๊ฐ์ ๋น๋ฐ๋ฒํธ๋ฅผ ํ ๋นํ๋ ๊ฒ์ด์ง๋ง, ์ด ๋ ๊ฐ์ ๋น๋ฐ๋ฒํธ ์ค ํ๋๋ง ๋ง๊ฒ ์ ๋ ฅํด๋ ๋ก๊ทธ์ธ์ด ๊ฐ๋ฅํฉ๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ฌ๋ฌ ์์ฉ ํ๋ก๊ทธ๋จ ์๋ฒ๋ค๊ณผ ๊ณต์ ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ์ด๋ก ์ธํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ณ์ ์ ๋ณด๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์ ๋ณต์กํ๊ฒ ๋ ์ ์์ต๋๋ค. ์ค์ ์๋น์ค ์ด์ ์ค์๋ ์ค์ํ ์๋น์ค์ ์ํฅ์ ์ค ์ ์๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ณ์ ์ ๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ์ด ๊ฑฐ์ ๋ถ๊ฐ๋ฅ์ ๊ฐ๊น์ต๋๋ค. ๋ฐ๋ผ์, ๋ง์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์๋ ์ด๊ธฐ ์ค์ ์ดํ ์ค๋ ์๊ฐ ๋์ ๋์ผํ ๋น๋ฐ๋ฒํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ํํ๋ฐ, ์ด๋ฌํ ๋ฐฐ๊ฒฝ์์ DUAL ๋น๋ฐ๋ฒํธ๋ ๋ณด์ ๊ฐํ์ ์ ์ฐํ ๊ณผ๋ฆฌ๋ฅผ ๋์์ ๊ฐ๋ฅํ๊ฒ ํด์ฃผ๋ ํด๊ฒฐ์ฑ ์ผ๋ก ์ ์๋์์ต๋๋ค.
์๋๋ ์ฌ์ฉ ์์์ ๋๋ค.
-- ๋จผ์ , 'user'์ ๋น๋ฐ๋ฒํธ๋ฅผ 'old_password'๋ก ๋ณ๊ฒฝํฉ๋๋ค.
ALTER USER 'user'@'%' IDENTIFIED BY 'old_password';
-- ์ด์ 'old_password'๋ ๊ทธ๋๋ก ์ ์งํ๋ฉด์ 'new_password'๋ฅผ ์ฃผ ๋น๋ฐ๋ฒํธ๋ก ์ถ๊ฐํฉ๋๋ค.
ALTER USER 'user'@'%' IDENTIFIED BY 'new_password' RETAIN CURRENT PASSWORD;
์ด๋ ๊ฒ ์ค์ ํ ํ์๋ 'old_password'์ 'new_password' ๋ชจ๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ก๊ทธ์ธ์ด ๊ฐ๋ฅํ๊ฒ ๋ฉ๋๋ค.
[๊ถํ(Privilege)]
MySQL์ ๊ถํ ๊ด๋ฆฌ๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ณด์์ ๊ฐํํ๋ฉฐ, ์ฌ์ฉ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ ํ ๊ถํ๋ง ๋ถ์ฌํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. MySQL 5.7 ๋ฒ์ ๊น์ง๋ ์ฃผ๋ก ๋ค์ ์ฃผ ์ข ๋ฅ์ ๊ถํ์ผ๋ก ๋๋์ด ์์์ต๋๋ค.
- ๊ฐ์ฒด ๊ถํ: ํน์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํ ์ด๋ธ์ ์ ์ฉ๋๋ ๊ถํ
- ๊ธ๋ก๋ฒ ๊ถํ: MySQL ์๋ฒ ์ ๋ฐ์ ์ ์ฉ๋๋ ๊ถํ์ผ๋ก, ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํ ์ด๋ธ ์ธ์ ๋ค๋ฅธ ์์์๋ ์ ์ฉ
MySQL 8.0 ๋ฒ์ ๋ถํฐ๋ ๋์ ๊ถํ์ด๋ผ๋ ์๋ก์ด ๊ถํ์ด ์ถ๊ฐ๋๋ฉด์, ์ด์ ๋ฒ์ ์ ๊ถํ๋ค์ ์ ์ ๊ถํ์ผ๋ก ๋ถ๋ฆฌ๊ฒ ๋์์ต๋๋ค. ๋์ ๊ถํ์ ์๋ฒ์ ํ๋ฌ๊ทธ์ธ์ด๋ ์ปดํฌ๋ํธ๊ฐ ์ค์น๋ ๋ ๋์ ์ผ๋ก ์ถ๊ฐํ ์ ์๋ ๊ถํ์ ๋๋ค.
๊ธ๋ก๋ฒ ๊ถํ ๋ถ์ฌํ๊ธฐ
๊ธ๋ก๋ฒ ๊ถํ์ ๋ถ์ฌํ๋ ค๋ฉด, ์๋์ ๊ฐ์ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ฉด ๋ฉ๋๋ค.
GRANT SUPER ON *.* TO 'user'@'%';
๊ทธ๋ฌ๋, ๊ธ๋ก๋ฒ ๊ถํ์ ๋ถ์ฌํ๋๋ผ๋ ํน์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํ ์ด๋ธ์ ์ ๊ทผํ๋ ๊ถํ์ ์๋์ผ๋ก ๋ถ์ฌ๋์ง ์๊ธฐ์ ์ ์ํด์ผ ํ๋ฉฐ, ๊ธ๋ก๋ฒ ๊ถํ์ ํน์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํ ์ด๋ธ์ ํ์ ๋์ด ์์ง ์๊ธฐ ๋๋ฌธ์ ํญ์ '*.*' ํ์์ผ๋ก ์์ฑํด์ผ ํฉ๋๋ค.
๊ถํ์ ํ์ธํ๋ ค๋ฉด, ํด๋น ๊ณ์ ์ ๋ํด ๋ค์๊ณผ ๊ฐ์ ์ฟผ๋ฆฌ๋ฅผ ์คํํ์ฌ ๋ถ์ฌ๋ ๊ถํ ๋ชฉ๋ก์ ํ์ธํ ์ ์์ต๋๋ค.
SHOW GRANTS FOR '๊ณ์ ์ด๋ฆ'@'ํธ์คํธ';
๊ถํ ๋ถ์ฌ ์ข ๋ฅ
-- ๋ชจ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ๊ถํ ๋ถ์ฌ
GRANT ALL PRIVILEGES ON *.* TO 'user'@'%';
-- ํน์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค๋ธ์ ํธ์ ๋ํด์๋ง ๊ถํ ๋ถ์ฌ
GRANT ALL PRIVILEGES ON mydb.* TO 'user'@'%';
-- ํน์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํน์ ํ
์ด๋ธ์ ๋ํด์๋ง ๊ถํ ๋ถ์ฌ
GRANT SELECT, INSERT ON mydb.mytable TO 'user'@'%';
๋ค๋ง, ํ ์ด๋ธ์ด๋ ์นผ๋ผ ๋จ์์ ๊ถํ์ ์ ์ฌ์ฉํ์ง ์๋๋ฐ, ์นผ๋ผ ๋จ์์ ๊ถํ์ด ํ๋๋ผ๋ ์ค์ ๋๋ฉด ๋๋จธ์ง ๋ชจ๋ ํ ์ด๋ธ์ ๋ชจ๋ ์นผ๋ผ์ ๋ํด์๋ ๊ถํ ์ฒดํฌ๋ฅผ ํ๊ธฐ ๋๋ฌธ์ ์นผ๋ผ ํ๋์ ๋ํด์๋ง ๊ถํ์ ์ค์ ํ๋๋ผ๋ ์ ์ฒด์ ์ธ ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
[์ญํ (Role)]
MySQL8.0๋ถํฐ๋ ๊ถํ ๊ด๋ฆฌ๋ฅผ ๋ณด๋ค ํจ๊ณผ์ ์ผ๋ก ์ํํ๊ธฐ ์ํด ์ญํ (Role) ๊ธฐ๋ฅ์ด ๋์ ๋์์ต๋๋ค. ์ญํ ์ ์ด๋ฆ๋ง์ผ๋ก๋ ๊ณ์ ๊ณผ ๊ตฌ๋ณ๋์ง๋ง, ๋ด๋ถ์ ์ผ๋ก๋ ๊ณ์ ๊ณผ ๋์ผํ๊ฒ ์๋ํฉ๋๋ค.
์ญํ ์์ฑ
์ญํ ์ ์์ฑํ๊ธฐ ์ํด์๋ 'CREATE ROLE' ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค.
CREATE ROLE role_testdb_read, role_testdb_write;
์ญํ ์ ๊ถํ ๋ถ์ฌ
์์ฑ๋ ์ญํ ์ ๊ถํ์ ๋ถ์ฌํ๋ ค๋ฉด ์๋์ ๊ฐ์ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค.
GRANT SELECT ON testdb.* TO role_testdb_read;
GRANT INSERT, UPDATE, DELETE ON testdb.* TO role_testdb_write;
์ฌ์ฉ์ ๊ณ์ ์์ฑ
๋ค์์ผ๋ก ์ด ์ญํ ์ ์ฌ์ฉํ ๊ณ์ ์ ์์ฑํฉ๋๋ค.
CREATE USER reader@'%' IDENTIFIED BY '12345678';
CREATE USER writer@'%' IDENTIFIED BY '12345678';
๊ณ์ ์ ์ญํ ๋ถ์ฌ
์์ฑํ ๊ณ์ ์ ์ญํ ์ ๋ถ์ฌํฉ๋๋ค.
GRANT role_testdb_read TO reader@'%';
GRANT role_testdb_read, role_testdb_write TO writer@'%';
์ญํ ํ์ฑํ
'SELECT current_role();'๋ฅผ ์ฌ์ฉํ์ฌ ํ์ฌ ํ์ฑํ๋ ์ญํ ์ ํ์ธํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ธฐ์๋ ์ญํ ์ด ํ์ฑํ๋์ง ์์ ์ํ์ด๊ธฐ ๋๋ฌธ์ 'SET ROLE' ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ญํ ์ ํ์ฑํํด์ผ ํฉ๋๋ค.
SET ROLE 'role_testdb_read';
์ญํ ์๋ ํ์ฑํ
๋งค๋ฒ ์ญํ ์ ์๋์ผ๋ก ํ์ฑํํ๋ ๊ฒ์ ๋ฒ๊ฑฐ๋ก์ธ ์ ์์ต๋๋ค. MySQL์ ์ด๋ฅผ ์๋ํํ๊ธฐ ์ํ ์์คํ ๋ณ์๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ค์๊ณผ ๊ฐ์ด activate_all_roles_on_login ์์คํ ๋ณ์๊ฐ ON์ผ๋ก ์ค์ ๋๋ฉด ๋งค๋ฒ SET ROLE ๋ช ๋ น์ผ๋ก ์ญํ ์ ํ์ฑํํ์ง ์์๋ ๋ก๊ทธ์ธ๊ณผ ๋์์ ๋ถ์ฌ๋ ์ญํ ์ด ์๋์ผ๋ก ํ์ฑํ๋ฉ๋๋ค.
SET GLOBAL activate_all_roles_on_login=ON;
์ญํ ๊ณผ ๊ณ์ ์ ๊ด๊ณ
์ด์ ์ ๋งํ๋ฏ์ด, MySQL ์๋ฒ์์์ '์ญํ '๊ณผ '์ฌ์ฉ์ ๊ณ์ '์ ๋ง์ ์ ์ฌ์ ์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ์ค์ ๋ก MySQL ์๋ฒ ๋ด๋ถ์์๋ ๋์ ๋์ผํ ๊ฐ์ฒด๋ก ๊ฐ์ฃผํฉ๋๋ค. ์ด๋ฌํ ์ฃผ๋ชฉ์ ์ ์ฌ์ฉ์ ๊ณ์ ์ ๋ค๋ฅธ ์ฌ์ฉ์ ๊ณ์ ์ด ๊ฐ์ง ๊ถํ์ ํจ์จ์ ์ผ๋ก ๋ณํฉํ๊ธฐ ์ํจ์ ๋๋ค.
๊ณ์ (User)
- ๋ก๊ทธ์ธ์ด ๊ฐ๋ฅํ ๊ฐ์ฒด
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ ์ด๋ธ์ ์ง์ ์ ์ธ ๊ถํ์ ๊ฐ์ง ์ ์๋ค.
์ญํ (Role)
- ๋ก๊ทธ์ธ์ด ๋ถ๊ฐ๋ฅํ๋ค.
- ๊ถํ์ ๋ฌถ์ด์ ๊ด๋ฆฌํ๋ ๋จ์์ด๋ค.
- ๊ณ์ ์๊ฒ ๋ถ์ฌ๋ ์ ์๋ค.
์ค์ ๋ก ์๋์ ๋ช ๋ น์ด๋ฅผ ์คํํ๋ฉด MySQL์ ์ ์ฅ๋ ๊ณ์ ์ ๋ชจ๋ ์กฐํํ ์ ์์ต๋๋ค.
SELECT user,host,account_locked from mysql.user;
์ ๋ช ๋ น์ด๋ฅผ ์คํํ๋ฉด, ์ญํ ๊ณผ ๊ณ์ ์ด ๋ชจ๋ 'user' ํ ์ด๋ธ์์ ๊ด๋ฆฌ๋๊ณ ์์์ ํ์ธํ ์ ์์ต๋๋ค.
๊ณ์ ์ ์ญํ ์ ๋ถ์ฌํ๋ ๊ณผ์ ์ ๊ทผ๋ณธ์ ์ผ๋ก ํ๋์ ์ฌ์ฉ์๊ฐ ๊ฐ์ง ๊ถํ์ ๋ค๋ฅธ ์ฌ์ฉ์์ ๊ถํ ์งํฉ์ ํตํฉํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋๋ฌธ์ 'CREATE ROLE' ๋ช ๋ น์ด์์ ํธ์คํธ ์ ๋ณด๊ฐ ์๋ต๋์ด ์์ผ๋ฉฐ, ์ค์ ๋ก ์ด๋ ๋ชจ๋ ํธ์คํธ('%')์ ๋ํด ์์์ ์ผ๋ก ์ ์ฉํ๋ค๋ ์๋ฏธ๊ฐ ๋ฉ๋๋ค.
๊ทธ๋ ๋ค๋ฉด, ์ 'CREATE ROLE'๊ณผ 'CREATE USER'๋ฅผ ๊ตฌ๋ถํด์ผ ํ ๊น์?
๋จ์ํ ๋งํ๋ฉด, 'CREATE ROLE'์ ๊ณ์ ์ ์์ฑํ๋ ๊ฒ์ด ์๋๋ผ ๊ถํ์ ์งํฉ(์ญํ )์ ์ ์ํ๋ ๋ช ๋ น์ด๊ธฐ ๋๋ฌธ์ ๋๋ค. 'account_locked' ์ปฌ๋ผ์ด 'Y'๋ก ์ค์ ๋ ์ญํ ์ ๋ก๊ทธ์ธ์ด ๋ถ๊ฐ๋ฅํ์ง๋ง, 'CREATE USER'๋ก ์์ฑ๋ ๊ณ์ ์ ๋ก๊ทธ์ธ์ด ๊ฐ๋ฅํฉ๋๋ค.
๋ ๊น๋ํ๊ฒ ์ญํ ๊ด๊ณ๋ฅผ ํ์ธํ๋ ค๋ฉด, ๋ค์์ ํ ์ด๋ธ์ ์ฐธ์กฐํ๋ฉด ๋ฉ๋๋ค.
- mysql.default_roles: ๊ฐ ๊ณ์ ์ ๋ถ์ฌ๋ ๊ธฐ๋ณธ ์ญํ ์ ๋ํ๋ธ๋ค.
- mysql.role_edges: ๋ถ์ฌ๋ ์ญํ ๊ฐ์ ๊ด๊ณ๋ฅผ ํํํ๋ ๊ทธ๋ํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ค.
์ฐธ๊ณ
'BackEnd๐ฑ > DB & SQL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Docker MySQL] Orchestrator๋ฅผ ์ด์ฉํ High Availability(HA) ๊ตฌ์ถํ๊ธฐ (6) | 2023.11.06 |
---|---|
[Docker MySQL] Master-Slave Replication(๋ณต์ ) ๊ตฌ์ถํ๊ธฐ (0) | 2023.11.01 |
[MySQL] MVCC๋ฅผ ํตํ ์ ๊ธ์๋ ์ฝ๊ธฐ (7) | 2023.10.07 |
MySQL์์ VARCHAR์ TEXT์ ์ฐจ์ด (1) | 2023.09.17 |
Redis์ ๋ฐ์ดํฐ ํ์ , ๋ช ๋ น์ด์ ํ์ฉ ์ฌ๋ก (0) | 2023.09.05 |
์ค๋ฌด์์ Redisson์ ์ฐ๊ฒฐํ๋ฉด์ ๊ฒช์ ๋ฌธ์ ์ ๋ค (2) | 2023.08.18 |
๋๊ธ