mysql安装完成之后,在/var/log/mysqld.log文件中给root生成了一个默认密码。通过下面的方式找到root默认密码,然后登录mysql进行修改:
grep 'temporary password' /var/log/mysqld.log #查看默认密码
set password for 'root'@'localhost'=password('Password'); #修改用户密码
查看当前登录用户:
select user();
查看用户:
select host,user from mysql.user; #8.0版本
用户添加和授权
#8.0以前版本 GRANT ALL PRIVILEGES ON *.* TO `mike`@`%` IDENTIFIED BY '000000' WITH GRANT OPTION; #8.0以后版本 CREATE USER 'zabbix'@'%' IDENTIFIED BY '123456'; #创建一个用户 GRANT ALL ON zabbix.* TO 'zabbix'@'%' WITH GRANT OPTION; #授予zabbix的远程登录权和zabbix远程访问的权限。
删除用户
Delete FROM user Where User='zabbix' and Host='localhost'; #5.7版本
delete from mysql.user where user='zabbix' and host='localhost'; 8.0版本
修改用户密码:
ALTER USER "root"@"localhost" IDENTIFIED BY "new-password";
修改用户host:
update user set host = 'localhost' where user = 'zabbix'; #早期版本
update mysql.user set host = 'localhost' where user = 'zabbix'; #8.0版本
查看某个用户权限:
show grants for zabbix;
select * from mysql.user where user='zabbix'\G;
在 MySQL 8.0 中,caching_sha2_password
是默认的身份验证插件而不是之前版本的 mysql_native_password
,默认的密码加密方式是 SHA2
查看MySQL的认证方式
show variables like 'default_authentication_plugin';
如果需要保持之前的验证方式并保持之前版本的密码加密方式需要在配置文件 /etc/my.cnf 中修改以下配置项并重启服务后生效。
[mysqld] character_set_server=utf8 init_connect='SET NAMES utf8' default_authentication_plugin = mysql_native_password #更改默认密码认证方式。
systemctl restart mysqld #重启服务
将某个特定用户的加密方式更改:
ALTER USER 'root'@'127.0.0.1' IDENTIFIED WITH mysql_native_password BY 'password'; # 更新用户的密码加密方式为之前版本的方式 FLUSH PRIVILEGES; # 刷新用户权限
密码过期时间管理
MySQL 从 5.6.6 开始引入密码自动过期的新功能,并在 MySQL 5.7.4 版本中改进了用户密码过期时间这个特性。现在可以通过一个全局变量 default_password_lifetime
来设置一个全局的自动密码过期策略。
default_password_lifetime
其默认值为 0,表示禁用自动密码过期。default_password_lifetime
的值如是是正整数 N ,则表示允许的设置密码生存周期 为 N,单位为天 。
show variables like 'default_password_lifetime';
如果你要建立一个全局策略,让所有用户的密码的使用期限为六个月,可在服务端配置文件 /etc/my.cnf 中修改 default_password_lifetime
配置项的值为 180。
default_password_lifetime=0
或直接在MySQL中进行设置。
# 设置默认密码过期策略为 180 天后过期 mysql> SET PERSIST default_password_lifetime = 180; # 设置默认密码过期策略为永不过期 mysql> SET PERSIST default_password_lifetime = 0;
创建或修改一个用户的密码过期时间为 90 天。
CREATE USER 'mike'@'%' IDENTIFIED BY '000000' PASSWORD EXPIRE INTERVAL 90 DAY; ALTER USER `mike`@`%` PASSWORD EXPIRE INTERVAL 90 DAY;
创建或修改一个用户的密码过期时间为永不过期。
CREATE USER 'mike'@'%' PASSWORD EXPIRE NEVER; ALTER USER 'mike'@'%' PASSWORD EXPIRE NEVER;
创建或修改一个遵循全局到期策略的用户。
CREATE USER 'mike'@'%' PASSWORD EXPIRE DEFAULT; ALTER USER 'mike'@'%' PASSWORD EXPIRE DEFAULT;
查看用户的密码过期时间。
mysql> select user,host,password_last_changed,password_lifetime,password_expired from mysql.user; +------------------+-----------+-----------------------+-------------------+------------------+ | user | host | password_last_changed | password_lifetime | password_expired | +------------------+-----------+-----------------------+-------------------+------------------+ | mike | % | 2018-05-07 11:13:39 | 90 | N | | root | % | 2018-05-04 16:46:05 | NULL | N | | mysql.infoschema | localhost | 2018-05-04 16:45:55 | NULL | N | | mysql.session | localhost | 2018-05-04 16:45:55 | NULL | N | | mysql.sys | localhost | 2018-05-04 16:45:55 | NULL | N | | root | localhost | 2018-05-04 16:46:05 | NULL | N | +------------------+-----------+-----------------------+-------------------+------------------+ 6 rows in set (0.00 sec)
锁定/解锁用户帐户
从 MySQL 5.7.8 开始,用户管理方面添加了锁定/解锁用户帐户的新特性。
创建一个带帐户锁的用户
mysql> CREATE USER 'mike-temp1'@'%' IDENTIFIED BY '000000' ACCOUNT LOCK;
接下来尝试用新创建的用户登陆,此时会得到一个 ERROR 3118 错误消息提示。
$ mysql -umike-temp1 -p000000 mysql: [Warning] Using a password on the command line interface can be insecure. ERROR 3118 (HY000): Access denied for user 'mike-temp1'@'172.22.0.1'. Account is locked.
如果你需要解锁此用户,此时就需要使用以下语句对其进行解锁了。
ALTER USER 'mike-temp1'@'%' ACCOUNT UNLOCK;
修改一个用户为锁定状态
ALTER USER 'mike'@'%' ACCOUNT LOCK;