售前咨询
技术支持
渠道合作

phpMyAdmin权限控制 root用户也没辙

前言

由于公司有些项目在使用阿里的RDS,RDS的一个弊端就是权限管控粒度太大,也不能创建用户。也和阿里那边沟通过有关权限细粒度化是遥遥无期了。那我们也需要将权限管控起来,开发人员只能使用SELECT语句,减少误操作几率。

权限管控思路

1、创建用户最有效(由于阿里原来无法实践)。

2、自己部署phpMyadmin(不能创建用户,也没辙)。

3、自己开发一个小工具只能使用SELECT(可行,耗费精力,而且界面不一定好看)。

4、修改phpMyadmin源码,过滤执行语句只让SELECT执行(可行,较方便)。

下面我们就按 “思路4” 来实践RDS上的mysql权限管控。

软件介绍

软件 版本 备注
php 5.6
nginx 1.6.0 作web服务器
phpMyAdmin 4.5.3.1-all-languages

这边我就不介绍要如何搭建一个 LNMP 的环境了。

已经做了修改的phpMyAdmin下载地址:https://yunpan.cn/crujxsTwcFe8C 访问密码 496c

修改思路

1、对执行的SQL进行过滤。

2、只显示需要的菜单栏。

对执行的SQL进行过滤

php文件路径:phpMyAdmin/libraries/parse_analyze.inc.php

第12行左右能看到代码

其中$sql_query就是phpMyAdmin需要执行SQL的语句,我们只需要对$sql_query进行过滤,当出现DELETE、DROP等关键字的语句过滤就行。

在 $GLOBALS[‘unparsed_sql’] = $sql_query; 代码的上方加入过滤代码

运行了敏感词报错效果:

Phpmyadmin

phpMyAdmin权限控制 – 01

只显示需要的菜单栏

php文件路径:phpMyAdmin/libraries/Menu.class.php

找到方法:_getTableTabs、_getDbTabs、_getServerTabs这三个方法中有类似以下的代码

只需要将你不需要的menu相关变量给注释掉就好了

效果展示:

隐藏前的菜单栏

Phpmyadmin

phpMyAdmin权限控制 – 02

隐藏后的菜单栏

Phpmyadmin

phpMyAdmin权限控制 – 03

以上就完成了使用phpMyAdmin只能使用 SELECT 语句的功能,当然可能还有很多bug。希望有兴趣的深入研究一下。

结束语

其实我们能那么方便的修改phpMyAdmin需要感谢phpMyAdmin的开发人员,如果不是他们代码写的好,我们不可能只修改一个地方就能做到控制权限的目的。这里向phpMyAdmin开发者致敬! ^_^

文章转载来自:ttlsa.com

相关文章