环境:

centos7

mysql 5.6.47

用户:root@localhost

条件

mysql中涉及到读写操作,必然离不开secure_file_priv参数,它的值限制load data,select … outfile,load_file()函数可作用的文件位置。

secure_file_priv:

值为NULL表示禁止限制操作

值为某一目录,则只能操作该目录下的文件

没有值则表示不对读写文件进行限制

查询语句:

mysql:show global variables like "secure%";

读文件需满足条件:

1. secure_file_priv值允许对该路径下的文件进行操作

2. 当前数据库用户对文件有读权限

3. 当前数据库用户拥有file权限

查看方法举例:mysql> show grants for root@localhost;

4. 知道文件的完整路径

5. 文件大小小于max_allowed_packet。load_file()函数受到这个值的限制。

查看方法:mysql> show global variables like 'max_allowed%';

修改方法:mysql> set global max_allowed_packet = 5*1024*1024;

写文件需满足条件:

1. secure_file_priv值允许对该路径下的文件进行操作

2. 当前数据库用户对文件有写权限

3. 当前数据库用户拥有file权限

查看方法举例:mysql> show grants for root@localhost;

4. 知道文件的完整路径

5. 目标文件不存在

测试

secure_file_priv为固定值

使用system执行系统命令和load data infile语句加local选项绕过限制

注:

system执行系统命令适用版本为5.x。此方法只能在本地读取,远程连接mysql时无法使用system。无法越权读取。

--local选项使load data infile语句从客户主机读取文件

system读写文件:(强调一下system执行系统命令!)

load data local infile需要读取文件存储在数据表中:

当前数据库创建数据表:

create table mytable(file varchar(100));

secure_file_priv为空

修改/etc/my.cnf文件

[mysql]标志下面添加:secure_file_priv=’’

保存退出

重启mysql数据库:systemctl restart mysql

查看结果:

load data infile读文件

load_file()读文件:

outfile写文件:

dumpfile写文件:

限制用户使用读写函数

通过general_log和general_log_file实现文件的读写

mysql所有查询数据都会记录在general_log_file指定的文件中,有该文件的读权限。

默认general_log关闭。

因为涉及到文件的读写操作,所以还是受到secure_file_priv的限制。

打开general_log开关:

Set global general_log=’on’;

设置general_log_file储存路径:

Set global general_log_file=’/tmp/shell.php’;

写一句话:

mysql> select ‘’;

因为是一个php文件,所以其中的php一句话会被解析执行。

注意

当root用户对某些文件进行操作时会报permission denied错误

网上查询资料说是red hat系列的linux中selinux对哪些daemon可以进行怎么样的操作是有限制的,因此MySQL 负责读写的daemon同样受到selinux限制。

解决办法就是把selinux关闭。

操作办法:

修改/etc/selinux/config文件中的selinux的值为disabled。

保存后重启系统。

这种方法有人成功了,但是我没成功,因为我的config文件中selinux的值原本就是disabled(流汗)。

mysql数据库怎么读文件_mysql数据库读写文件相关推荐

  1. mysql数据库安全机制研究意义_MySQL数据库的安全机制

    收稿日期:2001 - 12 - 30 作者简介:李书振(1965 - ) ,男 ,河南人 ,工程师 ,主要研究方向:数据库原理及应用.管理信息系统. 文章编号 :1001 - 9081(2002)0 ...

  2. linux mysql 实战_Linux平台MySQL多实例项目实施_MySQL数据库基础与项目实战06

    Linux平台MySQL多实例项目实施_MySQL数据库基础与项目实战06 视频教程学习地址 Oracle/MySQL数据库学习专用QQ群:336282998.189070296 学完风哥本课程能熟悉 ...

  3. python打开文件写文件乱码_Python读写文件乱码问题

    对开发者来说,最恼人的问题之一莫过于读写文件的时候,由于编码千差万别,出现乱码问题.好难快速解决啊... 最近我也遇到了这样的问题,经研究,把大致的解决思路拿出来共享. 1. python中习惯首先声 ...

  4. mysql 复制数据文件_mysql数据库搬家,可以直接复制数据库文件吗

    诶?这项技术又是什么玩意(What)? 这项技术为什么会存在?我们已经有那么多解决方案(Method)了,我们为什么要用它(Why)? 如果这项技术那么好且我们正好有场景可以用到这项技术,且能使我们的 ...

  5. mysql 二进制日志 解析c++_mysql二进制日志文件恢复数据库

    二进制日志的文件的作用 mysql二进制日志文件用来记录所有用户对数据库操作,即记录用户对数据库操作的sql语句.如果有此文件,当数据库发生意外时,可以通过此文件查看到用户在此文件记录的时间段内用户所 ...

  6. mysql 导出dmp文件_Mysql数据库的各种命令:

    一.连接MYSQL 格式: mysql -h主机地址 -u用户名 -p用户密码 1.连接到本机上的MYSQL. 首先打开DOS窗口,然后进入目录mysqlbin,再键入命令mysql -u root ...

  7. mysql frm ibd 创建表_MySQL数据库实现从.frm文件和.ibd文件恢复数据表方法

    MySQL中.frm文件:保存了每个表的元数据,包括表结构的定义等,该文件与数据库引擎无关. MySQL中.ibd文件:InnoDB引擎开启了独立表空间(my.ini中配置innodb_file_pe ...

  8. mysql数据库中的opt文件是什么文件_MySQL数据库目次下面的db.opt是干什么用的?...

    概述 MySQL数据库存放数据目次里的db.opt文件是MySQL建库进程中主动天生的. 仔细的友人大概会发明有时候在MySQL数据库的某些库目次下有个db.opt文件,那这个文件是干什么用的呢?要是 ...

  9. mysql怎么加载bak文件_MySQL数据库(表)的导入导出(备份和还原)

    一)在同一个数据库服务器上面进行数据表间的数据导入导出: 1. 如果表tb1和tb2的结构是完全一样的,则使用以下的命令就可以将表tb1中的数据导入到表tb2中: insert into db2.tb ...

最新文章

  1. 三、前端开发-CSS
  2. JAVA字节码指令iload_n为什么只有0到3?
  3. java传值的代码_SpringMVC的简单传值(实现代码)
  4. 用linq查询html中div个数,C#使用Linq to XML进行XPath查询
  5. Drawwhile计算机软件,计算机程序设计、小女纸又怒编一程序、求鉴定、
  6. 刘强东:京东必定会击败阿里巴巴
  7. Python将函数作为闭包
  8. 开学第一课:一定不要这样问老师Python问题
  9. Apache Hadoop 源码阅读(陆续更新)
  10. JWPlayer快速入门指南(中文)
  11. ELK filebeat和logstash使用:配置单个文件来源、配置多个文件来源
  12. c语言运行全屏,怎么用代码控制C源程序运行时窗口是全屏的?
  13. 软件项目开发成本经常用到的估算方法
  14. 手机火狐浏览器怎么开启flash_火狐浏览器flash插件怎么启用?
  15. 使用Swagger生成 API 文档(go语言示例)
  16. 7-9 用天平找小球
  17. 【Mysql】InnoDB 中 B+ 树索引的注意事项
  18. 重新开博,短期目标,工作计划
  19. zsh : corrupt history file ~/.zsh_history
  20. 通过L0phtcrack 7进行账号口令破解

热门文章

  1. stl源码剖析_《STL源码剖析》学习笔记
  2. python怎么开始打代码_Python代码写好了怎么运行?
  3. 用Github做一个静态网页(GithubPages)
  4. 第4.17章读书笔记
  5. nodejs生成UID(唯一标识符)——node-uuid模块
  6. 对象内存布局 (15)
  7. LeetCode(762)——二进制表示中质数个计算置位(JavaScript)
  8. 计算机网络学习笔记(8. 报文交换与分组交换②)
  9. 【Vue2.0】— TodoList案例(十七)
  10. 【jQuery学习】—jQuery对象的访问