รหัสผ่านของคุณไม่ตรงตามข้อกำหนดนโยบายปัจจุบัน


163

ฉันต้องการสร้างผู้ใช้ใหม่ใน mysql ด้วยไวยากรณ์:

create user 'demo'@'localhost' identified by 'password';

แต่ส่งกลับข้อผิดพลาด:

รหัสผ่านของคุณไม่ตรงตามข้อกำหนดนโยบายปัจจุบัน

ฉันลองใช้รหัสผ่านหลายรหัสแล้ว แต่ใช้ไม่ได้ ฉันจะแก้ไขปัญหานี้ได้อย่างไร?


1
ตั้งค่าระดับนโยบายรหัสผ่านให้ต่ำลง ดูที่นี่: dev.mysql.com/doc/refman/5.6/en/…
Fjarlaegur

4
คุณตั้งค่านโยบายรหัสผ่านเป็นอะไร คุณสามารถตรวจสอบตัวแปรที่ตั้งค่าไว้สำหรับโมดูลการตรวจสอบรหัสผ่านของคุณโดยใช้SHOW VARIABLES LIKE 'validate_password%'
JNevill

ขอบคุณ! ฉันตั้งค่าระดับนโยบายรหัสผ่านให้ต่ำลงและใช้งานได้
เหงียน

1
ฉันแก้ปัญหาโดยใช้UNINSTALL COMPONENT 'file://component_validate_password';
princebillyGK

@Nguyen สิ่งนี้เกิดขึ้นเนื่องจากรหัสผ่านที่คุณระบุให้กับผู้ใช้นั้นไม่รัดกุมเพียงพอตาม validate_password.policy ของคุณ ป้อนรหัสผ่านที่คาดเดายากที่คุณต้องการแทน "รหัสผ่าน" แดกดันทุกคนแนะนำให้คุณเปลี่ยนระดับ validate_password.policy
Sandeep Gahlawat

คำตอบ:


276

เนื่องจากรหัสผ่านของคุณ คุณสามารถดูเมตริกการกำหนดค่ารหัสผ่านตรวจสอบความถูกต้องโดยใช้แบบสอบถามต่อไปนี้ในไคลเอนต์ 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


34
คุณควรอ้างอิงเอกสาร MySQLอย่างเป็นทางการไม่ใช่วิดีโอ YouTube เพื่อประโยชน์ของสวรรค์
Marquis of Lorne

27
ใช้คำสั่งต่อไปนี้เพื่อใช้ 'รหัสผ่าน' เป็นรหัสผ่านสำหรับเครื่องพัฒนา:SET GLOBAL validate_password_policy = 0;
Mahmudul Hasan Shohag

5
SET GLOBAL validate_password.length = 6; SET GLOBAL validate_password.number_count = 0; อัปเดต !!
BeatingBytes

6
มันค่อนข้างดีSET GLOBAL validate_password.policy = 0;
iamtodor

1
สิ่งนี้มีประโยชน์เพราะมันแสดงให้ฉันเห็นว่าทำไมรหัสผ่านยาว 30 อักขระของฉันจึง "อ่อนแอ" (ไม่มีอักขระพิเศษ) ฉันสามารถลบข้อกำหนดอักขระพิเศษและเพิ่มความยาวขั้นต่ำจาก 8 เป็น 20 ได้
andrewtweber

71

หมายเหตุ: นี่อาจไม่ใช่วิธีแก้ปัญหาที่ปลอดภัย แต่ถ้าคุณกำลังทำงานในสภาพแวดล้อมการทดสอบเพียงแค่ต้องการการแก้ไขอย่างรวดเร็วและไม่สนใจการตั้งค่าความปลอดภัย นี่เป็นวิธีแก้ปัญหาอย่างรวดเร็ว

ปัญหาเดียวกันนี้เกิดขึ้นกับฉันเมื่อฉันเรียกใช้ "mysql_secure_installation" และแก้ไขระดับความปลอดภัยของรหัสผ่านเป็น "medium"

ฉันข้ามข้อผิดพลาดโดยเรียกใช้สิ่งต่อไปนี้:

mysql -h localhost -u root -p
mysql>uninstall plugin validate_password;

ตรวจสอบให้แน่ใจว่าคุณติดตั้งปลั๊กอิน "validate_password" ใหม่หากจำเป็น


3
ทางออกที่แย่มาก คุณควรลดระดับให้เหมาะสมกับคุณไม่ใช่ลบสิ่งอำนวยความสะดวกทั้งหมด
Marquis of Lorne

10
ขอบคุณสำหรับการโพสต์ แก้ไขอย่างรวดเร็วและสกปรก เช่นเดียวกับสิ่งที่ @kennyut กล่าว: ตรวจสอบให้แน่ใจว่าคุณติดตั้งปลั๊กอิน "validate_password" ใหม่
Meng Zhao

56

หากคุณไม่สนใจว่านโยบายรหัสผ่านคืออะไร คุณสามารถตั้งค่าเป็น LOW โดยใช้คำสั่ง mysql ด้านล่าง:

mysql> SET GLOBAL validate_password_policy=LOW;

13
ควรจะเป็นSET GLOBAL validate_password.policy=LOW;แทน
เพลง

1
สำหรับ MySQL 8 สถานที่ได้เปลี่ยนจาก "validate_password_policy" เพื่อ validate_password_policy ' "validate_password.policy สำหรับรุ่นที่ต่ำกว่าก็ยังคงเป็น.'
ซิงห์


20

sudo mysql_secure_installationหลังจากใช้คำสั่ง

  1. เรียกใช้sudo mysqlเพื่อเข้าสู่พรอมต์ mysql
  2. เรียกใช้สิ่งนี้SELECT user,authentication_string,plugin,host FROM mysql.user;เพื่อตรวจสอบรูทผู้ใช้ที่มีเป็นปลั๊กอินauth_socket auth_socket
  3. จากนั้นuninstall 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สำหรับความช่วยเหลือเพิ่มเติม


11

คุณต้องเปลี่ยนนโยบายรหัสผ่าน 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;

10

สำหรับ 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;

7

ในความคิดของฉันการตั้งค่า"validate_password_policy"เป็น"ต่ำ"หรือการถอนการติดตั้ง "ปลั๊กอินตรวจสอบรหัสผ่าน" ไม่ใช่สิ่งที่ถูกต้อง คุณต้องไม่ประนีประนอมกับความปลอดภัยของฐานข้อมูลของคุณ (เว้นแต่คุณจะไม่สนใจจริงๆ) ฉันสงสัยว่าทำไมผู้คนถึงแนะนำตัวเลือกเหล่านี้ในเมื่อคุณสามารถเลือกรหัสผ่านที่ดีได้

เพื่อแก้ไขปัญหานี้ฉันใช้คำสั่งต่อไปนี้ใน mysql: SHOW VARIABLES LIKE 'validate_password%'ตามที่ @JNevill แนะนำ "validate_password_policy" ของฉันถูกตั้งค่าเป็นปานกลางพร้อมกับสิ่งอื่น ๆ นี่คือภาพหน้าจอของการดำเนินการ:ตรวจสอบนโยบายรหัสผ่าน

ผลลัพธ์คือการอธิบายด้วยตนเอง สำหรับรหัสผ่านที่ถูกต้อง (เมื่อตั้งค่านโยบายรหัสผ่านเป็นสื่อกลาง):

  • รหัสผ่านต้องมีความยาวอย่างน้อย 8 อักขระ
  • จำนวนกรณีแบบผสมคือ 1 (ตัวอักษรเล็กอย่างน้อย 1 ตัวและตัวพิมพ์ใหญ่ 1 ตัว)
  • จำนวนนับคือ 1
  • จำนวนอักขระพิเศษขั้นต่ำคือ 1

ดังนั้นรหัสผ่านที่ถูกต้องจะต้องเป็นไปตามนโยบาย ตัวอย่างรหัสผ่านที่ถูกต้องสำหรับกฎข้างต้นอาจ:

  • Student123 @
  • NINZAcoder $ 100
  • demoPass # 00

คุณสามารถเลือกชุดค่าผสมใดก็ได้ตราบเท่าที่เป็นไปตามนโยบาย

สำหรับ"validate_password_policy"อื่น ๆคุณสามารถดูค่าของตัวเลือกต่างๆและเลือกรหัสผ่านของคุณตามนั้น (ฉันยังไม่ได้ลอง"STRONG" )

https://dev.mysql.com/doc/refman/5.6/en/validate-password-options-variables.html


2
เป็นเรื่องที่แข็งแกร่งสำหรับนโยบายรหัสผ่านยอดนิยม
เกมเมอร์ Steam

ฉันยังไม่เข้าใจคนบอกจะปรับลดการvalidate_password_policy LOWผู้ใช้สามารถสร้างหรือสร้างรหัสผ่านที่รัดกุมได้อย่างสมบูรณ์แบบเพื่อตอบสนองความต้องการ หากคุณไม่แน่ใจว่าต้องทำอย่างไรให้ใช้เครื่องมือนั้น ตัวอย่างเช่นgithub.com/joseluisq/rpasswd
joseluisq

ไม่มีการอธิบายนโยบาย คุณแค่คาดเดาว่ามันคืออะไร ในกรณีของฉันฉันกำลังสร้างชุดอักขระแบบสุ่มและไม่ว่ามันจะ 'มันไม่ตรงตามข้อกำหนด' แค่ไหนก็ตาม
Grahame Grieve

3

ขั้นตอนที่ 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';

3

ฉันมีปัญหาเดียวกันและคำตอบอยู่ตรงหน้าคุณจำไว้ว่าเมื่อคุณเรียกใช้สคริปต์ในขณะที่ติดตั้ง 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


2

สำหรับผู้ใช้ 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',
            ],
        ],
    ],

มันแก้ไขให้ฉัน


2

ปัญหาคือรหัสผ่านของคุณไม่ตรงกับกฎการตรวจสอบรหัสผ่าน คุณสามารถทำตามขั้นตอนด้านล่างเพื่อแก้ปัญหาของคุณได้ง่ายๆ

คุณสามารถดูเมทริกซ์การกำหนดค่าการตรวจสอบรหัสผ่านได้โดยพิมพ์รหัสด้านล่าง

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;

1

ตั้งรหัสผ่านที่เป็นไปตามกฎการตรวจสอบความถูกต้อง 7 MySql

เช่น:- d_VX>N("xn_BrD2y

การทำให้เกณฑ์การตรวจสอบง่ายขึ้นเล็กน้อยจะช่วยแก้ปัญหาได้

SET GLOBAL validate_password_length = 6;
SET GLOBAL validate_password_number_count = 0;

แต่แนะนำให้ใช้รหัสผ่านที่คาดเดายากเป็นวิธีแก้ปัญหาที่ถูกต้อง


1

แสดงตัวแปรเช่น 'validate_password%';

ป้อนคำอธิบายภาพที่นี่

mysql> SET GLOBAL validate_password.length = 6;

mysql> SET GLOBAL validate_password.number_count = 0;

mysql> SET GLOBAL validate_password.policy = ต่ำ;

แสดงตัวแปรเช่น 'validate_password%';

ป้อนคำอธิบายภาพที่นี่


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

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

0
mysql> SET GLOBAL validate_password.policy = 0;

1
แม้ว่ารหัสนี้อาจช่วยแก้ปัญหาของ OP ได้ แต่ทางที่ดีควรใส่คำอธิบายว่ารหัสของคุณจัดการกับปัญหาของ OP อย่างไร ด้วยวิธีนี้ผู้เข้าชมในอนาคตสามารถเรียนรู้จากโพสต์ของคุณและนำไปใช้กับโค้ดของตนเองได้ SO ไม่ใช่บริการเข้ารหัส แต่เป็นแหล่งข้อมูลสำหรับความรู้ นอกจากนี้คำตอบที่สมบูรณ์และมีคุณภาพสูงก็มีแนวโน้มที่จะได้รับการโหวตมากขึ้น คุณสมบัติเหล่านี้พร้อมกับข้อกำหนดที่ว่าโพสต์ทั้งหมดเป็นแบบในตัวเองเป็นจุดแข็งบางประการของ SO ในฐานะแพลตฟอร์มที่ทำให้มันแตกต่างจากฟอรัม คุณสามารถแก้ไขเพื่อเพิ่มข้อมูลเพิ่มเติม & / หรือเพื่อเสริมคำอธิบายของคุณด้วยเอกสารแหล่งที่มา
SherylHohman

0

มีบางช่วงเวลาที่การหาวิธีแก้ปัญหาอย่างรวดเร็วนั้นยอดเยี่ยม แต่ถ้าคุณสามารถหลีกเลี่ยงการลดข้อ จำกัด ของรหัสผ่านได้ก็จะทำให้คุณไม่ต้องปวดหัวในอนาคต

ลิงก์ถัดไปมาจากเอกสารอย่างเป็นทางการhttps://dev.mysql.com/doc/refman/5.6/en/validate-password.htmlซึ่งจะแสดงตัวอย่างที่เหมือนกับของคุณทุกประการและแก้ไขได้

ปัญหาเดียวที่คุณพบคือรหัสผ่านของคุณไม่รัดกุมเพียงพอที่จะเป็นไปตามนโยบายขั้นต่ำที่แท้จริง (ไม่แนะนำให้นำออก) ดังนั้นคุณสามารถลองใช้รหัสผ่านอื่นดังที่คุณเห็นในตัวอย่าง


0

หาก mysql โฮสต์บน aws ให้ถอนการติดตั้งปลั๊กอิน จากไฟผู้ใช้รูทด้านล่าง

UNINSTALL PLUGIN validate_password;
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.