您的位置:首页 > 数据库 > MySQL

mysql用户设置密码

2016-11-22 09:51 127 查看
6.3.5 为用户设置密码
---------------------
mysql将密码存储在名为mysql的数据库中的user表里边;
赋予密码或者修改密码的操作只有有CREATE USER权限的用户才能执行;
或者,对于名为mysql的那个数据库有权限也可以(INSERT权限-创建新账号,UPDATE权限-修改已存在账号);
如果read_only这个系统变量开启了,使用诸如CREATE USER 或者SET PASSWORD 等修改账号的语句就需要超级权限了;

mysql将密码进行hash以后存储到mysql.user这个表里边;

创建新账号并赋予密码:
mysql> CREATE USER 'jeffrey'@'localhost'
-> IDENTIFIED BY 'mypass';
对于CREATE USER语句,mysql在将密码存储到mysql.user这个表里边之前会对它自动进行hash;

给已经存在的账号设置密码或者修改已经存在的账号的密码:
mysql> ALTER USER 'jeffrey'@'localhost'
-> IDENTIFIED BY 'mypass';
如果我们不是以匿名用户登录,我们修改自己的密码的时候,可以不用指定自己的用户名:
mysql> ALTER USER USER()
-> IDENTIFIED BY 'mypass';
对于ALTER USER语法,mysql在将密码存储到mysql.user这个表里边之前会对它自动进行hash;

结合PASSWORD()函数使用SET PASSWORD:
mysql> SET PASSWORD FOR
-> 'jeffrey'@'localhost' = PASSWORD('mypass');
如果我们不是以匿名用户登录,我们修改自己的密码的时候,可以忽略掉FOR 语句:
mysql> SET PASSWORD = PASSWORD('mypass');

系统变量old_passwords的值决定了具体的hash方法,PASSWORD()函数根据这个hash方法对密码进行hash;
如果SET PASSWORD以格式不对为由拒绝了PASSWORD()返回的经过hash密码值,那么可能要改old_passwords的值来更改hash算法;
(对于mysql 5.7.6来说,不建议使用本方法,建议使用ALTER USER语法)

使用SET PASSWORD而不结合PASSWORD()函数:
对于mysql5.7.6来说,SET PASSWORD将密码字符串解释为明文,然后经过合适的hash放到mysql.user这个表里边;
mysql> SET PASSWORD FOR
-> 'jeffrey'@'localhost' = 'mypass';
在mysql5.7.6之前,SET PASSWORD将密码字符串直接解释为hash密码值存放到mysql.user这个表里边(奇怪);
mysql> SET PASSWORD FOR
-> 'jeffrey'@'localhost' = '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4';
The string must be hashed in the format required by the account authentication plugin.
A string not hashed appropriately causes client connections for the account to fail with an Access denied error.
(ERROR 1372 (HY000): Password hash should be a 41-digit hexadecimal number)

使用GRANT USAGE 语句在不影响账户当前权限的情况下修改账户的密码:
mysql> GRANT USAGE ON *.* TO 'jeffrey'@'localhost'
-> IDENTIFIED BY 'mypass';
对于GRANT USAGE来说,mysql在将密码存储到mysql.user这个表里边之前会对它自动进行hash;
(对于mysql5.7.6来说,不建议使用本方法,建议使用ALTER USER语法)

可以使用命令行修改账户密码:
shell> mysqladmin -u user_name -h host_name password "new_password"
对于使用mysqladmin 来说,mysql在将密码存储到mysql.user这个表里边之前会对它自动进行hash;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql 密码