Search

์‚ฌ์šฉ์ž ๊ถŒํ•œ

์‚ฌ์šฉ์ž ๊ถŒํ•œ

์ •์˜

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
๋ณต์‚ฌ