起航学习网

- 让每个人都能学到最前沿新知识、新技能!
起航学习网
当前位置: 起航学习网 > 短期培训 > 编程语言 > 如何了解MySQL存储权限的问题

如何了解MySQL存储权限的问题

时间:2018-04-18 10:55:50来源:编程网 作者:IT培训网 已有: 名学员访问该课程

前言:基础的背景介绍完了。赋予基本的表的权限,赋予存储过程的权限,存储过程的这个地方需要注意一个重要的点是SQL SECURITY,默认创建是definer,如果需要开放给其他的用户调用,则建议是设置为invoker.

MySQL存储过程的权限问题。对于新手MySQL学习者来说,在学习的过程中多少都会遇到一些问题,比如MySQL存储过程中如果有了权限的问题需要解决,该怎么办呢,今天我们就来看看这部分知识吧!

MySQL的存储过程,没错,看起来好生僻的使用场景。问题源于一个开发同学提交了权限申请的工单,需要开通一些权限。

本来是一个很正常的操作,但在我来看是比较着急且紧迫的,说来惭愧,忙着方向规划和开发的事情,这个基础的操作功能竟然给忽略了,所以看到目前的一些实现方式,还是希望能够做一些细小的事情把这些重复性的工作给解放了。

当然我决定把一些基础性的工作接过来,一方面是给同事减压,另一方面是在做一个完整的体验,因为很多需求和痛点通过实践是能够很容易捕捉到重点的,如果我觉得不合理,那么这个过程中势必会有一些改进的地方。比如部署安装,比如权限开通。数据库的权限开通就是一个相对典型的案例,而存储过程的权限开通甚至都有点让人怀疑人生了。

问题的场景还是很基础的,开发同学需要开通一些基础的权限,在标记权限的时候声明需要增删改查的权限,还有DDL的权限,比如drop,alter,create等等。看到这里,我就感觉不太妥了,什么样的操作竟然需要这么大的权限呢。

简单声明了下立场,开发同学的想法是能够方便管理,于是乎我就直接招过去了,简单沟通下,其实发现他们的需求场景还是很常规的,他们需要动态创建一些日表,那么需要create权限在评估之后是可以给与的,而对于一般的用户而言,create的权限是不建议开放的,主要的出发点就是能够对SQL进行一些基本的审核,哪怕是人工审核还是平台审核都是一个需要的过程。所以沟通了一圈发现,开通的权限就可以迅速裁剪,对他们而言,修改存储过程的逻辑也是需要的,因为在一些特定的场景下,他们对逻辑的控制希望能够更加灵活。

好了,基础的背景介绍完了。赋予基本的表的权限,赋予存储过程的权限,存储过程的这个地方需要注意一个重要的点是SQL SECURITY,默认创建是definer,如果需要开放给其他的用户调用,则建议是设置为invoker.

所以很简单的一句:

grant execute,alter procedure on xxx.xxx to xxx@'xxxx';

但是很不幸的,开发同学反馈,他们通过SQLyog或者是Navicator打开的时候,竟然看不到存储过程的内容。

因为我们没有s e l e c t procedure或者view procedure的权限,所以我们几乎再无从干预了。

使用命令行的方式能够复现出这个问题:

如何了解MySQL存储权限的问题_www.epx365.cn

没有存储过程的实质性内容。在那儿折腾了好一会,发现是个老问题了,10多年前的老问题了。

https://bugs.mysql.com/bug.php?id=20235

问题的解决其实很简单,就是需要这样一句:

grant s e l e c t on mysql.proc to xxxx@'xxxx'即可

所以细粒度的权限控制就是这么纠结,但是确实有效。

比如我们举一反三一下,我们知道MySQL里的all privileges算是一个很大的权限,但是里面包含多少种权限,可能我们没有清晰的概念。

我们就完全可以通过细粒度的权限控制来反推。

比如创建一个用户,赋予all privileges的权限。

mysql> grant all privileges on test.* to 'jeanron'@'%' identified by 'jeanron100';  Query OK, 0 rows affected, 1 warning (0.00 sec)

包含的权限如下:

mysql> show grants for jeanron;  +---------------------------------------------------+  | Grants for jeanron@%                              |  +---------------------------------------------------+  | GRANT USAGE ON *.* TO 'jeanron'@'%'               |  | GRANT ALL PRIVILEGES ON `test`.* TO 'jeanron'@'%' |  +---------------------------------------------------+  2 rows in set (0.00 sec)

我们做一下收缩。

mysql>  revoke insert on test.* from jeanron@'%';  Query OK, 0 rows affected (0.00 sec)

喏,all privileges的权限就现出原形了。

mysql> show grants for jeanron;  | Grants for jeanron@%   +------------------------------------------------------------------------------------------------------  | GRANT USAGE ON *.* TO 'jeanron'@'%'   | GRANT s e l e c t, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON `test`.* TO 'jeanron'@'%' |

所以在上面的问题中,其实如果s e l e c t on *.*其实已经包含了我们需要的细粒度权限mysql.proc,如果要抽丝剥茧,基本就是这样的套路。

文章出自:http://qh.itpxw.cn/peixun/software/201839478.html

文章标题:如何了解MySQL存储权限的问题



免责声明:本站文章均由入驻起航学习网的会员所发或者网络转载,所述观点仅代表作者本人,不代表起航学习网立场。如有侵权或者其他问题,请联系举报,必删。侵权投诉

(责任编辑:IT培训网)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
培训学校
IT培训网 访问该机构站点 报名留言 加为好友 用户等级:注册会员 用户级别:10 机构名称:IT培训网 联 系 人:罗老师 联系电话:13783581536 联系手机:13783581536 在线客服:起航学习网客服 在 线 QQ:起航学习网客服 电子邮件: 网站域名:http://www.itpxw.cn 注册时间:2016-07-18 11:07 最后登录:2024-02-20 13:02
推荐内容