๐Ÿ“DB/๐Ÿฌ MySQL

[Mysql] ์‚ฌ์šฉ์ž์ƒ์„ฑ ๋ฐ ๊ถŒํ•œ

yujch 2024. 8. 16. 04:24
๋ฐ˜์‘ํ˜•
  • Mysql์˜ ์‚ฌ์šฉ์ž๋Š” ์‚ฌ์šฉ์ž์˜ ๊ณ„์ •๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์‚ฌ์šฉ์ž์˜ ์ ‘์†์ฃผ์†Œ๊นŒ์ง€ ๊ณ„์ •์˜ ์ผ๋ถ€๊ฐ€ ๋œ๋‹ค.
  • Mysql์—์„œ ๊ณ„์ •์„ ์–ธ๊ธ‰ํ•  ๋•Œ๋Š” ํ•ญ์ƒ ์•„์ด๋””์™€ ํ˜ธ์ŠคํŠธ๋ฅผ ํ•จ๊ป˜ ๋ช…์‹œํ•ด์•ผํ•œ๋‹ค.
  • % ๋ฌธ์ž๋Š” ๋ชจ๋“  ํ˜ธ์ŠคํŠธ๋ช…์„ ์˜๋ฏธํ•œ๋‹ค.

์˜ˆ์‹œ1 ) 'test_id'@'127.0.0.1'

์˜ˆ์‹œ2) 'test_id'@'%'

 


 

๊ณ„์ •

# ๋ชจ๋“  ๊ณ„์ • ํ™•์ธํ•˜๊ธฐ
SELECT user, host FROM mysql.user;

# mysql ๊ธฐ๋ณธ ๋‚ด์žฅ ๊ณ„์ • ํ™•์ธํ•˜๊ธฐ
SELECT user, host FROM mysql.user WHERE user LIKE 'mysql.%';

 

# ์‚ฌ์šฉ์ž ์ƒ์„ฑ
CREATE USER '{์œ ์ €๋ช…}'@'%' IDENTIFIED BY '{๋น„๋ฐ€๋ฒˆํ˜ธ}';

# ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ
ALTER USER '{์œ ์ €๋ช…}'@'%' IDENTIFIED BY '{์ƒˆ๋กœ์šด ๋น„๋ฐ€๋ฒˆํ˜ธ}';

 

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ณ„์ •์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ์ฃผ๊ธฐ์ ์œผ๋กœ ๋ณ€๊ฒฝํ•ด์ฃผ๋Š” ๊ฒƒ์ด ๋ณด์•ˆ์— ์ข‹๋‹ค.
  • ์ด๋ฏธ Mysql์„ ์—ฐ๋™ํ•ด์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ์„œ๋น„์Šค๊ฐ€ ์žˆ๋‹ค๋ฉด, ์„œ๋น„์Šค๋ฅผ ๋ฉˆ์ถ”์ง€ ์•Š๊ณ ์„œ๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ์ผ์ด๋‹ค. ์ด ๊ฐ™์€ ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด '์ด์ค‘ ๋น„๋ฐ€๋ฒˆํ˜ธ'๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ด์ค‘ ๋น„๋ฐ€๋ฒˆํ˜ธ : ํ•˜๋‚˜์˜ ๊ณ„์ •์— 2๊ฐœ์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋™์‹œ์— ์„ค์ •ํ•˜์—ฌ ๋‘˜ ์ค‘ ์•„๋ฌด๊ฑฐ๋‚˜ ์ž…๋ ฅํ•ด๋„ ๋กœ๊ทธ์ธ์ด ๋จ

๋ฐฉ๋ฒ•

  1. ์ด์ค‘ ๋น„๋ฐ€๋ฒˆํ˜ธ ์„ค์ • (์ƒˆ๋กญ๊ฒŒ ์„ค์ •ํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ํ”„๋ผ์ด๋จธ๋ฆฌ ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ๋˜๊ณ , ๊ธฐ์กด ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์„ธ์ปจ๋”๋ฆฌ ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ๋จ)
  2. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์—ฐ๊ฒฐ๋œ ์„œ๋น„์Šค์˜ ์„ค์ • ํŒŒ์ผ์—์„œ ์ƒˆ๋กœ์šด ๋น„๋ฐ€๋ฒˆํ˜ธ๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  ๋ฐฐํฌ ๋ฐ ์žฌ์‹œ์ž‘
  3. ์„œ๋น„์Šค์˜ ์žฌ์‹œ์ž‘์ด ์™„๋ฃŒ๋˜๋ฉด ์„ธ์ปจ๋”๋ฆฌ ๋น„๋ฐ€๋ฒˆํ˜ธ ์‚ญ์ œ
# ์ด์ค‘ ๋น„๋ฐ€๋ฒˆํ˜ธ ์„ค์ •
ALTER USER '{์œ ์ €๋ช…}'@'%' IDENTIFIED BY '{์ƒˆ๋กœ์šด ๋น„๋ฐ€๋ฒˆํ˜ธ}' RETAIN CURRENT PASSWORD;

# ์„ธ์ปจ๋”๋ฆฌ ๋น„๋ฐ€๋ฒˆํ˜ธ ์‚ญ์ œ
ALTER USER '{์œ ์ €๋ช…}'@'%' DISCARD OLD PASSWORD;

 


 

๊ถŒํ•œ

  • ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•  ๋•Œ๋Š” 'GRANT' ๋ช…๋ น์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • 'TO' ํ‚ค์›Œ๋“œ ๋’ค์—๋Š” ๊ถˆํ•œ์„ ๋ถ€์—ฌํ•  ๋Œ€์ƒ ์‚ฌ์šฉ์ž๋ฅผ ๋ช…์‹œํ•œ๋‹ค.
  • 'ON' ํ‚ค์›Œ๋“œ ๋’ค์—๋Š” ์–ด๋–ค DB์˜ ์–ด๋–ค ์˜ค๋ธŒ์ ํŠธ์— ๊ถŒํ•œ์„ ๋ถ€์—ฌํ• ์ง€ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ธ€๋กœ๋ฒŒ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•  ๋•Œ๋Š” ON ๋’ค์— *.*์„ ์‚ฌ์šฉํ•œ๋‹ค. (Mysql ์„œ๋ฒ„ ์ „์ฒด๋ฅผ ์˜๋ฏธํ•จ)
# ์˜ˆ์‹œ
GRANT EVENT ON *.* TO 'user'@'localhost';

GRANT SELECT, INSERT, UPDATE, DELETE ON employees.* TO 'user'@'localhost';

GRANT SELECT, INSERT, UPDATE(dept_name), DELETE ON employees.department TO 'user'@'localhost';
# ๊ณ„์ •์— ๋ถ€์—ฌ๋œ ์—ญํ•  ๋˜”๋А ๊ถŒํ•œ ๋ณด๊ธฐ
SHOW GRANTS;

 

์—ญํ• 

# ์—ญํ•  ์ƒ์„ฑ
CREATE ROLE
	role_emp_read,
	role_emp_write;
    
# ์—ญํ• ์— ๊ถŒํ•œ ๋ถ€์—ฌ
GRANT SELET ON employees.* TO role_emp_read;
GRANT INSERT, UPDATE, DELETE ON employees.* TO role_emp_write;

# ์‚ฌ์šฉ์ž์—๊ฒŒ ์—ญํ•  ๋ถ€์—ฌ
GRANT role_emp_read, role_emp_write TO 'emp_writer'@'127.0.0.1';

# ์—ญํ•  ํ™œ์„ฑํ™”
SET ROLE 'role_emp_read';
  • ์‚ฌ์šฉ์ž์—๊ฒŒ ์—ญํ• ์„ ๋ถ€์—ฌํ•œ ๋’ค ์—ญํ• ์„ ํ™œ์„ฑํ™”ํ•ด์•ผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.
    • activate_all_roles_on_login์ด OFF๋กœ ๋˜์–ด์žˆ๋‹ค๋ฉด, ๊ณ„์ •์ด ๋กœ๊ทธ์•„์›ƒ๋๋‹ค๊ฐ€ ์žฌ๋กœ๊ทธ์ธํ•˜๋ฉด ์—ญํ• ์ด ๋น„ํ™œ์„ฑํ™” ์ƒํƒœ๋กœ ์ดˆ๊ธฐํ™”๋˜์–ด ๋ฒ„๋ฆฐ๋‹ค.
#๋กœ๊ทธ์ธ์‹œ ์—ญํ•  ํ™œ์„ฑํ™”ํ•˜๊ธฐ
SET GLOBAL activate_all_roles_on_login=ON;
๋ฐ˜์‘ํ˜•
๋Œ“๊ธ€์ˆ˜0