Để thiết lập bảo mật mật khẩu mạnh trong MySQL, chúng ta có thể sử dụng plugin validate_password và cấu hình các chính sách bảo mật liên quan. Việc áp dụng mật khẩu mạnh sẽ giúp ngăn chặn các cuộc tấn công như brute-force và bảo vệ hệ thống cơ sở dữ liệu của bạn một cách an toàn. Dưới đây là hướng dẫn chi tiết từng bước để thực hiện.

1. Kích hoạt plugin validate_password trong MySQL

Trước tiên, bạn cần kích hoạt plugin validate_password, đây là công cụ cho phép bạn định nghĩa các quy tắc bảo mật mật khẩu mạnh trong MySQL.

Kết nối tới MySQL bằng tài khoản quản trị (root):

mysql -u root -p

Sau khi kết nối thành công, bạn kích hoạt plugin validate_password bằng lệnh sau:

INSTALL PLUGIN validate_password SONAME 'validate_password.so';

Để kiểm tra plugin đã được cài đặt và kích hoạt chưa, sử dụng lệnh:

SHOW PLUGINS;

2. Cấu hình chính sách mật khẩu mạnh

MySQL cho phép bạn cấu hình các thông số liên quan đến mật khẩu như độ dài tối thiểu, số lượng ký tự viết hoa, số, và ký tự đặc biệt.

Thiết lập độ dài tối thiểu của mật khẩu

Để yêu cầu mật khẩu có độ dài tối thiểu, sử dụng lệnh sau:

SET GLOBAL validate_password.length = 12;

Lệnh trên yêu cầu mật khẩu phải có ít nhất 12 ký tự.

Thiết lập số lượng ký tự đặc biệt, số, và viết hoa

Bạn có thể đặt quy định cho mật khẩu bao gồm ít nhất một ký tự viết hoa, một ký tự số, và một ký tự đặc biệt như sau:

SET GLOBAL validate_password.mixed_case_count = 1;
SET GLOBAL validate_password.number_count = 1;
SET GLOBAL validate_password.special_char_count = 1;

Chọn chính sách mật khẩu

MySQL có ba mức chính sách mật khẩu:

  • LOW: Chỉ kiểm tra độ dài.
  • MEDIUM: Kiểm tra độ dài, số ký tự viết hoa, số, và ký tự đặc biệt.
  • STRONG: Kiểm tra tất cả các yếu tố ở mức MEDIUM và đảm bảo mật khẩu không chứa các từ phổ biến hoặc dễ đoán.

Để chọn mức bảo mật STRONG, sử dụng lệnh:

SET GLOBAL validate_password.policy = 2;

Kiểm tra các thông số hiện tại

Để kiểm tra các thiết lập liên quan đến mật khẩu, bạn sử dụng lệnh sau:

SHOW VARIABLES LIKE 'validate_password%';

Lệnh này sẽ trả về các thông số như độ dài mật khẩu, số lượng ký tự đặc biệt, và chính sách mật khẩu hiện tại.

3. Sử dụng mã hóa mật khẩu mạnh

MySQL hỗ trợ sử dụng cơ chế mã hóa mạnh như caching_sha2_password, thay vì các phương pháp cũ như mysql_native_password. Bạn có thể thiết lập mặc định việc sử dụng mã hóa mạnh bằng cách thực hiện lệnh sau:

SET GLOBAL default_authentication_plugin = 'caching_sha2_password';

Khi tạo tài khoản mới, bạn cần chỉ định plugin mã hóa mạnh:

CREATE USER 'newuser'@'localhost' IDENTIFIED WITH 'caching_sha2_password' BY 'StrongP@ssw0rd!';

Việc sử dụng caching_sha2_password giúp đảm bảo rằng mật khẩu được lưu trữ và truyền tải an toàn, bảo vệ chống lại các cuộc tấn công.

4. Đổi mật khẩu người dùng hiện tại

Sau khi thiết lập chính sách mật khẩu, bạn có thể yêu cầu các người dùng hiện tại đổi mật khẩu để tuân theo các quy định mới.

Để thay đổi mật khẩu cho một người dùng cụ thể, sử dụng lệnh:

ALTER USER 'username'@'localhost' IDENTIFIED BY 'NewStrongP@ssw0rd!';

Nếu mật khẩu không đáp ứng các yêu cầu bảo mật, MySQL sẽ thông báo lỗi và yêu cầu người dùng đặt mật khẩu mạnh hơn.

5. Thiết lập thời gian hết hạn mật khẩu

MySQL cho phép thiết lập thời gian hết hạn mật khẩu, buộc người dùng phải thay đổi mật khẩu định kỳ để tăng cường bảo mật.

Bạn có thể đặt thời gian hết hạn cho một người dùng cụ thể bằng lệnh:

ALTER USER 'username'@'localhost' PASSWORD EXPIRE INTERVAL 90 DAY;

Điều này có nghĩa là mật khẩu của người dùng sẽ hết hạn sau 90 ngày.

Để thiết lập thời gian hết hạn mặc định cho tất cả người dùng, sử dụng lệnh:

SET GLOBAL default_password_lifetime = 90;

6. Giới hạn truy cập từ xa và kiểm soát quyền người dùng

Ngoài việc thiết lập mật khẩu mạnh, bạn cũng nên giới hạn quyền truy cập từ xa chỉ cho các địa chỉ IP đáng tin cậy và áp dụng các quyền hạn thấp nhất cho người dùng.

Ví dụ, tạo người dùng chỉ có thể truy cập từ địa chỉ IP cụ thể:

CREATE USER 'username'@'192.168.1.100' IDENTIFIED BY 'StrongP@ssw0rd!';

Cấp quyền tối thiểu cần thiết, chẳng hạn chỉ cho phép người dùng truy cập SELECT vào cơ sở dữ liệu:

GRANT SELECT ON database_name.* TO 'username'@'192.168.1.100';

Việc giới hạn quyền truy cập giúp giảm thiểu nguy cơ khi người dùng bị tấn công hoặc bị lộ thông tin.

7. Theo dõi và giám sát bảo mật

Cuối cùng, bạn nên sử dụng hệ thống giám sát để theo dõi các hoạt động liên quan đến bảo mật, đặc biệt là việc đăng nhập thất bại hoặc các nỗ lực truy cập trái phép.

Bạn có thể sử dụng công cụ MySQL Enterprise Audit để theo dõi và giám sát các sự kiện bảo mật, hoặc kiểm tra các nhật ký (logs) MySQL để phát hiện các hành vi đáng ngờ.


Như vậy, việc thiết lập bảo mật mật khẩu mạnh trong MySQL không chỉ bao gồm việc yêu cầu mật khẩu phức tạp mà còn phải áp dụng các biện pháp bổ sung như mã hóa mạnh, giới hạn truy cập, và theo dõi bảo mật. Điều này giúp đảm bảo rằng hệ thống cơ sở dữ liệu của bạn được bảo vệ tối đa khỏi các mối đe dọa.