MySQL——用户与密码
mysql安装完成之后,在/var/log/mysqld.log文件中给root生成了一个默认密码。通过下面的方式找到root默认密码,然后登录mysql进行修改:
1 | grep 'temporary password' / var / log / mysqld.log #查看默认密码 |
1 | set password for 'root' @ 'localhost' = password( 'Password' ); #修改用户密码 |
查看当前登录用户:
1 | select user(); |
查看用户:
1 | select host,user from mysql.user; #8.0版本 |
用户添加和授权
1 2 3 4 5 | #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远程访问的权限。 |
删除用户
1 | Delete FROM user Where User = 'zabbix' and Host = 'localhost' ; #5.7版本 |
1 | delete from mysql.user where user = 'zabbix' and host = 'localhost' ; 8.0 版本 |
修改用户密码:
1 | ALTER USER "root" @ "localhost" IDENTIFIED BY "new-password" ; |
修改用户host:
1 | update user set host = 'localhost' where user = 'zabbix' ; #早期版本 |
1 | update mysql.user set host = 'localhost' where user = 'zabbix' ; #8.0版本 |
查看某个用户权限:
1 | show grants for zabbix; |
1 | select * from mysql.user where user = 'zabbix' \G; |
在 MySQL 8.0 中,caching_sha2_password
是默认的身份验证插件而不是之前版本的 mysql_native_password
,默认的密码加密方式是 SHA2
查看MySQL的认证方式
1 | show variables like 'default_authentication_plugin' ; |
如果需要保持之前的验证方式并保持之前版本的密码加密方式需要在配置文件 /etc/my.cnf 中修改以下配置项并重启服务后生效。
1 2 3 4 | [mysqld] character_set_server = utf8 init_connect = 'SET NAMES utf8' default_authentication_plugin = mysql_native_password #更改默认密码认证方式。 |
1 | systemctl restart mysqld #重启服务 |
将某个特定用户的加密方式更改:
1 2 | 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,单位为天 。
1 | show variables like 'default_password_lifetime' ; |
如果你要建立一个全局策略,让所有用户的密码的使用期限为六个月,可在服务端配置文件 /etc/my.cnf 中修改 default_password_lifetime
配置项的值为 180。
default_password_lifetime=0
或直接在MySQL中进行设置。
1 2 3 4 5 | # 设置默认密码过期策略为 180 天后过期 mysql> SET PERSIST default_password_lifetime = 180 ; # 设置默认密码过期策略为永不过期 mysql> SET PERSIST default_password_lifetime = 0 ; |
创建或修改一个用户的密码过期时间为 90 天。
1 2 | CREATE USER 'mike' @ '%' IDENTIFIED BY '000000' PASSWORD EXPIRE INTERVAL 90 DAY; ALTER USER `mike`@` % ` PASSWORD EXPIRE INTERVAL 90 DAY; |
创建或修改一个用户的密码过期时间为永不过期。
1 2 | CREATE USER 'mike' @ '%' PASSWORD EXPIRE NEVER; ALTER USER 'mike' @ '%' PASSWORD EXPIRE NEVER; |
创建或修改一个遵循全局到期策略的用户。
1 2 | CREATE USER 'mike' @ '%' PASSWORD EXPIRE DEFAULT; ALTER USER 'mike' @ '%' PASSWORD EXPIRE DEFAULT; |
查看用户的密码过期时间。
1 2 3 4 5 6 7 8 9 10 11 12 | 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 开始,用户管理方面添加了锁定/解锁用户帐户的新特性。
创建一个带帐户锁的用户
1 | mysql> CREATE USER 'mike-temp1' @ '%' IDENTIFIED BY '000000' ACCOUNT LOCK; |
接下来尝试用新创建的用户登陆,此时会得到一个 ERROR 3118 错误消息提示。
1 2 3 | $ 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. |
如果你需要解锁此用户,此时就需要使用以下语句对其进行解锁了。
1 | ALTER USER 'mike-temp1' @ '%' ACCOUNT UNLOCK; |
修改一个用户为锁定状态
1 | ALTER USER 'mike' @ '%' ACCOUNT LOCK; |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)