当前位置: 首页 > news >正文

MySQL 用户管理

如果我们只能使用 root 用户,这样存在安全隐患。这时就需要使用 MySQL 的用户管理。

一、 用户

1、用户信息

MySQL 中的用户都存储在系统数据库 MySQL 的 user 表中。

字段解释:

  • host:表示这个用户可以从哪个主机登陆,如果是 localhost,表示只能从本机登陆。
  • user:用户名。
  • authentication_string:用户密码通过 password 函数加密后的。
  • *_priv:用户拥有的权限。

2、创建用户

create user '用户名'@'登陆主机/ip' identified by '密码';

提示:如果遇到错误描述:

ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement

解决方法:先刷新一下权限表,然后再试一次:

flush privileges;

创建用户时带上了 %:(此时就可以在 Windows 下远程访问 Linux 客户端。) 


此时便可以使用新账号新密码进行登陆。

注意:可能实际在设置密码的时候,因为 MySQL 本身的认证等级比较高,一些简单的密码无法设置,可能会报错:

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

 

【解决方案】

(1)查看 MySQL 初始的密码策略

 查看密码设置相关要求:

SHOW VARIABLES LIKE 'validate_password%';


(2)设置密码的验证强度等级

设置 validate_password_policy 的全局参数为 LOW 即可,输入设值语句:

set global validate_password_policy=LOW;

(3)设置密码长度

当前密码长度为 8 ,如果不介意的话就不用修改了,按照通用的来讲,设置为 6 位的密码,设置 validate_password_length 的全局参数为 6 即可,输入设值语句:

set global validate_password_length=6;


(4)密码策略修改

 现在可以为 MySQL 设置简单密码了,只要满足六位的长度即可,输入修改语句:

ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';

可以看到修改成功,表示密码策略修改成功了。


注意:在默认密码的长度最小值为 4 ,由大/小写字母各一个 + 阿拉伯数字一个 + 特殊字符一个,只要设置密码的长度小于 3 ,都将自动设值为 4。  

注意:关于新增用户这里,需要注意,不要轻易添加一个可以从任意地方登陆的 user。 

【扩展】

关于 MySQL 密码策略相关参数:

1)validate_password_length  固定密码的总长度。
2)validate_password_dictionary_file 指定密码验证的文件路径。
3)validate_password_mixed_case_count  整个密码中至少要包含大/小写字母的总个数。
4)validate_password_number_count  整个密码中至少要包含阿拉伯数字的个数。
5)validate_password_policy 指定密码的强度验证等级,默认为 MEDIUM。
关于 validate_password_policy 的取值:

  • 0/LOW:只验证长度。
  • 1/MEDIUM:验证长度、数字、大小写、特殊字符。
  • 2/STRONG:验证长度、数字、大小写、特殊字符、字典文件。

6)validate_password_special_char_count 整个密码中至少要包含特殊字符的个数。

3、删除用户

drop user '用户名'@'主机名';

 

 4、修改用户密码

(1)自己改自己密码 

set password=password('新的密码');

 (2)root 用户修改指定用户的密码

set password for '用户名'@'主机名'=password('新的密码');

 注意:凡是有关密码的命令行,MySQL 不会记录下来,上下翻找不到。 

二、数据库的权限

MySQL 数据库提供的权限列表:

 


1、给用户授权

 刚创建的用户没有任何权限,需要给用户授权。

grant 权限列表 on 库.对象名 to '用户名'@'登陆位置' [identified by '密码'];

  • 权限列表,多个权限用逗号分开 

grant select on ...

grant select, delete, create on ....

grant all [privileges] on ... 表示赋予该用户在该对象上的所有权限

  • *.*:代表本系统中的所有数据库的所有对象(表,视图,存储过程等)
  • 库.*:表示某个数据库中的所有数据对象(表,视图,存储过程等)
  • identified by 可选。如果用户存在,赋予权限的同时修改密码,如果该用户不存在,就是创建用户
  • 终端 A(root 账号) 


  • 终端 B(zhangsan 账号)(这里在远端效果一致)

 


注意:如果发现赋权限后,没有生效,执行如下指令:

flush privileges;

 2、回收权限

revoke 权限列表 on 库.对象名 from '用户名'@'登陆位置'; 

 

  • 终端 A(root 账号) 


  • 终端 B(zhangsan 账号)(这里在远端效果一致) 

 

 

 

http://www.dtcms.com/a/301012.html

相关文章:

  • 第六章 JavaScript 互操(3)JS调用.NET
  • Django5.1(131)—— 表单 API二(API参考)
  • 电科金仓 KingbaseES 深度解码:技术突破・行业实践・沙龙邀约 -- 融合数据库的变革之力
  • Java面试宝典:MySQL索引
  • 2-4、Dify案例实践—基于工作流构建商城用户评价智能分析系统
  • PyTorch武侠演义 第一卷:初入江湖 第7章:矿洞中的计算禁制
  • 基于mnn架构在本地 c++运行llm与mllm模型
  • 数据结构基本内容(第四篇:队列)
  • 2025.7.27
  • Java面试题及详细答案120道之(061-080)
  • C++算法竞赛篇(六)一维数组题型讲解
  • 【工具】python汇总发票(含源码)
  • Java排序算法之<希尔排序>
  • 7月27日星期日今日早报简报微语报早读
  • GitHub 趋势日报 (2025年07月25日)
  • Linux 系统网络配置及 IP 地址相关知识汇总
  • STM32 I2C通信完整教程:从协议原理到硬件实现
  • 一文快速了解Docker和命令详解
  • 模拟实现python的sklearn库中的Bunch类以及 load_iris 功能
  • 文件权限标记机制在知识安全共享中的应用实践
  • minio 对象存储
  • java的break能加标签,return可以加标签吗
  • 从一副蓝牙耳机里get倍思的“实用而美”
  • Python 程序设计讲义(23):循环结构——循环控制语句 break 与 continue
  • 背包DP之多重背包
  • 边缘提取算法结合深度学习的肺结节分割预测
  • 「日拱一码」040 机器学习-不同模型可解释方法
  • 【机器学习】第七章 特征工程
  • 【机器学习-3】 | 决策树与鸢尾花分类实践篇
  • 探索 Linux 调试利器:GDB 入门与实战指南