返回顶部
首页 > 资讯 > 数据库 >MySQL 中的权限管理及验证流程
  • 710
分享到

MySQL 中的权限管理及验证流程

2024-04-02 19:04:59 710人浏览 薄情痞子
摘要

目录引言权限的验证流程第一层:用户登录第二层:全局权限第三层:数据库级别权限第四层 :数据表级权限第五层:字段级权限第六层:对象级权限总结引言 某天,女朋友突然问你:“还

引言

某天,女朋友突然问你:“还有多少私房钱?”这个时候惊恐的你该怎么办呢?直接把余额给她看?显然很不符合我们的性格;如果这个时候能有一个临时的支付宝账号,让她看不到真实的余额该有多好啊!

这样的账号就涉及到了数据库的权限问题,下面我们一起来讨论一下 Mysql 中的权限管理。

权限的验证流程

通常,我们提及数据库中的权限的时候,我们想到的可能是 mysql 数据库中的 user 表。但是,我想告诉你的是 Mysql 数据库中的权限验证不仅仅只有一个 user 表这么简单,我们可以通过下图深入了解一下 MySQL 数据库的认证体系。

通过上图,我们可以清晰地看到,MySQL 数据的权限认证过程并不是只有一个 user 表在起作用。

第一层:用户登录

在用户登录 MySQL 数据库的时候,首先会将用户输入的用户名密码以及 Host 跟 mysql 数据库中的 user 表中的 Host、User 以及 PassWord 三个字段相匹配,这一步是判断用户是否拥有登录权限。

如果匹配不成功,将会报一个 ERROR 1045 (28000): Access denied for user 'xiaoyang'@'localhost' (using password: YES) 错误。一旦 MySQL 认为用户没有登录权限,将会直接拒绝登录。

[root@dxd ~]# mysql -uxiaoyang -pxiaoyang
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'xiaoyang'@'localhost' (using password: YES)

第二层:全局权限

当用户通过了第一层用户登录验证之后,将会直接在 user 表中匹配全局权限,一旦匹配成功之后就会对全局所有的数据库都拥有相应的权限。例如,只给 xiaoyang 这个用户设置一个全局可读权限,那么 xiaoyang 将拥有全局可读权限。

使用 root 用户创建 xiaoyang 用户:

创建一个用户,Create User创建的用户默认没有任何权限

mysql> CREATE USER ‘xiaoyang’@’localhost’ IDENTIFIED BY ‘Xiangyang123!’;
Query OK, 0 rows affected (0.00 sec)

使用 xiaoyang 用户测试查看权限:

mysql> select * from test01.city;
ERROR 1142 (42000): SELECT command denied to user ‘xiaoyang’@’localhost’ for table ‘city’

使用 root 用户给 xiaoyang 用户授权:

  • 将 xiaoyang 这个用户设置一个全局可读权限

mysql> update mysql.user set Select_priv=’Y’ where User=’xiaoyang’;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

  • 刷新权限,使其生效

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

测试 xiaoyang 查看权限:

  • 测试查看权限

mysql> select * from test01.city;
+——+———————+———+
| id | name | fid |
+——+———————+———+
| 1 | 徐汇区 | 1 |
| 2 | 浦东新区 | 1 |
| 3 | 青浦区 | 1 |
+——+———————+———+
3 rows in set (0.00 sec)

通过上面的例子可以看出,当 xiaoyang 这个用户拥有一个全局可读权限之后,就可以查看所有数据库中的所有数据了。设想一下,如果 xiaoyang 这个用户没有全局权限,怎么办?

第三层:数据库级别权限

如果全局权限验证失败,将会进入数据库级权限验证,这个层级的权限是设置某个用户针对于某个数据库的权限。例如:xiaoyang 这个用户只允许操作 test01 这个数据库,我们来看一下它的实现过程。

将 xiaoyang 用户设置 test01 数据库的查询权限:

  • 添加查看权限(清空了其他的所有权限之后添加)

mysql> insert into mysql.db (Host,User,Select_priv,Db) values(‘localhost’, ‘xiaoyang’, ‘Y’, ‘test01’);
Query OK, 1 row affected (0.00 sec)

  • 查看添加的权限

mysql> select Host,User,Select_priv,Db from mysql.db;
+—————-+———————-+——————-+——————————+
| Host | User | Select_priv | Db |
+—————-+———————-+——————-+——————————+
| localhost | xiangyang | Y | test01 |
+—————-+———————-+——————-+——————————+

3 rows in set (0.00 sec)

使用 xiaoyang 用户查看 test01 数据中任意表的数据:

  • 查看test01数据,有权限

mysql> select * from test01.city;
+——+———————+———+
| id | name | fid |
+——+———————+———+
| 1 | 徐汇区 | 1 |
| 2 | 浦东新区 | 1 |
| 3 | 青浦区 | 1 |
+——+———————+———+
3 rows in set (0.00 sec)

  • 查看其他数据库的数据,是没有权限的

mysql> select * from Vue.sp_Goods;
ERROR 1142 (42000): SELECT command denied to user ‘xiaoyang’@’localhost’ for table ‘sp_goods’

通过这个案例,我们可以看出数据库级别的权限只对某一个数据库起作用,而设置数据库级别的权限时底层操作的正是 mysql.db 数据表,也就是说在 mysql.db 数据表中设置了对应的权限之后,该用户将对这个数据库中所有的数据都拥有该权限。

在实际应用场景中,如果某一个用户只允许操作某一个数据库,而其他数据库是一个没有权限的状态,这个时候就需要用到数据库级权限。

如果要求只允许某个表拥有权限怎么办呢?

第四层 :数据表级权限

数据表级权限是用来定义某个数据表的权限的,具体定义在 mysql.tables_priv 数据表中,当数据库级权限验证失败之后就会验证表级权限。例如:要求 xiaoyang 这个用户只允许查看 test01 数据库中的 city 表,这个权限的实现具体如下。

将 xiaoyang 用户设置 test01 数据库中 city 数据表的查询权限:

  • 增加数据表级权限(其他权限全部清除)

mysql> INSERT INTO mysql.tables_priv (Host, Db, User, Table_name, Table_priv) VALUES (‘localhost’, ‘test01’, ‘xiaoyang’, ‘city’, ‘Select’);
Query OK, 1 row affected (0.00 sec)

使用 xiaoyang 用户查询 test01 数据库中 city 数据表的数据:

  • 查看 test01 数据库中 city 数据表有权限

mysql> select * from test01.city;
+——+———————+———+
| id | name | fid |
+——+———————+———+
| 1 | 徐汇区 | 1 |
| 2 | 浦东新区 | 1 |
| 3 | 青浦区 | 1 |
+——+———————+———+
3 rows in set (0.00 sec)

  • 查看其他相同数据库中其他表是没有权限的

mysql> select * from test01.info;
ERROR 1142 (42000): SELECT command denied to user ‘xiaoyang’@’localhost’ for table ‘info’

通过这个案例,我们可以了解到的是 mysql.tables_priv 数据表主要是用来针对某一个数据表来设置权限的。它比数据库级权限更加地精细化。

在实际应用场景中,如现在有一个访客浏览记录表,一般要求只允许查看和添加,不允许有其他修改操作;还有例如订单数据表,一般只允许添加、查看和修改,不允许删除等应用场景,数据表级权限有着不可替代的作用。

再试想一下,如果想要 xiaoyang 用户对订单数据表中的余额字段只能查看,又该如何呢?

第五层:字段级权限

字段级权限控制的主要是某一个字段的操作权限,当数据库需要针对某个具体的字段做权限控制之时,就需要使用字段级权限(注意:设置字段级权限的数据表在 mysql.columns_priv 数据表中,但是 mysql.tables_priv 需要首先添加 column_priv 权限才能生效)。

例如:要求 xiaoyang 这个用户,只允许查看 sp_order 数据表中的 order_price 字段。

设置 xiaoyang 这个用户对 sp_order 数据表中的 order_price 字段的可读权限:

  • 在 mysql.tables_priv 数据表中添加字段查看权限

mysql> INSERT INTO mysql.tables_priv (Host, Db, User, Table_name, Column_priv) VALUES (‘localhost’, ‘test01’, ‘xiaoyang’, ‘sp_order’, ‘Select’);
Query OK, 1 row affected (0.00 sec)

  • 在 mysql.columns_priv 中添加字段查看权限

mysql> INSERT INTO mysql.columns_priv (Host, Db, User, Table_name, Column_name, Column_priv) VALUES (‘localhost’, ‘test01’, ‘xiaoyang’, ‘sp_order’, ‘order_price’, ‘Select’);
Query OK, 1 row affected (0.00 sec)

测试该字段的可读权限:

  • 查看 order_price 字段,可以正常查看

mysql> select order_price from vue.sp_order;
+——————-+
| order_price |
+——————-+
| 222.00 |
+——————-+
27 rows in set (0.00 sec)

  • 查看其他字段,没有权限

mysql> select id from vue.sp_order;
ERROR 1143 (42000): SELECT command denied to user ‘xiaoyang’@’localhost’ for column ‘id’ in table ‘sp_order’

通过这个案例,可以看出字段级权限主要是控制某一个字段的权限。在实际应用中,通常用来控制某个字段。例如:控制订单表中的金额字段无法修改,而其他字段不受影响,这时就可以使用字段级权限。

第六层:对象级权限

上文中我们介绍了全局、数据库级、数据表级以及字段级的权限,除此之外,还有一个是用来管理数据库存储过程和存储函数权限的权限,及对象级权限(该权限相关的数据表是 mysql.procs_priv )。

举个例子:超级管理员创建一个名为 select_city 的存储过程,只给 xiaoyang 这个用户使用该函数的权限,不给修改权限,具体操作如下。

  • root 用户创建存储过程:

mysql> delimiter 
mysql> CREATE PROCEDURE select_city(IN city_id INTEGER)
-> BEGIN
-> select * FROM city WHERE id = city_id;
-> END
mysql>CREATEPROCEDUREselect​c​​ity(INcity​i​​dINTEGER)
−>BEGIN
−>select∗FROMcityWHEREid=city​i​​d;
−>END
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;

设置 xiaoyang 用户的权限:

mysql> use mysql;

  • 增加存储过程权限

mysql> INSERT INTO procs_priv (Host, Db, User, Routine_name, Routine_type, Proc_priv) VALUES (‘localhost’, ‘test01’, ‘xiaoyang’, ‘select_city’, ‘PROCEDURE’, ‘Execute’);
Query OK, 1 row affected (0.00 sec)

存储过程可以正常使用:

  • 选择数据库

mysql> use test01;
Database changed

  • 使用存储过程

mysql> call select_city(1);
+——+—————-+———+
| id | name | fid |
+——+—————-+———+
| 1 | 徐汇区 | 1 |
+——+—————-+———+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)

无法删除存储过程:

  • 删除存储过程显示无权限

mysql> DROP PROCEDURE select_city;
ERROR 1370 (42000): alter routine command denied to user ‘xiaoyang’@’localhost’ for routine ‘test01.select_city’

通过上面这个案例可以得出:mysql.procs_priv 数据表主要是用来控制存储过程的权限的。

在实际应用中,我们需要注意存储过程权限一旦授予之后,自动会将数据库的查看权限一并授予,但是会显示数据表为空。

mysql> use test01;
Database changed
mysql> show tables;
Empty set (0.00 sec)

总结

数据的权限主要分为六个层级:

  • 第一层是登录验证,验证失败则立即退出;
  • 第二层的权限为全局权限,这个层级的权限覆盖整个数据库;
  • 第三层的权限是数据库级别的权限,这个层级的权限是针对于某一个数据库的;
  • 第四层级是数据表级的权限,这个层级的权限主要针对于数据表;
  • 第五层权限是字段级的权限,主要针对于某一个字段的,需要注意的是字段级的权限需要依赖于第四层数据表级查看权限,没有数据表级查看权限,字段级权限无法生效;
  • 最后一个对象级权限,这个权限主要是针对于存储函数和存储过程的,只有拥有该权限,才能够操作数据库存储函数或存储过程。

但是,在实际应用中,我们不需要将权限设置得过于精细化,因为过于精细化容易造成权限交叉并且设置权限的管理也会是相当的麻烦。

以上就是MySQL 中的权限管理及验证流程的详细内容,更多关于MySQL权限管理验证的资料请关注编程网其它相关文章!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL 中的权限管理及验证流程

本文链接: https://lsjlt.com/news/167411.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • MySQL 中的权限管理及验证流程
    目录引言权限的验证流程第一层:用户登录第二层:全局权限第三层:数据库级别权限第四层 :数据表级权限第五层:字段级权限第六层:对象级权限总结引言 某天,女朋友突然问你:“还有多少私房钱?”这个时候惊...
    99+
    2024-04-02
  • MySQL 中的权限管理及验证流程
    目录引言权限的验证流程第一层:用户登录第二层:全局权限第三层:数据库级别权限第四层 :数据表级权限第五层:字段级权限第六层:对象级权限总结引言 某天,女朋友突然问你:“还...
    99+
    2024-04-02
  • SpringBoot Security使用MySQL实现验证与权限管理
    目录1. 创建用户表和虚拟凭据2. 配置数据源属性3. 声明弹簧安全性和MySQL JDBC驱动程序的依赖关系4. 配置 JDBC 身份验证详细信息5. 自定义登录验证过程6. 登录...
    99+
    2022-11-13
    SpringBoot Security MySQL登陆验证 SpringBoot Security MySQL权限管理
  • MySQL用户权限验证与管理方法的示例分析
    这篇文章给大家分享的是有关MySQL用户权限验证与管理方法的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、Mysql权限分两阶段验证1. 服务器检查是否允许连接:用户...
    99+
    2024-04-02
  • mysql 用户及权限管理 小结
    转载自https://www.cnblogs.com/SQL888/p/5748824.html MySQL 默认有个root用户,但是这个用户权限太大,一般只在管...
    99+
    2024-04-02
  • mysql管理中的运行权限
    mysql管理中的运行权限,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 mysql 管理:mysql 运行权限...
    99+
    2024-04-02
  • Netdata是否支持用户身份验证和权限管理
    是的,Netdata支持用户身份验证和权限管理。您可以设置不同用户角色,并为他们分配不同的权限,以控制他们对监控数据和系统配置的访问...
    99+
    2024-04-02
  • 涉及MySQL用户及权限管理的简单介绍
    本文主要给大家介绍MySQL用户及权限管理,文章内容都是笔者用心摘选和编辑的,具有一定的针对性,对大家的参考意义还是比较大的,下面跟笔者一起了解下MySQL用户及权限管理吧。 MySQL用户及权限...
    99+
    2024-04-02
  • 管理Mysql用户及分配权限介绍
    本文主要给大家简单讲讲管理Mysql用户及分配权限介绍,相关专业术语大家可以上网查查或者找一些相关书籍补充一下,这里就不涉猎了,我们就直奔主题吧,希望管理Mysql用户及分配权限介绍这篇文章可以给大家带来一...
    99+
    2024-04-02
  • Java实战权限管理系统的实现流程
    springboot+mybatis使用面向切面编程(AOP)实现的权限管理系统。 共五个模块,角色管理,菜单管理,实验室管理,学生管理,管理员管理。 角色管理分一个超级管理员,编辑...
    99+
    2024-04-02
  • MySQL中怎么实现权限管理
    MySQL中怎么实现权限管理,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1.用户权限简介当我们创建过数据库用户后,还不能执行任何操作,需...
    99+
    2024-04-02
  • MySQL数据库的权限管理
    Mysql权限系统非常重要,但同时又是一个很多开发者或管理者所忽略的。权限分配不但,将会造成难以挽回的悲惨后果。我之前所在一家公司,关于数据库权限这块就完全不重视,所有开发者都有线上系统的最高权限。想想看,...
    99+
    2024-04-02
  • Win10中如何设置使用管理员权限需要验证PIN密码
    小编给大家分享一下Win10中如何设置使用管理员权限需要验证PIN密码,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!Win10使用PIN或密码审批管理员权限的方法!正常情况下,我们只要右键程序选择“以管理员身份运行”即可提...
    99+
    2023-06-12
  • MySQL中的用户创建与权限管理
    目录一、用户管理1.创建mysql用户2. 删除MySQL用户3. 修改MySQL用户二、权限管理1. 权限说明2. 权限保存位置(了解)3. 给用户授权4. 查询用户权限5. with grant option选项6....
    99+
    2024-04-02
  • 数据源管理 | 动态权限校验,表结构和数据迁移流程
    本文源码:GitHub·点这里 || GitEE·点这里一、数据同步简介1、场景描述如果经常接触数据开发,会有这样一个场景,服务A提供一个数据源,假设称为动态数据源A,需要读取该数据源下的数据;服务B提供一个数据源,假设称为动态数据源B,...
    99+
    2023-06-02
  • Vue element实现权限管理业务流程详解
    目录展开渲染标签编辑权限对话框内树形组件编辑权限展示所有权限 添加 编辑 删除 角色 都与上一篇 用户类似 只是接口不同 我们只关注其他不一样的: 展开渲染标签编辑权限 el-tab...
    99+
    2024-04-02
  • MySQL 中有哪些用户权限管理
    MySQL 中有哪些用户权限管理?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。容。  1.用户权限简介当我们创建过数据库用户后,还不能执行任何操作,需要...
    99+
    2023-06-14
  • 后台管理系统的权限及vue处理权限实例分析
    这篇文章主要介绍了后台管理系统的权限及vue处理权限实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇后台管理系统的权限及vue处理权限实例分析文章都会有所收获,下面我们一...
    99+
    2024-04-02
  • MySQL进行权限管理的方法
    这篇文章主要介绍了MySQL进行权限管理的方法,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。MySQL 的权限表在数据库启动的时候就载入内存,当...
    99+
    2024-04-02
  • JS中的内存管理机制及验证方法
    这篇文章主要介绍“JS中的内存管理机制及验证方法”,在日常操作中,相信很多人在JS中的内存管理机制及验证方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JS中的内存管理机制...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作