MariaDB 보안 및 사용자 관리
1️⃣ MariaDB 사용자 및 권한 관리 (GRANT, REVOKE)
MariaDB에서 사용자 관리 및 권한 설정은 매우 중요합니다. 적절한 권한 설정을 통해 시스템의 보안을 강화할 수 있습니다.
사용자 생성 및 권한 부여 (GRANT)
사용자를 생성하고 특정 권한을 부여하려면 GRANT
명령어를 사용합니다. 예를 들어, 특정 사용자가 test_db
데이터베이스에 대해 SELECT
권한을 부여받도록 설정할 수 있습니다.
예시:
CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'password';
GRANT SELECT ON test_db.* TO 'new_user'@'localhost';
이 쿼리는 new_user
라는 사용자를 생성하고, 해당 사용자에게 test_db
데이터베이스에 대해 SELECT
권한만 부여합니다.
권한 철회 (REVOKE)
REVOKE
명령어를 사용하여 사용자가 가지고 있는 권한을 철회할 수 있습니다. 예를 들어, new_user
에게 부여된 SELECT
권한을 철회하려면 다음과 같이 실행합니다.
예시:
REVOKE SELECT ON test_db.* FROM 'new_user'@'localhost';
이 쿼리는 new_user
가 test_db
에서 SELECT
권한을 더 이상 갖지 않게 만듭니다.
2️⃣ mysql_native_password vs caching_sha2_password
MariaDB는 사용자의 비밀번호를 암호화할 때 두 가지 주요 방법을 제공합니다: mysql_native_password
와 caching_sha2_password
입니다. 이 두 방식의 차이를 이해하고, 적절한 방식으로 설정하는 것이 중요합니다.
mysql_native_password
mysql_native_password
는 이전 MariaDB 및 MySQL 버전에서 사용된 기본 비밀번호 암호화 방식입니다. 비교적 단순한 방식으로, 암호화 알고리즘이 빠르지만 보안 측면에서 상대적으로 취약할 수 있습니다.
예시:
ALTER USER 'new_user'@'localhost' IDENTIFIED WITH 'mysql_native_password' BY 'new_password';
이 쿼리는 new_user
의 비밀번호를 mysql_native_password
방식으로 설정합니다.
caching_sha2_password
caching_sha2_password
는 더 강력한 보안 방식으로, SHA-256
해시 알고리즘을 사용하여 비밀번호를 암호화합니다. 최신 MariaDB 및 MySQL에서 기본적으로 사용되며, 더 안전한 방식으로 권장됩니다.
예시:
ALTER USER 'new_user'@'localhost' IDENTIFIED WITH 'caching_sha2_password' BY 'new_password';
이 쿼리는 new_user
의 비밀번호를 caching_sha2_password
방식으로 설정합니다.
3️⃣ 데이터베이스 및 테이블 수준의 권한 관리
MariaDB에서는 특정 데이터베이스나 테이블에 대한 권한을 세밀하게 제어할 수 있습니다. 권한을 관리하여 사용자가 특정 작업만 수행하도록 제한할 수 있습니다.
데이터베이스 수준 권한 관리
데이터베이스에 대한 권한을 설정하면 해당 데이터베이스에 대한 전체적인 권한을 부여하거나 제한할 수 있습니다.
예시:
GRANT SELECT, INSERT ON test_db.* TO 'new_user'@'localhost';
이 쿼리는 new_user
에게 test_db
데이터베이스에 대해 SELECT
와 INSERT
권한을 부여합니다.
테이블 수준 권한 관리
특정 테이블에 대해서만 권한을 설정할 수도 있습니다.
예시:
GRANT SELECT, UPDATE ON test_db.users TO 'new_user'@'localhost';
이 쿼리는 new_user
에게 test_db
데이터베이스의 users
테이블에 대해 SELECT
와 UPDATE
권한을 부여합니다.
4️⃣ MariaDB 보안 설정 (skip-networking, bind-address)
MariaDB의 보안을 강화하기 위해 서버가 외부 네트워크와 연결되지 않도록 설정할 수 있습니다. 이는 보통 로컬 서버에서만 MariaDB를 사용할 때 유용합니다.
skip-networking 설정
skip-networking
옵션은 MariaDB가 네트워크 연결을 거부하도록 설정합니다. 이 설정을 활성화하면 MariaDB는 로컬 연결만 허용하고, 원격 접속은 차단됩니다.
예시:
[mysqld]
skip-networking
bind-address 설정
bind-address
는 MariaDB 서버가 어떤 IP 주소에서 연결을 수락할지 설정합니다. 로컬호스트로만 연결을 허용하려면 127.0.0.1
로 설정합니다.
예시:
[mysqld]
bind-address = 127.0.0.1
이 설정을 하면 MariaDB 서버는 127.0.0.1
에서만 연결을 허용하고, 외부에서는 접속할 수 없습니다.
5️⃣ 데이터 암호화 (AES_ENCRYPT, AES_DECRYPT)
MariaDB는 데이터를 암호화하여 민감한 정보를 보호할 수 있는 기능을 제공합니다. AES_ENCRYPT
와 AES_DECRYPT
함수를 사용하여 데이터를 암호화하고 복호화할 수 있습니다.
데이터 암호화 (AES_ENCRYPT)
AES_ENCRYPT
함수는 데이터를 암호화하는 데 사용됩니다. 이 함수는 대칭 키 암호화 방식인 AES(Advanced Encryption Standard)를 사용하여 데이터를 암호화합니다.
예시:
SELECT AES_ENCRYPT('Sensitive Data', 'encryption_key');
이 쿼리는 'Sensitive Data'
라는 데이터를 'encryption_key'
라는 키로 암호화합니다.
데이터 복호화 (AES_DECRYPT)
AES_DECRYPT
함수는 암호화된 데이터를 복호화하는 데 사용됩니다.
예시:
SELECT AES_DECRYPT(encrypted_data, 'encryption_key');
이 쿼리는 encrypted_data
를 'encryption_key'
로 복호화하여 원본 데이터를 반환합니다.
6️⃣ SSL/TLS를 이용한 MariaDB 보안 설정
MariaDB는 SSL/TLS를 사용하여 데이터베이스와 클라이언트 간의 통신을 암호화할 수 있습니다. 이를 통해 데이터 전송 중에 발생할 수 있는 중간자 공격(MITM)을 방지할 수 있습니다.
SSL/TLS 설정
MariaDB 서버와 클라이언트 간의 연결을 암호화하려면 SSL 인증서를 설정해야 합니다.
서버 측 설정
서버 측에서 SSL을 활성화하려면 my.cnf
파일에 다음과 같이 설정을 추가합니다.
[mysqld]
ssl-ca=/path/to/ca-cert.pem
ssl-cert=/path/to/server-cert.pem
ssl-key=/path/to/server-key.pem
클라이언트 측 설정
클라이언트는 서버와 연결할 때 SSL을 사용하도록 설정할 수 있습니다.
mysql -u user -p --ssl-ca=/path/to/ca-cert.pem --ssl-cert=/path/to/client-cert.pem --ssl-key=/path/to/client-key.pem
이 명령은 MariaDB 클라이언트가 SSL을 사용하여 MariaDB 서버에 연결하도록 설정합니다.
위와 같은 보안 설정을 통해 MariaDB 시스템을 안전하게 운영할 수 있습니다. 사용자의 권한 관리부터 데이터 암호화, 네트워크 보안 설정까지 다양한 방법으로 MariaDB의 보안을 강화할 수 있습니다.