MySQL 安全管理

权限表

MySQL 服务器通过权限表来控制用户对数据库的访问,由 mysql_install_db 脚本初始化,MySQL 会根据这些权限表的内容为每个用户赋予相应的权限

user 表是 MySQL 最重要的一个权限表,有 49 个字段,这些字段可以分成四类:

  • 范围列:包括 Host、User,分别表示主机名、用户名,Host 指明允许访问的 IP 或主机范围,User 指明允许访问的用户名
  • 权限列:权限列字段描述用户在全局范围内允许进行的操作,该列的字段值类型为 ENUM,只能取 Y 和 N
  • 安全列:安全列有 12 个字段,其中两个和 ssl 相关、两个和 x509 相关、其他八个是授权插件和密码相关
  • 资源控制栏:用于限制用户使用的资源。如果用户查询或连接的次数在一小时内超过资源控制限制,则将锁定到下一小时再次执行。
    [En]

    Resource control column: used to limit the resources used by users. If the number of user queries or connections exceeds the resource control limit within one hour, it will be locked until the next hour to execute again.*

db 表存储用户对某个数据库的操作权限,决定用户能从哪个主机存取哪个数据库,大致可以分为两类字段:

  • 用户列:用户列有三个字段,分别是 Host、Db 和 User,分别表示主机名、数据库名和用户名
  • 权限列:确定用户是否具有创建和修改存储过程的权限
    [En]

    permission column: determines whether the user has permission to create and modify stored procedures*

tables_priv 表用来对表设置操作权限,有八个字段:

  • Host、Db、User 和 Table_name 四个字段分别表示主机名、数据库名、用户名和表名
  • Grantor 表示修改记录的用户
  • Timestamp 表示修改该记录的时间
  • Table_priv 表示对象操作权限。包括 Select、Insert、Delete 等
  • Column_priv 表示对表中的列的操作权限,包括 Select、Insert、Update 和 References

columns_priv 表用来对表的某一列设置权限,字段 Column_name 用来指定对哪些数据列具有操作权限

账户管理

在 MySQL8 以前可以使用 GRANT 语句新建用户,MySQL8 以后需要先创建用户才能执行 GRANT 语句

CREATE USER user[IDENTIFIED BY 'password'][,user[IDENTIFIED BY 'password']]...

user 参数表示新建用户的账户,由用户(User)和主机名(Host)构成,形式如 Justin@localhost,IDENTIFIED BY 关键字用来设置用户的密码,password 参数表示用户密码,可以同时创建多个用户,新用户可以没有初始密码

DROP USER user[,user]...

user 参数表示新建用户的账户,由用户(User)和主机名(Host)构成,可以同时删除多个用户

也可以使用 DELETE 语句直接将用户信息从 mysql.user 表删除,前提是拥有对 mysql.user 表的删除权限

DELETE FROM mysql.user WHERE Host='hostname' AND User='username';

root 用户可以使用 ALTER 命令修改密码

ALTER USER USER() IDENTIFIED BY 'new_password'

也可以使用 SET 语句修改密码

SET PASSWORD='new_password'

root 用户可以使用 ALTER 命令修改普通用户的密码

ALTER USER user [IDENTIFIED BY 'new_password'][,user [IDENTIFIED BY 'new_password']]...

也可以使用 SET 语句修改普通用户的密码

SET PASSWORD FOR 'username'@'hostname'='new_password'

普通用户也可对自己的密码进行管理,方式与 Root 用户相同

密码管理

数据库管理员可以手动设置帐户密码过期,您也可以建立自动密码过期策略。到期策略可以是全局的,也可以为每个帐户设置单独的到期策略。

[En]

The database administrator can manually set the account password expiration, or you can establish an automatic password expiration policy. Expiration policies can be global, or you can set separate expiration policies for each account.

手动设置账号密码过期:

ALTER USER user PASSWORD EXPIRE

密码过期策略基于最后修改密码的时间自动将密码设置为过期,MySQL 使用 default_password_lifetime 系统变量建立全局密码过期策略,默认值为 0 表示不使用自动过期策略。它允许的值是正整数 N,表示密码必须每隔 N 天进行修改。该值可在服务器的配置文件设置,也可以使用 SQL 语句设置,使用 SQL 语句方式如下:

SET PERSIST default_password_lifetime=180

每个帐户可以遵循全局密码到期策略,也可以单独设置该策略

[En]

Each account can either follow the global password expiration policy or set the policy individually

设置账号密码90天过期
CREATE USER 'Justin@localhost' PASSWORD EXPIRE INTERVAL 90 DAY;
ALTER USER 'Justin@localhost' PASSWORD EXPIRE INTERVAL 90 DAY;
设置账号密码永不过期
CREATE USER 'Justin@localhost' PASSWORD EXPIRE NEVER;
ALTER USER 'Justin@localhost' PASSWORD EXPIRE NEVER;
沿用全局密码过期策略
CREATE USER 'Justin@localhost' PASSWORD EXPIRE DEFAULT;

MySQL 限制使用已用过的密码,重用限制策略基于密码更改时间和使用时间,可以是全局的,也可以为每个账号设置单独的策略

MySQL 基于以下规则来限制密码重用:

可以在配置文件设置密码重用策略,也可以使用 SQL 语句

密码重用数量
SET PERSIST password_history=6;
密码重用周期
SET PERSIST password_reuse_interval=365;

每个帐户可以遵循全局密码重复使用策略,也可以单独设置该策略。

[En]

Each account can either follow the global password reuse policy or set the policy individually.

不能使用最近5个密码
CREATE USER 'Justin@localhost' PASSWORD PASSWORD HISTORY 5;
ALTER USER 'Justin@localhost' PASSWORD PASSWORD HISTORY 5;
不能使用最近365天内的密码
CREATE USER 'Justin@localhost' PASSWORD REUSE INTERVAL 365 DAY;
ALTER USER 'Justin@localhost' PASSWORD REUSE INTERVAL 365 DAY;

在 MySQL 中,角色是权限的集合,可以为角色添加或移除权限。用户可以被赋予角色,同时也被赋予角色包含的权限

创建角色语句如下:

CREATE ROLE 'role_name'[@'host_name'][,'role_name'[@'host_name']]...

为角色授权语句如下:

GRANT privileges ON table_name TO 'role_name'[@'host_name'];

privileges 代表权限的名称,多个权限以逗号1隔开,可以使用 SHOW 语句查询权限名称

SHOW PRIVILEGES\G;
GTANT role[,role2,...] TO user[,user2,...];

role 代表角色,user 代表用户,添加之后如果角色处于未激活状态,需要先将用户对应的角色激活

SET ROLE DEFAULT

撤销用户角色的 SQL 语句如下:

REVOKE role FROM user;

撤销角色权限的 SQL 语句如下:

REVOKE privileges ON tablename FROM 'rolename';
DROP ROLE role[,role2]...

Original: https://www.cnblogs.com/Yee-Q/p/16213136.html
Author: 低吟不作语
Title: MySQL 安全管理

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/505432/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 从零开始搭建高可用的k8s集群

    一、环境准备 使用Hyper-V虚拟机功能搭建三台Centos虚拟机系统,配置好静态IP,分别为k8s-node1(192.168.0.8),k8s-node2(192.168.0…

    数据库 2023年6月14日
    0139
  • 阿里巴巴编码规范-考试认证

    阿里巴巴编码规范-考试认证 雨打梨花深闭门,忘了青春,误了青春。 1、注册阿里云账号 2、购买认证 需要怒支付一顿早餐Q,可以用支付宝支付,选择支付宝支付然后直接输入支付密码就OK…

    数据库 2023年6月14日
    0225
  • 汇编debug的安装

    实验一查看CPU和内存,用机器指令和汇编指令编程 在做实验前需要debug命令。 工具:dosbox,debug.exe 安装:dosbox :https://www.dosbox…

    数据库 2023年6月11日
    0188
  • eclipse安装反编译插件

    一、下载插件 1、官方地址:http://jd.benow.ca/ 2、百度网盘:http://pan.baidu.com/s/1eSJ7Tiq 密码:sr6p 二、打开eclip…

    数据库 2023年6月9日
    0157
  • 线程的同步

    线程同步机制同步块:Java中提供了同步机制,可以有效的防止资源冲突。同步机制使用 synchronized关键字 使用该关键字的代码块称为同步块。同步块 语法: synchron…

    数据库 2023年6月16日
    0173
  • SSM简单整合!!!

    3. 在maven中添加依赖 org.mybatis mybatis-spring 2.0.7 org.springframework spring-jdbc 5.3.2 org….

    数据库 2023年6月16日
    0130
  • 2022-08-17 DQL—-子查询,日期格式

    子查询、日期格式 DQL查询语言 子查询 根据结果集中的行数,子查询可以分为以下几类: [En] According to the number of rows in the re…

    数据库 2023年5月24日
    0130
  • Spark学习(4) Spark Streaming

    Apache Flink SparkSteaming Storm 架构介于spark和storm之间,主从结构与sparkStreaming相似,DataFlow Grpah与st…

    数据库 2023年6月16日
    0125
  • 用Python自动实现图表可视化操作,提高工作效率,又能有更多的时间摸鱼了~

    在数据分析过程中,一般提取数据库里面的数据时候,拿着表格数据反复思索,希望能够根据自己所想立马生成一张数据可视化的图表来更直观的呈现数据。 但想要进行数据可视化的时候,往往需要调用…

    数据库 2023年6月14日
    0102
  • Office直通车

    数据库篇 数据库架构 为什么要使用索引? 对于数据量较大的表,建立索引避免全表扫描,能够提高查询速度,提高效率 什么样的信息能成为索引? 主键、唯一键、普通键 索引数据结构? 主流…

    数据库 2023年6月6日
    0348
  • 小心陷入MySQL索引的坑

    索引可以说是数据库中的一个大心脏了,如果说一个数据库少了索引,那么数据库本身存在的意义就不大了,和普通的文件没什么两样。所以说一个好的索引对数据库系统尤其重要,今天来说说MySQL…

    数据库 2023年6月6日
    0142
  • Mysql的读写分离中间件该怎么写?听我来说。

    网上有很多读写分离的中间件,像proxy,mycat等等,由于本人比较懒,懒得去读各种开源的东西,还是想造轮子来得快。 1、了解mysql通信协议,其中有分4.1之前和4.1版本的…

    数据库 2023年6月14日
    0170
  • macOS快捷键

    1. 最小化所有应用程序 command+option+h+m 2. 同应用窗口切换 command ~ 3. 截图 "全&a…

    数据库 2023年6月14日
    0110
  • 使用Ant从零开始搭建tomcat源码环境

    使用Ant从零开始搭建tomcat源码环境 视频教程 准备工作 编辑 Idea,且装上Checkstyle插件(或者其他开发工具) 编译依赖的Jar包. 开始搭建 搭建编译环境 安…

    数据库 2023年6月11日
    0150
  • 动手实验查看MySQL索引的B+树的高度

    一:文中几个概念 h:统称索引的高度;h1:主键索引的高度;h2:辅助索引的高度;k:非叶子节点扇区个数。 二:索引结构 叶子节点其实是双向链表,而叶子节点内的行数据是单向链表,该…

    数据库 2023年6月14日
    0157
  • 《Redis设计与实现》

    由浅到深,逐步讲解Redis 本书主要分为四大部分。 第一部分”数据结构与对象”: 介绍了Redis中的各种对象及其数据结构,并说明这些数据结构如何影响对象…

    数据库 2023年6月6日
    0151
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球