mysql出现ERROR 1819 (HY000)的解决方法

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements,出现这个问题怎么办?不用着急,下面给出答案。

为了加强安全性,MySQL5.7为root用户随机生成了一个密码,在error log中,关于error log的位置,如果安装的是RPM包,则默认是/var/log/mysqld.log。

一般可通过log_error设置

mysql> select @@log_error;
+---------------------+
| @@log_error     |
+---------------------+
| /var/log/mysqld.log |
+---------------------+
1 row in set (0.00 sec)

可通过# grep "password" /var/log/mysqld.log 命令获取MySQL的临时密码

代码如下:

2016-01-19T05:16:36.218234Z 1 [Note] A temporary password is generated for root@localhost: waQ,qR%be2(5

用该密码登录到服务端后,必须马上修改密码,不然会报如下错误:

mysql> select user();
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

如果只是修改为一个简单的密码,会报以下错误:

mysql> ALTER USER USER() IDENTIFIED BY '12345678';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

这个其实与validate_password_policy的值有关。

validate_password_policy有以下取值:

默认是1,即MEDIUM,所以刚开始设置的密码必须符合长度,且必须含有数字,小写或大写字母,特殊字符。

有时候,只是为了自己测试,不想密码设置得那么复杂,譬如说,我只想设置root的密码为123456。

必须修改两个全局参数:

首先,修改validate_password_policy参数的值

mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.00 sec)

这样,判断密码的标准就基于密码的长度了。这个由validate_password_length参数来决定。

mysql> select @@validate_password_length;
+----------------------------+
| @@validate_password_length |
+----------------------------+
|             8 |
+----------------------------+
1 row in set (0.00 sec)

validate_password_length参数默认为8,它有最小值的限制,最小值为:

validate_password_number_count
+ validate_password_special_char_count
+ (2 * validate_password_mixed_case_count)

其中,validate_password_number_count指定了密码中数据的长度,validate_password_special_char_count指定了密码中特殊字符的长度,validate_password_mixed_case_count指定了密码中大小字母的长度。

这些参数,默认值均为1,所以validate_password_length最小值为4,如果你显性指定validate_password_length的值小于4,尽管不会报错,但validate_password_length的值将设为4。如下所示:

mysql> select @@validate_password_length;
+----------------------------+
| @@validate_password_length |
+----------------------------+
|             8 |
+----------------------------+
1 row in set (0.00 sec)

mysql> set global validate_password_length=1;
Query OK, 0 rows affected (0.00 sec)

mysql> select @@validate_password_length;
+----------------------------+
| @@validate_password_length |
+----------------------------+
|             4 |
+----------------------------+
1 row in set (0.00 sec)

如果修改了validate_password_number_count,validate_password_special_char_count,validate_password_mixed_case_count中任何一个值,则validate_password_length将进行动态修改。

mysql> select @@validate_password_length;
+----------------------------+
| @@validate_password_length |
+----------------------------+
|             4 |
+----------------------------+
1 row in set (0.00 sec)

mysql> select @@validate_password_mixed_case_count;
+--------------------------------------+
| @@validate_password_mixed_case_count |
+--------------------------------------+
|                  1 |
+--------------------------------------+
1 row in set (0.00 sec)

mysql> set global validate_password_mixed_case_count=2;
Query OK, 0 rows affected (0.00 sec)

mysql> select @@validate_password_mixed_case_count;
+--------------------------------------+
| @@validate_password_mixed_case_count |
+--------------------------------------+
|                  2 |
+--------------------------------------+
1 row in set (0.00 sec)

mysql> select @@validate_password_length;
+----------------------------+
| @@validate_password_length |
+----------------------------+
|             6 |
+----------------------------+
1 row in set (0.00 sec)

当然,前提是validate_password插件必须已经安装,MySQL5.7是默认安装的。

那么如何验证validate_password插件是否安装呢?可通过查看以下参数,如果没有安装,则输出将为空。

mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+-------+
| Variable_name            | Value |
+--------------------------------------+-------+
| validate_password_dictionary_file  |    |
| validate_password_length       | 6   |
| validate_password_mixed_case_count  | 2   |
| validate_password_number_count    | 1   |
| validate_password_policy       | LOW  |
| validate_password_special_char_count | 1   |
+--------------------------------------+-------+
6 rows in set (0.00 sec)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 详解MySQL的用户密码过期功能

    Payment Card Industry,即支付卡行业,PCI行业表示借记卡.信用卡.预付卡.电子钱包.ATM和POS卡及相关的业务. PCI DSS,即PCI数据安全标准(Payment Card Industry Data Security Standard)是由PCI安全标准委员会制定,旨在使国际上采用一致的数据安全措施. PCI DSS标准要求用户每隔90天必须更改他们的密码.那么MySQL数据库该怎样适应这个情况?幸运的是,在MySQL版本5.6.6版本起,添加了password_e

  • 解决MySQL安装重装时出现could not start the service mysql error:0问题的方法

    当各位在安装.重装时出现could not start the service mysql error:0 原因: 卸载mysql时并没有完全删除相关文件和服务,需要手动清除. 安装到最后一步execute时不能启动服务的解决方法: 首先,在管理工具->服务里面将MySQL的服务给停止(有的是没有安装成功,有这个服务,但是已经停止了的),win+R->cmd,打开命令提示符窗口,输入命令:sc delete mysql(查看服务,此时服务中已没有mysql),将已停的服务删除,卸载MySQL记

  • MySQL的root密码忘记怎么办 修改root密码的方式

    如果哪天你忘记了线上MySQL数据库的root密码,怎么办? 大家往往会想到skip-grant-tables参数,具体步骤如下: 1. 关闭MySQL数据库,因为root密码忘记了,mysqladmin无法使用,此时,只能通过kill pid关闭程序. 在这里,科普一下kill 和kill -9的区别 默认参数下,kill 发送SIGTERM信号给进程,告诉进程,你需要被关闭,请自行停止运行并退出. kill -9 发送SIGKILL信号给进程,告诉进程,你被终结了,请立刻退出.与SIGTER

  • Windows下mysql修改root密码的4种方法

    MySQL是一个关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一.搭配 PHP 和 Apache 可组成良好的开发环境.因此用的很广泛.很多人都会遇到MySQL需要修改密码的情况,比如密码太简单.忘记密码等等.这里我就教大家几种修改MySQL密码的方法.这里以修改root密码为例,操作系统为windows. 先要声明一点,大部分情况下,修改MySQL是需要

  • 忘记MySQL的root密码该怎么办

    在MySQL日常开发或者是维护中,有一些问题或是故障往往是难以避免的,如丢失密码.表损坏.在此总结一下常忘记MySQL的root密码解决办法: 1.登录数据库所在服务器,手动kill掉Mysql进程 关闭进程的命令为:kill 进程号(linux下) 关闭进程的命令为:taskkill 进程号(win下) 怎么查看进程号呢? 我们都知道MySQL的进程号一般都会保存在Mysql数据目录下的,它记录了Mysql的服务进程号.文件名为hostname.pid,如下,其中YEGZT8JOIIU2LKY

  • MySQL ERROR 1045 (28000) 错误的解决办法

    错误现象: ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: NO)  ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: YES) windows下,以上两个错误的解决方法,本人亲测有效,现分享解决方案如下: 1.找到配置文件my.ini  ,然后将其打开,可以选择用记事本打开. 2

  • php+MySQL实现登录时验证登录名和密码是否正确

    直入主题,先看php校验登录名和密码是否正确的代码: <?php $servername = "服务器名"; $username = "账户名"; $password = "密码"; $dbname = "数据库名"; ?> <?php // Session需要先启动. session_start(); //判断uname和pwd是否赋值 if(isset($_POST['uname']) &&

  • 解决mysql安装时出现error Nr.1045问题的方法

    我们在windows下安装MySQL时会出现Access denied for user 'root'@localhost'(using password:No)的问题,这个问题是因为你的机器上之前安装过mysql,或者这 一次安装配置了新密码,进入应用的最后一步时候由于某些原因卡出了或者由于服务未启动等原因导致无法配置成功,最终结果是,配置未成功,密码设置已经保存 进去了.这样我们调整好了服务等原因后,进行重新配置的时候,会发现在设置密码的时候,多了一个旧密码输入框.其实这也没什么,在密码知道

  • 解决MySQL忘记密码问题的方法

    为大家提供的MySQL忘记密码的解决方案,供大家参考,具体内容如下 1.在操作系统windows操作系统,xp或win7.中进入如下目录: 复制代码 代码如下: C:\Users\Administrator>cd C:\Program Files\MySQL\MySQL Server 5.5\bin 2.停止MySQL服务 C:\Program Files\MySQL\MySQL Server 5.5\bin>net stop mysql //MySQL 服务正在停止. //MySQL 服务已

  • 解决MySQL5.1安装时出现Cannot create windows service for mysql.error:0

    安装MySQL5.1过程中,我把以前MySQL5.0的GUI工具和服务器全部删掉,安装目录全部删掉,数据文件目录名字改掉,注册表用完美卸载清理了.  然后重启安装MySQL5.1(我以前遇到过服务启动不了的情况,这样做就搞定了),可配置到最后一步时出现Cannot create windows service for MySQL.error:0错误,把配置工具关掉重试几次都不行,后来百度了下,听说要在系统管理员用户下执行sc delete mysql删除MySQL服务后再启动配置工具配置,实在不

随机推荐