详细解读MySQL中的权限

 更新时间:2015年05月07日 12:12:06   投稿:goldensun  
这篇文章主要介绍了MySQL中的权限,包括各个权限所能操作的事务以及操作权限的一些常用命令语句,需要的朋友可以参考下

一、前言

   很多文章中会说,数据库的权限按最小权限为原则,这句话本身没有错,但是却是一句空话。因为最小权限,这个东西太抽象,很多时候你并弄不清楚具体他需要哪些权限。 现在很多mysql用着root账户在操作,并不是大家不知道用root权限太大不安全,而是很多人并不知道该给予什么样的权限既安全又能保证正常运行。所以,本文更多的是考虑这种情况下,我们该如何简单的配置一个安全的mysql。注:本文测试环境为mysql-5.6.4
二、Mysql权限介绍

   mysql中存在4个控制权限的表,分别为user表,db表,tables_priv表,columns_priv表。

   mysql权限表的验证过程为:

1.先从user表中的Host,User,Password这3个字段中判断连接的ip、用户名、密码是否存在,存在则通过验证。

2.通过身份认证后,进行权限分配,按照user,db,tables_priv,columns_priv的顺序进行验证。即先检查全局权限表user,如果user中对应的权限为Y,则此用户对所有数据库的权限都为Y,将不再检查db, tables_priv,columns_priv;如果为N,则到db表中检查此用户对应的具体数据库,并得到db中为Y的权限;如果db中为N,则检查tables_priv中此数据库对应的具体表,取得表中的权限Y,以此类推。

三、mysql有哪些权限

201557120429872.jpg (698×734)

201557120509083.jpg (702×342)

四、数据库层面(db表)的权限分析

201557120536129.jpg (699×737)

五、mysql安全配置方案

   1 限制访问mysql端口的ip

   windows可以通过windows防火墙或者ipsec来限制,linux下可以通过iptables来限制。

   2 修改mysql的端口

   windows下可以修改配置文件my.ini来实现,linux可以修改配置文件my.cnf来实现。

   3 对所有用户设置强密码并严格指定对应账号的访问ip

   mysql中可在user表中指定用户的访问可访问ip

   4 root特权账号的处理

   建议给root账号设置强密码,并指定只容许本地登录

   5 日志的处理

   如需要可开启查询日志,查询日志会记录登录和查询语句。

   6 mysql进程运行账号

   在windows下禁止使用local system来运行mysql账户,可以考虑使用network service或者自己新建一个账号,但是必须给与mysql程序所在目录的读取权限和data目录的读取和写入权限; 在linux下,新建一个mysql账号,并在安装的时候就指定mysql以mysql账户来运行,给与程序所在目录的读取权限,data所在目录的读取和写入权限。

   7 mysql运行账号的磁盘权限

1)mysql运行账号需要给予程序所在目录的读取权限,以及data目录的读取和写入权限
2)不容许给予其他目录的写入和执行权限,特别是有网站的。
3)取消mysql运行账户对于cmd,sh等一些程序的执行权限。

   8 网站使用的mysql账户的处理

   新建一个账户,给予账户在所使用数据库的所有权限即可。这样既能保证网站对所对应的数据库的全部操作,也能保证账户不会因为权限过高而影响安全。给予单个数据库的所有权限的账户不会拥有super, process, file等管理权限的。 当然,如果能很明确是的知道,我的网站需要哪些权限,还是不要多给权限,因为很多时候发布者并不知道网站需要哪些权限,我才建议上面的配置。而且我指的通用的,具体到只有几台机器,不多的情况下,我个人建议还是给予只需要的权限,具体可参考上面的表格的建议。

   9 删除无用数据库

   test数据库对新建的账户默认有权限
六、mysql入侵提权分析及防止措施

   一般来说,mysql的提权有这么几种方式:

   1 udf提权

   此方式的关键导入一个dll文件,个人认为只要合理控制了进程账户对目录的写入权限即可防止被导入dll文件;然后如果万一被攻破,此时只要进程账户的权限够低,也没办执行高危操作,如添加账户等。

   2 写入启动文件

   这种方式同上,还是要合理控制进程账户对目录的写入权限。

   3 当root账户被泄露

   如果没有合理管理root账户导致root账户被入侵,此时数据库信息肯定是没办法保证了。但是如果对进程账户的权限控制住,以及其对磁盘的权限控制,服务器还是能够保证不被沦陷的。

   4 普通账户泄露(上述所说的,只对某个库有所有权限的账户)

   此处说的普通账户指网站使用的账户,我给的一个比较方便的建议是直接给予特定库的所有权限。账户泄露包括存在注入及web服务器被入侵后直接拿到数据库账户密码。

   此时,对应的那个数据库数据不保,但是不会威胁到其他数据库。而且这里的普通账户无file权限,所有不能导出文件到磁盘,当然此时还是会对进程的账户的权限严格控制。

   普通账户给予什么样的权限可以见上表,实在不会就直接给予一个库的所有权限。
七、安全配置需要的常用命令

   1.新建一个用户并给予相应数据库的权限
  

 grant select,insert,update,delete,create,drop privileges on database.* to user@localhost identified by 'passwd';
 grant all privileges on database.* to user@localhost identified by 'passwd';

     2.刷新权限

flush privileges;

   3. 显示授权

show grants;

   4. 移除授权

revoke delete on *.* from 'jack'@'localhost';

   5. 删除用户

drop user 'jack'@'localhost';

   6. 给用户改名

rename user 'jack'@'%' to 'jim'@'%';

   7. 给用户改密码

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123456');

   8. 删除数据库

drop database test;

   9. 从数据库导出文件

select * from a into outfile "~/abc.sql"

相关文章

  • MySQL性能优化配置参数之thread_cache和table_cache详解

    MySQL性能优化配置参数之thread_cache和table_cache详解

    这篇文章主要介绍了MySQL性能优化配置参数之thread_cache和table_cache详解,THREAD_CACHE是Mysql的连接池,table_cache指定表高速缓存的大小,需要的朋友可以参考下
    2014-07-07
  • mysql语句如何插入含单引号或反斜杠的值详解

    mysql语句如何插入含单引号或反斜杠的值详解

    这篇文章主要给大家介绍了关于mysql语句如何插入含单引号或反斜杠的值的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-02-02
  • 用MyEclipse配置DataBase Explorer(图示)

    用MyEclipse配置DataBase Explorer(图示)

    本文介绍了,用MyEclipse配置DataBase Explorer的图片示例。需要的朋友参考下
    2013-04-04
  • Centos7 如何部署MySQL8.0.30数据库

    Centos7 如何部署MySQL8.0.30数据库

    这篇文章主要介绍了Centos7 如何部署MySQL8.0.30数据库,本文通过图文并茂的形式给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2024-05-05
  • 如何使用索引提高查询速度

    如何使用索引提高查询速度

    本篇文章是对使用索引提高查询速度的方法进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • mysql的union和union all用法详解

    mysql的union和union all用法详解

    union 和 union all 的区别是,union 会自动压缩多个结果集合中的重复结果,而 union all 则将所有的结果全部显示出来,不管是不是重复,本文给大家介绍mysql的union和union all用法,感兴趣的朋友一起看看吧
    2023-08-08
  • MySQL中or、in、union与索引优化详析

    MySQL中or、in、union与索引优化详析

    这篇文章主要给大家介绍了关于MySQL中or、in、union与索引优化的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用MySQL具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-12-12
  • MySQL中的回表和索引覆盖示例详解

    MySQL中的回表和索引覆盖示例详解

    索引覆盖是一种避免回表查询的优化策略,具体的做法就是将要查询的数据作为索引列建立普通索,下面这篇文章主要给大家介绍了关于MySQL中回表和索引覆盖的相关资料,需要的朋友可以参考下
    2021-09-09
  • mysql 5.7.25 压缩版安装配置方法图文教程

    mysql 5.7.25 压缩版安装配置方法图文教程

    这篇文章主要为大家详细介绍了mysql 5.7.25 压缩版安装配置方法图文教程,文中安装步骤介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10
  • MySQL的意向共享锁、意向排它锁和死锁

    MySQL的意向共享锁、意向排它锁和死锁

    这篇文章主要介绍了MySQL的意向共享锁、意向排它锁和死锁,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-07-07

最新评论