권한 할당
이제 사용자가 수행할 수 있는 작업을 제어하기 위해 다양한 유형의 권한을 할당하는 방법을 배우겠습니다.
기본 권한 관리
HR 사용자에게 몇 가지 기본 권한을 부여해 보겠습니다:
-- company_db.employees 테이블에 대한 SELECT 및 INSERT 권한 부여
GRANT SELECT, INSERT ON company_db.employees TO 'hr_user'@'localhost';
-- 권한 확인
SHOW GRANTS FOR 'hr_user'@'localhost';
GRANT 명령은 특정 데이터베이스 객체에 대한 특정 권한 (SELECT, INSERT) 을 사용자에게 부여합니다. SHOW GRANTS 명령은 현재 권한을 표시합니다.
예상 출력:
+----------------------------------------------------------------------------------------------------------------+
| Grants for hr_user@localhost |
+----------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `hr_user`@`localhost` IDENTIFIED BY PASSWORD '*27DB7FC6D35D1F5E6A4C37473D9018DD46DC2944' |
| GRANT SELECT, INSERT ON `company_db`.`employees` TO `hr_user`@`localhost` |
+----------------------------------------------------------------------------------------------------------------+
다양한 권한 수준
MariaDB 는 다양한 세분성 (granularity) 의 권한을 지원합니다:
-- 전역 권한 (모든 데이터베이스)
GRANT CREATE USER ON *.* TO 'intern'@'localhost';
-- 데이터베이스 수준 권한
GRANT ALL PRIVILEGES ON company_db.* TO 'hr_user'@'localhost';
-- 테이블 수준 권한
GRANT SELECT, UPDATE ON company_db.employees TO 'intern'@'localhost';
-- 열 수준 권한
GRANT SELECT (name, department), UPDATE (department)
ON company_db.employees TO 'intern'@'localhost';
*.* 구문은 모든 데이터베이스와 테이블을 나타내고, database.*는 특정 데이터베이스의 모든 테이블을 나타냅니다. 열 수준 권한은 세분화된 접근 제어를 허용합니다.
권한 철회
권한을 제거하려면:
-- 특정 권한 철회
REVOKE INSERT ON company_db.employees FROM 'hr_user'@'localhost';
-- 모든 권한 철회
REVOKE ALL PRIVILEGES ON company_db.employees FROM 'intern'@'localhost';
SHOW GRANTS 를 사용하여 권한을 철회한 후 항상 권한 변경 사항을 확인하십시오.
MariaDB [(none)]> SHOW GRANTS FOR 'hr_user'@'localhost';
+----------------------------------------------------------------------------------------------------------------+
| Grants for hr_user@localhost |
+----------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `hr_user`@`localhost` IDENTIFIED BY PASSWORD '*27DB7FC6D35D1F5E6A4C37473D9018DD46DC2944' |
| GRANT ALL PRIVILEGES ON `company_db`.* TO `hr_user`@`localhost` |
| GRANT SELECT ON `company_db`.`employees` TO `hr_user`@`localhost` |
+----------------------------------------------------------------------------------------------------------------+
MariaDB [(none)]> SHOW GRANTS FOR 'intern'@'localhost';
+---------------------------------------------------------------------------------------------------------------+
| Grants for intern@localhost |
+---------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `intern`@`localhost` IDENTIFIED BY PASSWORD '*A381F474A9DDCAA5BC97DAB83A69431B1C8D8902' |
+---------------------------------------------------------------------------------------------------------------+