详细解读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有哪些权限

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

五、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.新建一个用户并给予相应数据库的权限

?


1

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

?


1

grant all privileges on database.* to user@localhost identified by ‘passwd‘;

2.刷新权限

?


1

flush privileges;

3. 显示授权

?


1

show grants;

4. 移除授权

?


1

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

5. 删除用户

?


1

drop user ‘jack‘@‘localhost‘;

6. 给用户改名

?


1

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

7. 给用户改密码

?


1

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

8. 删除数据库

?


1

drop database test;

9. 从数据库导出文件

?


1

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

时间: 2024-08-07 23:48:30

详细解读MySQL中的权限的相关文章

mysql中用户权限导出的脚本

MySQL数据库备份和迁移,是DBA日常工作中,经常需要做的工作.备份一般由物理备份和逻辑备份两种,对于用xtrabackup进行物理备份来说,表数据和用户权限都会全部备份和恢复:如果是逻辑备份的话,用户数据和授权信息都需要单独的导出导入,用户数据直接用 mysqldump 工具导出导入即可,但mysql中用户权限不能直接导出导入,一个权限一个权限的处理,有比较麻烦. 所以编写一个mysql用户权限脚本,对源数据库中的用户授权信息进行导出,就非常必要了.只要有用户权限的授权sql,不论是平时备份

MYSQL中的权限

MYSQL中的权限 MYSQL中的权限

Mysql中五级权限小结

mysql的权限控制主要是通过mysql库下的db,user,host,table_priv,column_priv表控制. 由于权限信息数据量比较小,所以mysql在启动时会将所有的权限消息加载到内存. 所以每次手工修改相关权限表时需要通过 flush privileges命令来重新加载. 但是如果是通过grant,revoke或drop user,create user等命令这修改权限的话就不需flush mysql中权限一共有五级,按照大小顺序为:global > database >

详细介绍MySQL中数据的备份与恢复,防止数据丢失

在日常的生产环境中为什么要进行备份 ??备份可以使生产中的数据进行有效的灾难恢复:硬件故障.软件故障.自然灾害.**.误操作测试等数据丢失场景. 备份注意要点 能容忍最多丢失多少数据 恢复数据需要在多长时间内完成 需要恢复哪些数据 还原要点 做还原测试,用于测试备份的可用性 还原演练 备份类型 完全备份.不分备份 完全备份:整个数据集 部分备份:只备份数据子集,如部分库或表 增量备份.差异备份 增量备份:仅备份最近一次完全备份或增量备份(如果存在增量)以来变化的数据,备份较快,还原复杂 差异备份

辛星解读mysql中的存储过程的优劣

我们常用的SQL语句在执行的时候需要首先进行编译,然后执行,而存储过程则是一组为了完成特定功能的SQL语句集,它直接编译好了存储在数据库中,用户通过指定存储过程的名字即可调用该存储过程. 存储过程的优点主要包括以下几点: 第一点,性能提高.这是相对于不适用存储过程来说的,因为存储过程在创建的时候就编译好了,而后每次调用都不会再次编译,这相对于传统的SQL语句中每次调用都需要编译的情况来说,性能提高了何止一点两点. 第二点,重用性强.存储过程使用名字即可使用,也就是传说中的"一次编写,随便调用&q

详细讲述MySQL中的子查询操作 (来自脚本之家)

继续做以下的前期准备工作: 新建一个测试数据库TestDB: ? 1 create database TestDB; 创建测试表table1和table2: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 CREATE TABLE table1 (   customer_id VARCHAR(10) NOT NULL,   city VARCHAR(10) NOT NULL,   PRIMARY KEY(customer_id) )ENGINE=INNODB DEFAULT CH

详细解读Android中的搜索框—— SearchView

以前总是自己写的 今天看看别人做的 本篇讲的是如何用searchView实现搜索框,其实原理和之前的没啥差别,也算是个复习吧. 一.Manifest.xml 这里我用一个activity进行信息的输入和展示,配置方式还是老样子,写一个输入框的配置文件,然后写定一个action <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.and

详细解读Android中的搜索框(三)—— SearchView

本篇讲的是如何用searchView实现搜索框,其实原理和之前的没啥差别,也算是个复习吧. 一.Manifest.xml 这里我用一个activity进行信息的输入和展示,配置方式还是老样子,写一个输入框的配置文件,然后写定一个action <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/a

辛星解读mysql中的MyISAM引擎

很多以前的教科书上都是写的MyISAM是mysql的默认存储引擎,其实自从mysql5.5开始,默认存储引擎就已经改变成为InnoDB了,由于InnoDB在很多方面有着不可替代的功能,因此,很多人喜欢研究InnoDB也在情理之中,我也很喜欢InnoDB.但是呢,对于MyISAM,就跟着辛星辛博士来认识一下吧. 第一点就是MyISAM不支持事务和外键,也正是基于这一点,很多人不喜欢MyISAM.但是MyISAM并不着急改变自己,因为这个引擎的重心是性能,而不是功能,不可否认,MyISAM的性能是非