Sửa lỗi ERROR 1819 (HY000): Your password does not satisfy the current policy requirements trong MySQL

beginner🗄️ MySQL2026-06-02| MySQL 5.7+, MySQL 8.0+, Ubuntu/Debian/CentOS/RHEL, cũng xuất hiện sau khi chạy mysql_secure_installation

Error Message

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
#mysql#mật khẩu#bảo mật#mysql8

Chuyện gì vừa xảy ra

Bạn đang chạy ALTER USER, CREATE USER, hoặc SET PASSWORD và MySQL ném cho bạn lỗi này:

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

Lỗi này thường xuất hiện ngay sau khi cài MySQL mới — đặc biệt nếu bạn đã chạy mysql_secure_installation và nó bật plugin validate_password. Mật khẩu bạn chọn về mặt kỹ thuật là SQL hợp lệ, nhưng chính sách mật khẩu của MySQL đang chặn nó.

Tại sao MySQL từ chối mật khẩu

MySQL 5.7 giới thiệu validate_password dưới dạng plugin. MySQL 8.0 nâng cấp nó thành component. Dù là cách nào, khi nó đang hoạt động, mọi lần thay đổi mật khẩu đều được kiểm tra theo yêu cầu độ mạnh tối thiểu trước khi được chấp nhận.

Có ba cấp độ chính sách:

  • LOW — chỉ kiểm tra độ dài (mặc định: 8 ký tự)
  • MEDIUM — độ dài + chữ hoa + chữ thường + chữ số + ký tự đặc biệt
  • STRONG — tất cả điều kiện của MEDIUM + mật khẩu không được xuất hiện trong file từ điển

Nếu bạn cài MySQL 8 và chạy trình hướng dẫn cài đặt bảo mật, rất có thể nó đã đặt chính sách thành MEDIUM hoặc STRONG.

Bước 1: Kiểm tra chính sách đang áp dụng

Đăng nhập với tài khoản root, rồi chạy:

SHOW VARIABLES LIKE 'validate_password%';

Kết quả trên MySQL 8.0 trông như sau:

+-------------------------------------------------+--------+
| Variable_name                                   | Value  |
+-------------------------------------------------+--------+
| validate_password.check_user_name               | ON     |
| validate_password.dictionary_file               |        |
| validate_password.length                        | 8      |
| validate_password.mixed_case_count              | 1      |
| validate_password.number_count                  | 1      |
| validate_password.policy                        | MEDIUM |
| validate_password.special_char_count            | 1      |
+-------------------------------------------------+--------+

Trên MySQL 5.7, tên biến dùng dấu gạch dưới thay vì dấu chấm: validate_password_policy, validate_password_length, v.v.

Bây giờ bạn đã biết chính xác mình đang đối mặt với gì.

Cách nhanh: dùng mật khẩu hợp lệ ngay lập tức

Con đường nhanh nhất — chọn một mật khẩu thỏa mãn chính sách hiện tại. Nếu chính sách là MEDIUM với cài đặt mặc định, mật khẩu của bạn cần:

  • Ít nhất 8 ký tự
  • Ít nhất 1 chữ hoa
  • Ít nhất 1 chữ thường
  • Ít nhất 1 chữ số
  • Ít nhất 1 ký tự đặc biệt (!@#$%^&* v.v.)

Ví dụ: MyP@ssw0rd! — xấu nhưng dùng được để test. Đối với môi trường production, hãy dùng thứ gì đó thực sự ngẫu nhiên. Tôi dùng trình tạo mật khẩu của ToolCraft để tạo mật khẩu ngẫu nhiên hợp lệ ngay lập tức — chạy trên trình duyệt, không gửi dữ liệu đi đâu cả.

Kiểm tra mật khẩu có đạt yêu cầu trước khi chạy lệnh chính thức:

SELECT VALIDATE_PASSWORD_STRENGTH('YourPasswordHere');

Trả về giá trị từ 0–100. Điểm từ 50 trở lên vượt qua chính sách MEDIUM, cần 100 cho STRONG.

Sau đó áp dụng:

ALTER USER 'youruser'@'localhost' IDENTIFIED BY 'YourStr0ng!Pass';

Cách triệt để: điều chỉnh chính sách cho phù hợp nhu cầu

Đang chạy máy dev cục bộ hoặc môi trường staging? Chính sách STRONG là quá mức cần thiết. Hạ xuống LOW:

-- MySQL 8.0
SET GLOBAL validate_password.policy = LOW;
SET GLOBAL validate_password.length = 6;

-- MySQL 5.7
SET GLOBAL validate_password_policy = LOW;
SET GLOBAL validate_password_length = 6;

Những thay đổi này có hiệu lực ngay lập tức nhưng không tồn tại sau khi khởi động lại MySQL. Để lưu lại, thêm vào file cấu hình MySQL — /etc/mysql/mysql.conf.d/mysqld.cnf trên Ubuntu/Debian, hoặc /etc/my.cnf trên RHEL/CentOS:

[mysqld]
validate_password.policy = LOW
validate_password.length = 6

Sau đó khởi động lại:

sudo systemctl restart mysql

Tùy chọn: tắt hoàn toàn validate_password

Máy dev chỉ dùng nội bộ, không có truy cập từ bên ngoài? Gỡ cài đặt component và bỏ qua toàn bộ việc kiểm tra:

-- MySQL 8.0 (component)
UNINSTALL COMPONENT 'file://component_validate_password';

-- MySQL 5.7 (plugin)
UNINSTALL PLUGIN validate_password;

Không còn kiểm tra chính sách nữa. Đặt mật khẩu tùy ý.

Bật lại trên MySQL 8.0 sau này:

INSTALL COMPONENT 'file://component_validate_password';

Kiểm tra lại

Đã áp dụng thay đổi chính sách? Xác nhận nó đã được lưu:

SHOW VARIABLES LIKE 'validate_password%';

Rồi kiểm tra điểm mật khẩu mục tiêu:

SELECT VALIDATE_PASSWORD_STRENGTH('yournewpassword');

Chạy lệnh ALTER USER hoặc CREATE USER thực tế. Không còn ERROR 1819 nghĩa là bạn đã xong.

Bẫy thường gặp: dấu chấm và dấu gạch dưới

MySQL 8.0 dùng ký hiệu dấu chấm (validate_password.policy). MySQL 5.7 dùng dấu gạch dưới (validate_password_policy). Nhầm lẫn hai cái này và bạn sẽ gặp ERROR 1193: Unknown system variable — thêm một lỗi nữa chồng lên lỗi đầu tiên. Kiểm tra phiên bản trước khi sao chép lệnh:

SELECT VERSION();

Lời khuyên cho môi trường production

Đừng bao giờ tắt validate_password trên production. Chính sách MEDIUM là sự cân bằng phù hợp — nó chặn mật khẩu yếu mà không yêu cầu file từ điển. Tạo mật khẩu hợp lệ cho mọi tài khoản service và lưu trữ trong secrets manager (Vault, AWS Secrets Manager) thay vì file cấu hình.

Việc xoay vòng mật khẩu sẽ nhanh chóng trở nên nhàm chán nếu bạn cứ phải đoán định dạng nào vượt qua được validation. Hãy đánh dấu một trình tạo mật khẩu bạn có thể cấu hình — trình tạo của ToolCraft cho phép bạn thiết lập chính xác độ dài và yêu cầu ký tự để mọi kết quả đều vượt qua chính sách của bạn ngay lần đầu tiên.

Related Error Notes