引言用户管理一.用户1.用户信息MySQL中的用户都存储在系统数据库mysql的user表中可以通过desc user初步查看一下表结构字段解释host 表示这个用户可以从哪个主机登陆如果是localhost表示只能从本机登陆user 用户名authentication_string 用户密码通过password函数加密后的*_priv 用户拥有的权限2.创建用户语法create user 用户名登陆主机/ip identified by 密码;会发现新增用户hjq此时便可以使用新账号新密码进行登陆啦备注可能实际在设置密码的时候因为mysql本身的认证等级比较高一些简单的密码无法设置会爆出如下报错ERROR 1819 (HY000): Your password does not satisfy the current policyrequirements解决方法先刷新一下权限表然后再试一次flush privileges;解决MySQL安装后因密码策略导致的自定义密码设置失败问题通过调整密码强度等级及长度实现简单密码设置。这个博客供大家学习https://blog.csdn.net/zhanaolu4821/article/details/93622812查看密码设置相关要求SHOW VARIABLES LIKE validate_password%;这个大家下来自己玩玩关于新增用户这里需要大家注意不要轻易添加一个可以从任意地方登陆的user。注意安全问题的发生3.删除用户语法drop user 用户名主机名4.修改用户密码语法自己改自己密码set passwordpassword(新的密码);这个是mysql8.0的结果原因这个错误是因为MySQL 8.0 已经移除了PASSWORD()函数并且SET PASSWORD的语法也发生了变化。MySQL 5.7 及更早支持SET PASSWORD PASSWORD(123456);MySQL 8.0移除了PASSWORD()函数必须使用新语法解决方案MySQL 8.0方法1使用ALTER USER-- 修改当前用户的密码 ALTER USER rootlocalhost IDENTIFIED BY 123456; -- 或者指定完整用户如果 root 可以从任意主机连接 ALTER USER root% IDENTIFIED BY 123456;方法2使用SET PASSWORD新语法-- MySQL 8.0 的正确写法不推荐但可用 SET PASSWORD FOR rootlocalhost 123456; -- 或者修改当前用户 SET PASSWORD 123456;试试mysql5.7的结果这个可以跑通root用户修改指定用户的密码mysql8.0的方法 -- 不需要 PASSWORD() 函数直接写字符串 SET PASSWORD FOR hjqlocalhost 87654321; mysql5.7的使用方法 set password for 用户名主机名password(新的密码)注意关于有关密码的命令行MySQL 不会记录下来因此上下翻找不到。核心原因安全防护这是 MySQL 客户端一个刻意设计的安全特性而不是 Bug。当你在mysql命令行中输入IDENTIFIED BY 密码或PASSWORD(密码)时MySQL 客户端会检测到这些是敏感信息。为了避免密码泄露例如其他用户查看历史记录、系统日志记录、屏幕录像等客户端会跳过将这些行写入历史文件如~/.mysql_history。二.数据库的权限MySQL数据库提供的权限列表1. 给用户授权刚创建的用户没有任何权限。需要给用户授权。语法:grant 权限列表 on 库.对象名 to 用户名登陆位置 [identified by 密码]说明权限列表多个权限用逗号分开grant select on ...grant select, delete, create on ....grant all [privileges] on ... -- 表示赋予该用户在该对象上的所有权限2.*.*: 代表本系统中的所有数据库的所有对象表视图存储过程等3.库.*: 表示某个数据库中的所有数据对象(表视图存储过程等)4.identified by可选。 如果用户存在赋予权限的同时修改密码,如果该用户不存在就是创建用户这个错误是因为MySQL 8.0 中GRANT命令不能再隐式创建用户。错误原因在 MySQL 8.0 之前如果GRANT指定的用户不存在MySQL 会自动创建该用户。但MySQL 8.0 移除了这个特性必须先显式创建用户再授予权限。解决方案方法1先创建用户再授权-- 第一步创建用户 CREATE USER zhangsan% IDENTIFIED BY 你的密码; -- 第二步授予权限 GRANT ALL ON rootDB.user TO zhangsan%; -- 第三步刷新权限可选 FLUSH PRIVILEGES;方法2一条语句创建并授权MySQL 8.0.20-- 使用 CREATE USER 并同时授权需要密码 CREATE USER zhangsan% IDENTIFIED BY password WITH GRANT OPTION; GRANT ALL ON rootDB.user TO zhangsan%;完整操作示例-- 1. 创建用户假设密码设为 123456 CREATE USER zhangsan% IDENTIFIED BY 123456; -- 2. 授予 rootDB.user 表的所有权限 GRANT ALL ON rootDB.user TO zhangsan%; -- 3. 验证权限 SHOW GRANTS FOR zhangsan%; -- 4. 测试连接另开终端 -- mysql -u zhangsan -p -h 你的服务器IP终端A使用root账号在mysql5.7上直接输入结果如下终端B使用zhangsan账号在 MySQL 8.0 中root 用户默认只有rootlocalhost没有root%允许任何主机连接的 root 用户。注意如果发现赋权限后没有生效执行如下指令flush privileges;刷新权限2.回收权限语法revoke 权限列表 on 库.对象名 from 用户名登陆位置终端Aroot)终端Bzhangsan)这里的插入权限没有了不能插入3.补充和localhost的区别在于允许从什么地方连接到 MySQL 服务器。核心区别主机名允许连接的位置典型场景localhost只能本机连接服务器上的程序、本机命令行%任何地方都能连接你的笔记本电脑、其他服务器、远程应用理解记忆把 MySQL 服务器想象成一栋大楼localhost 只能从大楼内部的员工通道进入% 从大楼外部的任何门都能进北京、上海、纽约...用户 zhangsanlocalhost 可以连接在服务器本机上 mysql -u zhangsan -p -h 127.0.0.1 mysql -u zhangsan -p -h localhost 不能连接在你的笔记本电脑上 mysql -u zhangsan -p -h 122.51.13.82 用户 zhangsan%​​​​​​​ 可以连接任何地方 mysql -u zhangsan -p -h 127.0.0.1 # 本机 mysql -u zhangsan -p -h 122.51.13.82 # 远程 mysql -u zhangsan -p -h 你的公网IP # 其他网络为什么要有两个原因安全考虑用户安全风险适用场景rootlocalhost低只能本机连管理员维护root%高全世界都能试密码强烈不推荐applocalhost低服务器上的本地程序app192.168.1.%中只允许内网连接app%中高需要远程访问的应用