MySQL 사용자 및 권한 관리

MySQLBeginner
지금 연습하기

소개

이 랩에서는 데이터베이스 시스템 보안에 필수적인 기술인 MariaDB 의 사용자 관리 및 권한에 대해 알아보겠습니다. 사용자 계정을 생성하고 관리하며, 적절한 권한을 할당하고, 권한을 확인하는 방법을 배우게 됩니다. 실습을 통해 이러한 중요한 데이터베이스 보안 작업에 대한 실질적인 경험을 얻고 MariaDB 에서 기본적인 보안 조치를 구현하는 방법을 이해하게 됩니다. 이 지식은 모든 데이터베이스 관리자가 적절한 접근 제어 및 데이터 보호를 보장하는 데 필수적입니다.

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 98%입니다.학습자들로부터 100%의 긍정적인 리뷰율을 받았습니다.

사용자 계정 생성 및 관리

먼저, root 권한으로 MySQL 에 연결합니다:

sudo mysql -u root

사용자 생성

다양한 접근 패턴을 가진 사용자를 생성해 보겠습니다:

-- localhost 에서만 연결할 수 있는 사용자 생성
CREATE USER 'hr_user'@'localhost' IDENTIFIED BY 'hr123';

-- 모든 호스트에서 연결할 수 있는 사용자 생성
CREATE USER 'reports_user'@'%' IDENTIFIED BY 'reports123';

-- 비밀번호가 없는 사용자 생성 (프로덕션 환경에서는 권장하지 않음)
CREATE USER 'intern'@'localhost';

@'localhost'는 로컬 머신에서만 연결을 허용하고, @'%'는 모든 호스트에서 연결을 허용합니다. 비밀번호 없이 사용자를 생성하는 것은 프로덕션 환경에서는 권장되지 않습니다.

생성한 사용자를 확인하려면:

SELECT User, Host FROM mysql.user;

예상 출력은 시스템의 모든 사용자를 보여줍니다:

+--------------+-----------+
| User         | Host      |
+--------------+-----------+
| reports_user | %         |
| hr_user      | localhost |
| intern       | localhost |
| mariadb.sys  | localhost |
| mysql        | localhost |
| root         | localhost |
+--------------+-----------+

기존 사용자 관리

기존 사용자를 수정하려면:

-- 사용자의 비밀번호 변경
SET PASSWORD FOR 'intern'@'localhost' = PASSWORD('intern123');

-- 다음 로그인 시 사용자가 비밀번호를 변경하도록 요구
ALTER USER 'hr_user'@'localhost' PASSWORD EXPIRE;

PASSWORD EXPIRE 옵션은 다음 로그인 시 사용자가 비밀번호를 변경하도록 강제합니다. 임시 비밀번호에 유용합니다.

사용자를 삭제하려면:

-- 사용자 삭제
DROP USER 'reports_user'@'%';

사용자를 삭제한 후, 사용자 목록이 업데이트되었는지 확인합니다:

+-------------+-----------+
| User        | Host      |
+-------------+-----------+
| hr_user     | localhost |
| intern      | localhost |
| mariadb.sys | localhost |
| mysql       | localhost |
| root        | localhost |
+-------------+-----------+

권한 할당

이제 사용자가 수행할 수 있는 작업을 제어하기 위해 다양한 유형의 권한을 할당하는 방법을 배우겠습니다.

기본 권한 관리

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' |
+---------------------------------------------------------------------------------------------------------------+

요약

이 랩에서는 MariaDB 사용자 및 권한 관리의 필수적인 측면을 다루었습니다:

  1. 다양한 연결 제한 사항을 가진 사용자 계정 생성 및 관리
  2. 다양한 수준 (전역, 데이터베이스, 테이블, 열) 에서 권한 할당 및 철회

이러한 기술은 MariaDB 설치를 보호하고 적절한 접근 제어를 구현하는 데 필수적입니다. 사용자 관리 및 권한을 이해하는 것은 데이터베이스 보안을 유지하고 사용자가 데이터베이스 리소스에 적절하게 접근할 수 있도록 하는 데 중요합니다.