์ฌ์ฉ์ ๊ถํ
์ ์
MySQL์์ ์ฌ์ฉ์ ๊ถํ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ทธ ๊ฐ์ฒด๋ค์ ๋ํ ์ ๊ทผ ๋ฐ ์กฐ์ ๊ถํ์ ๊ด๋ฆฌํ๋ ์์คํ
์
๋๋ค.
๊ตฌ์ฑ ์์
โข
USER
โข
ROLE
USER
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์๋ณ๋๋ ๊ฐ๋ณ ์ฌ์ฉ์ ๊ณ์ ์ผ๋ก, ํน์ ๊ถํ์ด ๋ถ์ฌ๋ ์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ฉ์์
๋๋ค.
ํญ๋ชฉ | ์ค๋ช
|
์ฌ์ฉ์ ์์ฑ | CREATE USER 'username'@'host' IDENTIFIED BY 'password'; |
์ฌ์ฉ์ ์ญ์ | DROP USER 'username'@'host'; |
๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ | ALTER USER 'username'@'host' IDENTIFIED BY 'new_password'; |
๊ถํ ๋ถ์ฌ | GRANT SELECT, INSERT ON db.table TO 'username'@'host'; |
๊ถํ ์ฒ ํ | REVOKE SELECT ON db.table FROM 'username'@'host'; |
๊ถํ ๋ณด๊ธฐ | SHOW GRANTS FOR 'username'@'host'; |
์ฌ์ฉ์ ๋ชฉ๋ก ๋ณด๊ธฐ | SELECT user, host FROM mysql.user; |
ROLE
์ฌ๋ฌ ๊ถํ์ ๊ทธ๋ฃนํํ ๋
ผ๋ฆฌ์ ๋จ์๋ก, ๋ค์์ ์ฌ์ฉ์์๊ฒ ๋์ผํ ๊ถํ์ ํจ์จ์ ์ผ๋ก ๋ถ์ฌํ ์ ์๊ฒ ํฉ๋๋ค.
ํญ๋ชฉ | ์ค๋ช
|
์ญํ ์์ฑ | CREATE ROLE 'rolename'; |
์ญํ ์ญ์ | DROP ROLE 'rolename'; |
์ญํ ์ ๊ถํ ๋ถ์ฌ | GRANT SELECT ON db.* TO 'rolename'; |
์ญํ ์ ์ฌ์ฉ์์๊ฒ ๋ถ์ฌ | GRANT 'rolename' TO 'username'@'host'; |
์ญํ ํ์ฑํ | SET DEFAULT ROLE 'rolename' TO 'username'@'host'; |
ํ์ฌ ์ธ์
์ ์ญํ ํ์ฑํ | SET ROLE 'rolename'; |
์ญํ ๋ณด๊ธฐ | SELECT * FROM information_schema.applicable_roles; |
์ญํ ๊ถํ ๋ณด๊ธฐ | SHOW GRANTS FOR 'rolename'; |
๊ตฌ๋ถ | ์ฌ์ฉ์(User) | ์ญํ (Role) |
์ ์ ๋์ | DB ์ ์ ๋ฐ ์์
์ ์ํํ๋ ๊ฐ๋ณ ๊ณ์ | ๊ณตํต๋ ๊ถํ์ ๊ทธ๋ฃนํํ ๊ฐ์์ ๊ณ์ |
์ง์ ๋ก๊ทธ์ธ | ๊ฐ๋ฅ | ๋ถ๊ฐ๋ฅ |
๊ถํ ๋ถ์ฌ | ์ง์ ๊ถํ ์ง์ ๊ฐ๋ฅ | ๊ถํ ๋ฌถ์์ ์ฌ์ฉ์์๊ฒ ํ ๋น ๊ฐ๋ฅ |
ํ์ฉ ์์ | ํน์ ์ง์์๊ฒ ์ง์ ๊ถํ ๋ถ์ฌ | ์ฌ๋ฌ ์ง์์๊ฒ ๋์ผํ ๊ถํ์ ์ผ๊ด ๋ถ์ฌํ ๋ |
ํน์ง
โข
์ธ๋ถํ๋ ๊ถํ ๊ด๋ฆฌ: ๋ฐ์ดํฐ๋ฒ ์ด์ค, ํ
์ด๋ธ, ์ปฌ๋ผ ๋จ์๋ก ๊ถํ ๋ถ์ฌ ๊ฐ๋ฅ
โข
๊ถํ ์์: ROLE์ ํตํด ๊ถํ์ ๊ณ์ธต์ ์ผ๋ก ๊ด๋ฆฌ
โข
๋์ ๊ถํ ๊ด๋ฆฌ: ์ค์๊ฐ์ผ๋ก ๊ถํ ๋ถ์ฌ ๋ฐ ์ฒ ํ ๊ฐ๋ฅ
โข
๋ณด์์ฑ: ์ต์ ๊ถํ ์์น์ ๋ฐ๋ฅธ ์ ๊ทผ ์ ์ด ๊ตฌํ
USER ์ข ๋ฅ
์ ํ | ์ค๋ช
| ์ ๊ทผ ๋ฒ์ |
๋ก์ปฌ ์ฌ์ฉ์ | localhost์์๋ง ์ ์ ๊ฐ๋ฅํ ์ฌ์ฉ์ | 'username'@'localhost' |
์๊ฒฉ ์ฌ์ฉ์ | ํน์ IP์์ ์ ์ ๊ฐ๋ฅํ ์ฌ์ฉ์ | 'username'@'192.168.1.%' |
์์ผ๋์นด๋ ์ฌ์ฉ์ | ๋ชจ๋ ํธ์คํธ์์ ์ ์ ๊ฐ๋ฅํ ์ฌ์ฉ์ | 'username'@'%' |
ํจํด ๋งค์นญ ์ฌ์ฉ์ | ํน์ ํจํด์ ํธ์คํธ์์ ์ ์ ๊ฐ๋ฅํ ์ฌ์ฉ์ | 'username'@'%.domain.com' |
ROLE ์ข ๋ฅ
์ญํ ์ด๋ฆ | ์ค๋ช
| ๋ถ์ฌ ๊ถํ ์์ |
read_only | ์ฝ๊ธฐ ์ ์ฉ ์ฌ์ฉ์ | SELECT ๊ถํ |
data_writer | ๋ฐ์ดํฐ ์ฐ๊ธฐ ์ฌ์ฉ์ | INSERT, UPDATE, DELETE ๊ถํ |
admin | ๊ด๋ฆฌ์, ์ ์ฒด ๊ถํ ๋ณด์ | ALL PRIVILEGES ๋๋ ๋ชจ๋ ๊ถํ (SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, ๋ฑ) |
backup_user | ๋ฐ์ดํฐ ๋ฐฑ์
์ ์ฉ ์ฌ์ฉ์ | SELECT, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER ๋ฑ |
developer | ๊ฐ๋ฐ์, ๊ฐ์ฒด ์์ฑ ๊ฐ๋ฅ | SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER |
auditor | ๊ฐ์ฌ/๋ชจ๋ํฐ๋ง ์ ์ฉ ์ฌ์ฉ์ | SELECT, SHOW DATABASES, PROCESS |
๊ถํ ์ข ๋ฅ
๊ถํ ์ด๋ฆ | ์ค๋ช
|
ALL PRIVILEGES | ํด๋น ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋๋ ์๋ฒ์ ๋ถ์ฌ ๊ฐ๋ฅํ ๋ชจ๋ ๊ถํ์ ์๋ฏธํจ |
LOCK TABLES | ํ
์ด๋ธ์ ์ ๊ทธ๋ ๊ถํ. ๋ฐฑ์
์ ๋ฐ์ดํฐ ์ ํฉ์ฑ ํ๋ณด์ ํ์ฉ๋จ |
SHOW DATABASES | ์๋ฒ ๋ด ๋ชจ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ชฉ๋ก์ ์กฐํํ ์ ์๋ ๊ถํ |
PROCESS | ํ์ฌ ์คํ ์ค์ธ ์ฟผ๋ฆฌ ๋ฐ ํ๋ก์ธ์ค ๋ชฉ๋ก์ ์กฐํํ ์ ์๋ ๊ถํ |
EVENT | ์ด๋ฒคํธ ์ค์ผ์ค๋ฌ์ ๋ฑ๋ก๋ ์ด๋ฒคํธ๋ฅผ ์์ฑ/์์ /์ญ์ ํ ์ ์๋ ๊ถํ |
TRIGGER | ํ
์ด๋ธ์ ์ ์๋ ํธ๋ฆฌ๊ฑฐ๋ฅผ ์์ฑ/์ญ์ /์กฐํ/์คํํ ์ ์๋ ๊ถํ |
์ฝ๋
์ฌ์ฉ์ ์์ฑ ๋ฐ ๊ถํ ๋ถ์ฌ
-- ์ฌ์ฉ์ ์์ฑ
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
-- ํน์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ๋ชจ๋ ๊ถํ ๋ถ์ฌ
GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'host';
-- ํน์ ํ
์ด๋ธ์ ๋ํ ์ฝ๊ธฐ ๊ถํ๋ง ๋ถ์ฌ
GRANT SELECT ON database_name.table_name TO 'username'@'host';
SQL
๋ณต์ฌ
๊ถํ ์์
-- ์ถ๊ฐ ๊ถํ ๋ถ์ฌ
GRANT INSERT, UPDATE ON database_name.table_name TO 'username'@'host';
-- ๊ถํ ์ฒ ํ
REVOKE INSERT ON database_name.table_name FROM 'username'@'host';
SQL
๋ณต์ฌ
์ฌ์ฉ์ ์ญ์
-- ์ฌ์ฉ์ ์ญ์
DROP USER 'username'@'host';
-- ๋ชจ๋ ๊ถํ ์ฒ ํ
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'username'@'host';
SQL
๋ณต์ฌ
ROLE ๊ด๋ฆฌ
-- ROLE ์์ฑ
CREATE ROLE 'role_name';
-- ROLE์ ๊ถํ ๋ถ์ฌ
GRANT SELECT, INSERT ON database_name.* TO 'role_name';
-- ์ฌ์ฉ์์๊ฒ ROLE ๋ถ์ฌ
GRANT 'role_name' TO 'username'@'host';
SQL
๋ณต์ฌ
-- ์ญํ ์์ฑ
CREATE ROLE 'read_only';
CREATE ROLE 'data_writer';
CREATE ROLE 'admin';
-- ๊ถํ ๋ถ์ฌ
GRANT SELECT ON mydb.* TO 'read_only';
GRANT INSERT, UPDATE, DELETE ON mydb.* TO 'data_writer';
GRANT ALL PRIVILEGES ON *.* TO 'admin' WITH GRANT OPTION;
-- ์ฌ์ฉ์์๊ฒ ์ญํ ๋ถ์ฌ
GRANT 'read_only' TO 'user1';
GRANT 'data_writer' TO 'user2';
GRANT 'admin' TO 'admin_user';
-- ๊ธฐ๋ณธ ์ญํ ์ค์
SET DEFAULT ROLE 'read_only' TO 'user1';
SQL
๋ณต์ฌ