ฉันต้องการสร้างผู้ใช้ใหม่ใน mysql ด้วยไวยากรณ์:
create user 'demo'@'localhost' identified by 'password';
แต่ส่งกลับข้อผิดพลาด:
รหัสผ่านของคุณไม่ตรงตามข้อกำหนดนโยบายปัจจุบัน
ฉันลองใช้รหัสผ่านหลายรหัสแล้ว แต่ใช้ไม่ได้ ฉันจะแก้ไขปัญหานี้ได้อย่างไร?
ฉันต้องการสร้างผู้ใช้ใหม่ใน mysql ด้วยไวยากรณ์:
create user 'demo'@'localhost' identified by 'password';
แต่ส่งกลับข้อผิดพลาด:
รหัสผ่านของคุณไม่ตรงตามข้อกำหนดนโยบายปัจจุบัน
ฉันลองใช้รหัสผ่านหลายรหัสแล้ว แต่ใช้ไม่ได้ ฉันจะแก้ไขปัญหานี้ได้อย่างไร?
SHOW VARIABLES LIKE 'validate_password%'
UNINSTALL COMPONENT 'file://component_validate_password';
คำตอบ:
เนื่องจากรหัสผ่านของคุณ คุณสามารถดูเมตริกการกำหนดค่ารหัสผ่านตรวจสอบความถูกต้องโดยใช้แบบสอบถามต่อไปนี้ในไคลเอนต์ MySQL:
SHOW VARIABLES LIKE 'validate_password%';
ผลลัพธ์ควรเป็นดังนี้:
+--------------------------------------+-------+
| Variable_name | Value |
+--------------------------------------+-------+
| validate_password.check_user_name | ON |
| validate_password.dictionary_file | |
| validate_password.length | 6 |
| validate_password.mixed_case_count | 1 |
| validate_password.number_count | 1 |
| validate_password.policy | LOW |
| validate_password.special_char_count | 1 |
+--------------------------------------+-------+
จากนั้นคุณสามารถตั้งค่าระดับนโยบายรหัสผ่านให้ต่ำลงตัวอย่างเช่น:
SET GLOBAL validate_password_length = 6;
SET GLOBAL validate_password_number_count = 0;
ตรวจสอบเอกสาร MySQL
SET GLOBAL validate_password_policy = 0;
SET GLOBAL validate_password.length = 6; SET GLOBAL validate_password.number_count = 0; อัปเดต !!
SET GLOBAL validate_password.policy = 0;
หมายเหตุ: นี่อาจไม่ใช่วิธีแก้ปัญหาที่ปลอดภัย แต่ถ้าคุณกำลังทำงานในสภาพแวดล้อมการทดสอบเพียงแค่ต้องการการแก้ไขอย่างรวดเร็วและไม่สนใจการตั้งค่าความปลอดภัย นี่เป็นวิธีแก้ปัญหาอย่างรวดเร็ว
ปัญหาเดียวกันนี้เกิดขึ้นกับฉันเมื่อฉันเรียกใช้ "mysql_secure_installation" และแก้ไขระดับความปลอดภัยของรหัสผ่านเป็น "medium"
ฉันข้ามข้อผิดพลาดโดยเรียกใช้สิ่งต่อไปนี้:
mysql -h localhost -u root -p
mysql>uninstall plugin validate_password;
ตรวจสอบให้แน่ใจว่าคุณติดตั้งปลั๊กอิน "validate_password" ใหม่หากจำเป็น
หากคุณไม่สนใจว่านโยบายรหัสผ่านคืออะไร คุณสามารถตั้งค่าเป็น LOW โดยใช้คำสั่ง mysql ด้านล่าง:
mysql> SET GLOBAL validate_password_policy=LOW;
SET GLOBAL validate_password.policy=LOW;แทน
สำหรับ MySQL 8 *
SET GLOBAL validate_password.policy=LOW
ลิงก์อ้างอิงเพื่ออธิบายเกี่ยวกับนโยบาย - คลิกที่นี่
sudo mysql_secure_installationหลังจากใช้คำสั่ง
sudo mysqlเพื่อเข้าสู่พรอมต์ mysqlSELECT user,authentication_string,plugin,host FROM mysql.user;เพื่อตรวจสอบรูทผู้ใช้ที่มีเป็นปลั๊กอินauth_socket auth_socketuninstall plugin validate_password;ให้เรียกใช้เพื่อทิ้งไพรเวตก่อนที่จะเรียกใช้สิ่งนี้ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';อย่าลืมเปลี่ยนรหัสผ่านเป็นรหัสผ่านที่คาดเดายากหมายเหตุ: ตรวจสอบลิงค์นี้https://www.digitalocean.com/community/tutorials/how-to-install-mysql-on-ubuntu-18-04สำหรับความช่วยเหลือเพิ่มเติม
คุณต้องเปลี่ยนนโยบายรหัสผ่าน MySQL เป็น LOW
ล็อกอินด้วย root
mysql -u root -p
เปลี่ยนนโยบาย
SET GLOBAL validate_password_policy=LOW;
หรือ
SET GLOBAL validate_password_policy=0;
ทางออก
exit
เริ่มบริการ MySQL
sudo service mysql restart
คุณต้องเปลี่ยนนโยบายรหัสผ่าน MySQL เป็น Low = 0 / Medium = 1 / High = 2
SET GLOBAL validate_password_policy=0;
SET GLOBAL validate_password_policy=1;
SET GLOBAL validate_password_policy=2;
สำหรับ MySql 8 คุณสามารถใช้สคริปต์ต่อไปนี้:
SET GLOBAL validate_password.LENGTH = 4;
SET GLOBAL validate_password.policy = 0;
SET GLOBAL validate_password.mixed_case_count = 0;
SET GLOBAL validate_password.number_count = 0;
SET GLOBAL validate_password.special_char_count = 0;
SET GLOBAL validate_password.check_user_name = 0;
ALTER USER 'user'@'localhost' IDENTIFIED BY 'pass';
FLUSH PRIVILEGES;
ในความคิดของฉันการตั้งค่า"validate_password_policy"เป็น"ต่ำ"หรือการถอนการติดตั้ง "ปลั๊กอินตรวจสอบรหัสผ่าน" ไม่ใช่สิ่งที่ถูกต้อง คุณต้องไม่ประนีประนอมกับความปลอดภัยของฐานข้อมูลของคุณ (เว้นแต่คุณจะไม่สนใจจริงๆ) ฉันสงสัยว่าทำไมผู้คนถึงแนะนำตัวเลือกเหล่านี้ในเมื่อคุณสามารถเลือกรหัสผ่านที่ดีได้
เพื่อแก้ไขปัญหานี้ฉันใช้คำสั่งต่อไปนี้ใน mysql: SHOW VARIABLES LIKE 'validate_password%'ตามที่ @JNevill แนะนำ "validate_password_policy" ของฉันถูกตั้งค่าเป็นปานกลางพร้อมกับสิ่งอื่น ๆ นี่คือภาพหน้าจอของการดำเนินการ:ตรวจสอบนโยบายรหัสผ่าน
ผลลัพธ์คือการอธิบายด้วยตนเอง สำหรับรหัสผ่านที่ถูกต้อง (เมื่อตั้งค่านโยบายรหัสผ่านเป็นสื่อกลาง):
ดังนั้นรหัสผ่านที่ถูกต้องจะต้องเป็นไปตามนโยบาย ตัวอย่างรหัสผ่านที่ถูกต้องสำหรับกฎข้างต้นอาจ:
คุณสามารถเลือกชุดค่าผสมใดก็ได้ตราบเท่าที่เป็นไปตามนโยบาย
สำหรับ"validate_password_policy"อื่น ๆคุณสามารถดูค่าของตัวเลือกต่างๆและเลือกรหัสผ่านของคุณตามนั้น (ฉันยังไม่ได้ลอง"STRONG" )
https://dev.mysql.com/doc/refman/5.6/en/validate-password-options-variables.html
validate_password_policy LOWผู้ใช้สามารถสร้างหรือสร้างรหัสผ่านที่รัดกุมได้อย่างสมบูรณ์แบบเพื่อตอบสนองความต้องการ หากคุณไม่แน่ใจว่าต้องทำอย่างไรให้ใช้เครื่องมือนั้น ตัวอย่างเช่นgithub.com/joseluisq/rpasswd
ขั้นตอนที่ 1: ตรวจสอบปลั๊กอินการตรวจสอบความถูกต้องเริ่มต้นของคุณ
SHOW VARIABLES LIKE 'default_authentication_plugin';
ขั้นตอนที่ 2: แก้ไขข้อกำหนดการตรวจสอบรหัสผ่านของคุณ
SHOW VARIABLES LIKE 'validate_password%';
ขั้นตอนที่ 3: ตั้งค่าผู้ใช้ของคุณด้วยข้อกำหนดรหัสผ่านที่ถูกต้อง
CREATE USER '<your_user>'@'localhost' IDENTIFIED WITH '<your_default_auth_plugin>' BY 'password';
ฉันมีปัญหาเดียวกันและคำตอบอยู่ตรงหน้าคุณจำไว้ว่าเมื่อคุณเรียกใช้สคริปต์ในขณะที่ติดตั้ง mysql เช่น
sudo mysql_secure_installation
ที่นั่นคุณเลือกประเภทรหัสผ่านที่คุณต้องการเลือก
นโยบายการตรวจสอบรหัสผ่านมีสามระดับ:
LOW Length> = 8 MEDIUM Length> = 8, ตัวเลข, ตัวพิมพ์เล็กและตัวพิมพ์พิเศษ STRONG Length> = 8, ตัวเลข, ตัวพิมพ์เล็กผสม, อักขระพิเศษและไฟล์พจนานุกรม
โปรดป้อน 0 = LOW, 1 = MEDIUM และ 2 = STRONG:
คุณต้องให้รหัสผ่านกับนโยบายเดียวกัน
นี่คือตัวอย่างบางส่วนสำหรับรหัสผ่านของคุณ:
สำหรับประเภท 0: abcdabcd
สำหรับประเภท 1: abcd1234
สำหรับประเภท 2:ancd@1234
สำหรับผู้ใช้ Laravel ที่มีปัญหากับ MySQL 8.0.x ให้เพิ่ม
'modes'=> [
'ONLY_FULL_GROUP_BY',
'STRICT_TRANS_TABLES',
'NO_ZERO_IN_DATE',
'NO_ZERO_DATE',
'ERROR_FOR_DIVISION_BY_ZERO',
'NO_ENGINE_SUBSTITUTION',
],
ไปยังไฟล์ database.php ของคุณดังต่อไปนี้:
// database.php
'connections' => [
'mysql' => [
'driver' => 'mysql',
'host' => env( 'DB_HOST', '127.0.0.1' ),
'port' => env( 'DB_PORT', '3306' ),
'database' => env( 'DB_DATABASE', 'forge' ),
'username' => env( 'DB_USERNAME', 'forge' ),
'password' => env( 'DB_PASSWORD', '' ),
'unix_socket' => env( 'DB_SOCKET', '' ),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
'modes' => [
'ONLY_FULL_GROUP_BY',
'STRICT_TRANS_TABLES',
'NO_ZERO_IN_DATE',
'NO_ZERO_DATE',
'ERROR_FOR_DIVISION_BY_ZERO',
'NO_ENGINE_SUBSTITUTION',
],
],
],
มันแก้ไขให้ฉัน
ปัญหาคือรหัสผ่านของคุณไม่ตรงกับกฎการตรวจสอบรหัสผ่าน คุณสามารถทำตามขั้นตอนด้านล่างเพื่อแก้ปัญหาของคุณได้ง่ายๆ
คุณสามารถดูเมทริกซ์การกำหนดค่าการตรวจสอบรหัสผ่านได้โดยพิมพ์รหัสด้านล่าง
mysql-> SHOW VARIABLES LIKE 'validate_password%';
จากนั้นในเมทริกซ์ของคุณคุณสามารถหาด้านล่างตัวแปรที่มีค่าที่สอดคล้องกันและมีคุณมีการตรวจสอบvalidate_password_length, และvalidate_password_number_countvalidate_password_policy
ตรวจสอบค่าที่ใช้สำหรับตัวแปรเหล่านั้น ตรวจสอบให้แน่ใจว่าคุณvalidate_password_lengthไม่ควรมากกว่า 6 คุณสามารถตั้งค่าเป็น 6 ได้โดยใช้รหัสด้านล่าง
SET GLOBAL validate_password_length = 6;
และหลังจากนั้นคุณต้องตั้งค่าvalidate_password_number_countเป็น 0 ทำได้โดยใช้รหัสด้านล่าง
SET GLOBAL validate_password_number_count = 0;
ในที่สุดคุณต้องตั้งคุณจะvalidate_password_policy lowการมีรหัสผ่านที่ปลอดภัยน้อยกว่าMediumหรือHighไม่อนุญาตให้ใช้ ตั้งค่าเป็นlowรหัสด้านล่าง
SET GLOBAL validate_password_policy=LOW;
ตั้งรหัสผ่านที่เป็นไปตามกฎการตรวจสอบความถูกต้อง 7 MySql
เช่น:- d_VX>N("xn_BrD2y
การทำให้เกณฑ์การตรวจสอบง่ายขึ้นเล็กน้อยจะช่วยแก้ปัญหาได้
SET GLOBAL validate_password_length = 6;
SET GLOBAL validate_password_number_count = 0;
แต่แนะนำให้ใช้รหัสผ่านที่คาดเดายากเป็นวิธีแก้ปัญหาที่ถูกต้อง
ข้อความแสดงข้อผิดพลาดนี้ไม่เกี่ยวข้องกับรหัสผ่านที่เก็บไว้ในตารางของคุณ นอกจากนี้ยังเกิดขึ้นหากคุณพิมพ์ (บนคอนโซล SQL)
"เลือกรหัสผ่าน ('123456789')"
หรือถ้า
"เลือกรหัสผ่าน ('A123456789')"
หรือถ้า
"เลือกรหัสผ่าน ('A! 123456789')"
ถ้าคุณพิมพ์
"เลือกรหัสผ่าน ('A! a123456789')"
แล้วมันจะทำงาน เพียงใช้ตัวอักษรใหญ่ + เล็กอักขระพิเศษและตัวเลขเพื่อสร้างรหัสผ่านของคุณ
คุณสามารถปิดใช้งานการตรวจสอบเหล่านี้ได้ใน my.cnf แต่คุณจะมีความเสี่ยงด้านความปลอดภัย!
ใน [mysqld] เพิ่ม:
validate_password_policy=LOW
validate_password_special_char_count=0
validate_password_length=0
validate_password_mixed_case_count=0
validate_password_number_count=0
ใช้งานไม่ได้สำหรับฉันในการติดตั้ง mysqld ของ ubuntu ใหม่ต้องเพิ่มสิ่งนี้: ไปที่ /etc/mysql/mysql.conf.d/mysqld.cnf หรือเซิร์ฟเวอร์ไม่เริ่มทำงาน (เดาว่าปลั๊กอินไม่โหลดที่ เวลาที่เหมาะสมเมื่อฉันเพิ่งเพิ่มโดยไม่มีคำสั่ง plugin-load-add)
plugin-load-add=validate_password.so
validate_password_policy=LOW
validate_password_length=8
validate_password_mixed_case_count=0
validate_password_number_count=0
validate_password_special_char_count=0
mysql> SET GLOBAL validate_password.policy = 0;
มีบางช่วงเวลาที่การหาวิธีแก้ปัญหาอย่างรวดเร็วนั้นยอดเยี่ยม แต่ถ้าคุณสามารถหลีกเลี่ยงการลดข้อ จำกัด ของรหัสผ่านได้ก็จะทำให้คุณไม่ต้องปวดหัวในอนาคต
ลิงก์ถัดไปมาจากเอกสารอย่างเป็นทางการhttps://dev.mysql.com/doc/refman/5.6/en/validate-password.htmlซึ่งจะแสดงตัวอย่างที่เหมือนกับของคุณทุกประการและแก้ไขได้
ปัญหาเดียวที่คุณพบคือรหัสผ่านของคุณไม่รัดกุมเพียงพอที่จะเป็นไปตามนโยบายขั้นต่ำที่แท้จริง (ไม่แนะนำให้นำออก) ดังนั้นคุณสามารถลองใช้รหัสผ่านอื่นดังที่คุณเห็นในตัวอย่าง
หาก mysql โฮสต์บน aws ให้ถอนการติดตั้งปลั๊กอิน จากไฟผู้ใช้รูทด้านล่าง
UNINSTALL PLUGIN validate_password;