π DCL (Data Control Language, λ°μ΄ν° μ μ΄μ΄)
- *DCL (λ°μ΄ν° μ μ΄μ΄)λ **λ°μ΄ν°λ² μ΄μ€μ 보μ, μ¬μ©μ κ΄λ¦¬, κΆν λΆμ¬ λ° νμ λ±μ λ΄λΉνλ SQL λͺ λ Ήμ΄μ λλ€.
λ°μ΄ν°μ 무결μ±μ μ μ§νκ³ , λΆλ²μ μΈ μ κ·Όμ λ°©μ§νλ μν μ ν©λλ€.
β DCLμ μ£Όμ λͺ λ Ήμ΄
λͺ λ Ήμ΄ | μ€λͺ |
---|---|
GRANT |
νΉμ μ¬μ©μμκ² κΆν λΆμ¬ |
REVOKE |
νΉμ μ¬μ©μμ κΆν νμ |
CREATE USER |
μλ‘μ΄ μ¬μ©μ μμ± |
DROP USER |
κΈ°μ‘΄ μ¬μ©μ μμ |
SHOW GRANTS |
μ¬μ©μμ νμ¬ κΆν νμΈ |
π· 5-1. μ¬μ©μ μμ± (CREATE USER)
β MariaDBμμ μλ‘μ΄ λ°μ΄ν°λ² μ΄μ€ μ¬μ©μλ₯Ό μμ±νλ λ°©λ²
CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'password123';
π new_user
μ¬μ©μλ₯Ό λ‘컬(localhost
)μμ μ μ κ°λ₯νλλ‘ μμ±νκ³ , λΉλ°λ²νΈλ₯Ό password123
μΌλ‘ μ€μ .
β λͺ¨λ IPμμ μ μ κ°λ₯νλλ‘ μ¬μ©μ μμ±
β λΉλ°λ²νΈ μ μ± κ°ν
CREATE USER 'secure_user'@'localhost'
IDENTIFIED BY 'StrongP@ssw0rd!'
PASSWORD EXPIRE INTERVAL 90 DAY;
π λΉλ°λ²νΈ λ§λ£ κΈ°κ°μ μ€μ νμ¬ λ³΄μ κ°νλ₯Ό μΆμ²ν¨.
CREATE USER 'remote_user'@'%' IDENTIFIED BY 'securePass!';
π %
λ λͺ¨λ IPμμ μ μ κ°λ₯νλλ‘ νμ©νλ μμΌλμΉ΄λ.
π 보μμ μνν μ μμΌλ―λ‘ μ μ€νκ² μ¬μ©ν΄μΌ ν¨.
π· 5-2. μ¬μ©μ κΆν λΆμ¬ (GRANT)
β
μ¬μ©μμκ² νΉμ κΆνμ λΆμ¬νλ GRANT
λ¬Έ
GRANT SELECT, INSERT, UPDATE ON company_db.* TO 'new_user'@'localhost';
π μ¬μ©μ new_user
μκ² company_db
λ°μ΄ν°λ² μ΄μ€μ λͺ¨λ ν
μ΄λΈμμ SELECT
, INSERT
, UPDATE
κΆνμ λΆμ¬.
β λͺ¨λ κΆνμ λΆμ¬ (κ΄λ¦¬μ κ³μ )
GRANT ALL PRIVILEGES ON *.* TO 'admin_user'@'localhost' WITH GRANT OPTION;
π admin_user
κ° λͺ¨λ λ°μ΄ν°λ² μ΄μ€μ ν
μ΄λΈμμ λͺ¨λ κΆνμ κ°μ§ (ALL PRIVILEGES
).
π WITH GRANT OPTION
μ μ¬μ©νλ©΄ μ΄ μ¬μ©μκ° λ€λ₯Έ μ¬μ©μμκ²λ κΆνμ λΆμ¬ν μ μμ.
β
κΆνμ μ¦μ μ μ©νκΈ° μν΄ FLUSH PRIVILEGES
μ€ν
FLUSH PRIVILEGES;
π MariaDBμμ κΆν λ³κ²½ μ¬νμ μ¦μ λ°μνλ λͺ λ Ήμ΄.
π· 5-3. μ¬μ©μ κΆν νμ (REVOKE)
β
νΉμ κΆνλ§ νμνλ REVOKE
λ¬Έ
REVOKE INSERT, UPDATE ON company_db.* FROM 'new_user'@'localhost';
π μ¬μ©μ new_user
κ° company_db
λ°μ΄ν°λ² μ΄μ€μμ INSERT
, UPDATE
κΆνμ μμ.
π SELECT
κΆνμ μ μ§λ¨.
β λͺ¨λ κΆν μ κ±°
REVOKE ALL PRIVILEGES ON *.* FROM 'admin_user'@'localhost';
π μ¬μ©μ admin_user
μ λͺ¨λ κΆνμ μ κ±°νμ§λ§, κ³μ μ μμ λμ§ μμ.
β λ³κ²½ μ¬ν μ¦μ μ μ©
FLUSH PRIVILEGES;
π κΆν λ³κ²½ ν λ°λμ μ€νν΄μΌ μ μ©λ¨.
π¨ 3. REVOKE
κΆν νμ μ£Όμμ
β λ¬Έμ μ
REVOKE ALL PRIVILEGES
λ₯Ό μ¬μ©ν΄λ μ¬μ©μ κ³μ μ΄ μμ λμ§ μμΌλ©°, μ μ κΆνμ΄ μ μ§λ¨.USAGE
κΆνμ΄ κΈ°λ³Έμ μΌλ‘ λ¨μ μκΈ° λλ¬Έμ μμ ν μ κ±°νλ €λ©΄DROP USER
λ₯Ό μ€νν΄μΌ ν¨.
β 보κ°λ μ½λ
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'admin_user'@'localhost';
DROP USER 'admin_user'@'localhost'; -- κ³μ μμ μμ
π κΆνλ§ μ κ±°νλ κ²μ΄ μλλΌ, κ³μ κΉμ§ μμ νλ €λ©΄ DROP USER
λ ν¨κ» μ€νν΄μΌ ν¨.
β νΉμ κΆνλ§ νμ
REVOKE INSERT, UPDATE ON company_db.* FROM 'developer'@'localhost';
π κ°λ°μ κ³μ μ INSERT
, UPDATE
κΆνλ§ μ κ±°νκ³ SELECT
κΆνμ μ μ§.
π· 5-4. μ¬μ©μ μμ (DROP USER)
β μ¬μ©μλ₯Ό λ°μ΄ν°λ² μ΄μ€μμ μμ
DROP USER 'new_user'@'localhost';
π ν΄λΉ μ¬μ©μμ λͺ¨λ κΆνκ³Ό κ³μ μ΄ μμ ν μμ λ¨.
π μ¬μ©μλ₯Ό μμ νκΈ° μ μ κ΄λ ¨ λ°μ΄ν°λ² μ΄μ€ μ°κ²°μ΄ μλμ§ νμΈνλ κ²μ΄ μ’μ.
β μ¬λ¬ μ¬μ©μ μμ
DROP USER 'user1'@'localhost', 'user2'@'%';
π μ¬λ¬ μ¬μ©μλ₯Ό λμμ μμ ν μλ μμ.
π¨ DROP USER
μ€ν μ μ£Όμμ
β λ¬Έμ μ
DROP USER
μ€ν μ, ν΄λΉ μ¬μ©μκ° νμ¬ νμ± μΈμ μ μ μ§νκ³ μμΌλ©΄ μ€λ₯κ° λ°μν μ μμ.- μ΄ λ¬Έμ λ₯Ό λ°©μ§νκΈ° μν΄ μ°κ²°μ κ°μ λ‘ μ’ λ£νλ λ°©λ²μ μΆκ° μ€λͺ .
β 보κ°λ μ½λ
DROP USER IF EXISTS 'old_user'@'localhost';
π μ¬μ©μκ° μ‘΄μ¬νμ§ μμΌλ©΄ μ€λ₯λ₯Ό λ°©μ§νκΈ° μν΄ IF EXISTS
λ₯Ό μΆκ°.
β νμ¬ μ°κ²°λ μ¬μ©μλ₯Ό κ°μ λ‘ μ’ λ£ ν μμ
SELECT id, user, host FROM information_schema.processlist WHERE user = 'old_user';
KILL 12345; -- ν΄λΉ μ¬μ©μμ νλ‘μΈμ€ IDλ₯Ό μ’
λ£ (μ: ID=12345)
DROP USER 'old_user'@'localhost';
π μ¬μ©μκ° μ μ μ€μ΄λ©΄ KILL
λͺ
λ Ήμ΄λ₯Ό μ¬μ©νμ¬ νλ‘μΈμ€λ₯Ό μ’
λ£ν ν DROP USER
μ€ν.
π· 5-5. μ¬μ©μ κΆν νμΈ (SHOW GRANTS)
β μ¬μ©μμ νμ¬ κΆνμ νμΈνλ λ°©λ²
SHOW GRANTS FOR 'new_user'@'localhost';
π νμ¬ new_user
κ° κ°μ§κ³ μλ κΆνμ μΆλ ₯ν¨.
β νμ¬ λ‘κ·ΈμΈν μ¬μ©μμ κΆν νμΈ
SHOW GRANTS;
π νμ¬ μ μν κ³μ μ κΆνμ νμΈνλ κ°μ₯ λΉ λ₯Έ λ°©λ².
β
SHOW GRANTS
μ μμ μΆλ ₯
GRANT SELECT, INSERT ON `company_db`.* TO 'developer'@'localhost'
π μ΄ μ¬μ©μλ company_db
λ°μ΄ν°λ² μ΄μ€μ λͺ¨λ ν
μ΄λΈμμ SELECT
, INSERT
κ°λ₯.
β μ»¬λΌ λ¨μμ κΆν νμΈ
GRANT SELECT (name, salary) ON company_db.employees TO 'manager'@'localhost';
π μ΄ κ²½μ° manager
κ³μ μ employees
ν
μ΄λΈμ name
, salary
컬λΌλ§ μ‘°ν κ°λ₯.
π· 5-6. νΉμ λ°μ΄ν°λ² μ΄μ€μ λν κΆν κ΄λ¦¬
β νΉμ λ°μ΄ν°λ² μ΄μ€μ λν κΆνλ§ λΆμ¬
GRANT SELECT, INSERT ON company_db.* TO 'developer'@'localhost';
π developer
κ° company_db
λ°μ΄ν°λ² μ΄μ€μμ SELECT
, INSERT
λ§ κ°λ₯νλλ‘ μ ν.
β νΉμ ν μ΄λΈμ λν κΆνλ§ λΆμ¬
GRANT SELECT ON company_db.employees TO 'intern'@'localhost';
π intern
κ³μ μ employees
ν
μ΄λΈμμ SELECT
λ§ κ°λ₯.
β νΉμ 컬λΌμ λν κΆν λΆμ¬
GRANT SELECT (name, salary) ON company_db.employees TO 'manager'@'localhost';
π manager
κ³μ μ employees
ν
μ΄λΈμμ name
, salary
컬λΌλ§ μ‘°ν κ°λ₯.
π· 5-7. λΉλ°λ²νΈ λ³κ²½ λ° λ³΄μ μ€μ
β μ¬μ©μμ λΉλ°λ²νΈ λ³κ²½
ALTER USER 'new_user'@'localhost' IDENTIFIED BY 'NewSecurePass!';
π λΉλ°λ²νΈλ₯Ό λ³κ²½νλ κ°μ₯ μμ ν λ°©λ².
β λΉλ°λ²νΈ λ§λ£ μ€μ
ALTER USER 'new_user'@'localhost' PASSWORD EXPIRE;
π μ¬μ©μκ° λ€μ λ‘κ·ΈμΈ μ μλ‘μ΄ λΉλ°λ²νΈλ₯Ό μ€μ ν΄μΌ ν¨.
β λΉλ°λ²νΈ λ§λ£ κΈ°κ° μ€μ
ALTER USER 'new_user'@'localhost' PASSWORD EXPIRE INTERVAL 90 DAY;
π λΉλ°λ²νΈκ° 90μΌ ν λ§λ£λλλ‘ μ€μ .
β λΉλ°λ²νΈ 볡μ‘λ μ μ± μ€μ
SET GLOBAL validate_password_length = 10;
SET GLOBAL validate_password_mixed_case_count = 2;
SET GLOBAL validate_password_number_count = 2;
SET GLOBAL validate_password_special_char_count = 2;
π λΉλ°λ²νΈ μ μ±
μ μ€μ νμ¬ λ³΄μ κ°ν (validate_password
νλ¬κ·ΈμΈμ΄ νμ±νλ κ²½μ°).
π DCL ν΅μ¬ κ°λ μμ½
1οΈβ£ μ¬μ©μ κ΄λ¦¬ (CREATE USER
, DROP USER
)
2οΈβ£ κΆν λΆμ¬ (GRANT
)
3οΈβ£ κΆν νμ (REVOKE
)
4οΈβ£ μ¬μ©μ κΆν νμΈ (SHOW GRANTS
)
5οΈβ£ λΉλ°λ²νΈ λ° λ³΄μ μ€μ (ALTER USER
)