MYSQL权限配置

前言:作为最基础的权限配置的技能,针对数据库的权限配置是每个网安爱好者必备的知识。如果分配不当或者分配权重过大的权限配置很可能导致意外的脱库事件的发生。

接下来,笔者将带大家简单了解基础的MySQL的权限配置。至于还有什么不太懂的步骤或操作,可在菜鸟教程等一些教学网站详细看mysql和php的配置的相关教程。

配置MySQL数据库,首先进入如下路径:

这些二进制文件并非直接使用鼠标就可以打开。

我们使用命令提示符打开这个路径,然后输入mysql -uroot -p;回车,输入密码连接到Mysql:

show databases;

(我们说一说哈,Mysql数据库默认是有information_sckema和mysql和performance_schema数据库,其中,performance_schema数据库记录一些慢查询等记录,可以删除且不影响使用;mysql和information_schema数据库如果被删除的话,会影响MYSQL的使用,甚至影响登陆问题)

笔者打开MYSQL front以便大家对数据库的权限信息一览无余:

mysql数据库的user表:

比如,其中的第二条记录,用户全名为"root@127.0.0.1",是说,127.0.0.1的ip可以使用root用户登陆。当然,在登陆时并非我们写成“mysql -uroot@127.0.0.1 -p”这个形式就可以登陆这个用户了。如果是本机写成这种形式,MYSQL会将这种方式的登陆用户识别为‘root@127.0.0.1’@‘localhost’:

总而言之,'(user)'@'(ip)'的名字是MYSQL的用户标准写法,这样,我们可以在user表单中设置好哪个ip可以连接数据库,而这个ip只能使用什么用户来登陆。

当然,上述所说的用户的ip可以使用%来代替,简而言之就是说,所有的ip都可以使用该用户进行连接。

我们来尝试创建一个用户:create user 'test'@'%' identified by '123456';

如图,执行命令后会在user表单中显示出新增用户,但是此时该用户没有任何权限。(可以看到test的记录很多权限priv都是N对吧)

也可以使用show grants for 'test'@'%';可查看当前被查询用户的权限:

我们exit一下,切换到test用户:

如上图所示,很明显能感觉到权限并不大的样子。

禁止insert语句且禁止切换到其他不对当前用户显示的数据库。

如何授权?

可在root用户中输入指令:grant select,insert on bwapp.*to ‘test’@‘%’;

GRANT ALLPRIVILEGES ON *.* TO ‘username’@‘%’ IDENTIFIED BY 'password’;

但是没有赋予其他人权限的权限。如果有兴趣或者需要,赋予该用户赋予第三方以外的人的权限,则需要写成grant all privileges on 库名.表名 to '用户名'...by '密码' with grantoption(记得刷新权限哦 )

然后记得刷新权限:flushprivileges;

再然后,exit出root,进入test用户。

可以看到其拥有了对bwapp这个数据库的权限。其实。该用户可以在bwapp中执行select、insert的语句了。

但是,在user表中,此用户的insert、select权限依然是N。这是因为其insert\select的权限并非*.*(所有库的所有表)的权限。

我们也可以进入mysql.db表中看到相关权限:

很显然,如果grant授权不是*.*的授权而是具体到库的授权,其局部的权限信息会显示在这里。

相应的,mysql数据库也就有tables_priv、columns_priv的表单来存储相关权限信息。(这里的存储不会因为grant *.*的原因而变更记录!!!这也导致一些数据库操作者意想不到的权限疏漏!!!具体还需往下读文章。

我们赋予test用户all privileges的权限:

切换到root用户执行语句:grant all privileges on *.* totest;

flush privileges;

然后再登陆test用户,

执行show databases;

可以看到,很多库都可以看到了。

可以在bwapp中执行select、delete语句。此时test的权限已经是比较大了。

然后,就是回收权限的命令:

切换到root用户,执行命令:

revoke all privileges on *.* from test;(all privileges也可以写成单个的某些权限,如select啊,insert啊等)

我们来观察一下现在的test的权限:

发现可以观察bwapp!!??为什么会依然操作bwapp的select、insert命令呢?不是我们收回了test用户的*.*权限吗??

其实,就如上文红字所述,在mysql.db中,曾经对test用户针对单独数据库的执行的指令"grant select,insert on bwapp.* to ‘test’@‘%’;",导致在mysql.db中留下了信息。

且此时被回收*.*数据库的all privileges权限的test用户根据mysql.db的记录依然保留有对bwapp查和增的权限。

由此可知,数据库中分配权限是有记录的,且针对数据库,(*.*的命令)和(单独在命令中指定的库的命令),其回收权限是互不影响的。

今天的数据库权限分配先写到这里,下篇将写php连接mysql的用户的安全配置。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180719G1XL8H00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券