数据库系统表相关

知识需要温习并实践才能牢牢掌握在手中

一、初始数据库

可以看到初始的mysql有以下4个库(不同版本的mysql有所不同)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)

数据库名

说明

information_schema

具有61个表,保存着mysql维护的所有其他数据库的信息:如数据库名、数据库表、数据库字段、用户权限、表权限、列权限等信息。

mysql

具有31个表,主要负责存储数据库的用户、权限设置、关键字等mysql自己需要使用的控制和管理信息,不可以删除。

performance_schema

具有87个表,PERFORMANCE_SCHEMA这个功能默认是关闭的。需要设置参数: performance_schema 才可以启动该功能,这个参数是静态参数,只能写在my.cnf 中 不能动态修改。

二、各数据库中重要的表

1. information_schema

schemata 表

存储数据库的信息

SELECT * FROM SCHEMATA;

mysql 有哪些关键字 mysql关键表_数据库

爆数据库语句:sql注入时查看有哪些数据库

select group_concat(schema_name) from information_schema.schemata;

mysql 有哪些关键字 mysql关键表_mysql 有哪些关键字_02

tables 表

存储关于数据库中的表的信息

SELECT * FROM TABLES;

mysql 有哪些关键字 mysql关键表_Web安全_03

columns 表

存储列的信息

select * from columns where table_name='users';

mysql 有哪些关键字 mysql关键表_mysql 有哪些关键字_04

这里因为只有dvwa库中存在users表,所以这里查询结果为users表的列信息

user_privileges 表

存储用户权限信息

select * from user_privileges;

mysql 有哪些关键字 mysql关键表_数据库_05

2. mysql

user表

存储 用户列、权限列、安全列、资源控制列的信息

select * from mysql.user;

mysql 有哪些关键字 mysql关键表_数据库_06

三、利用数据库读写文件

三种方法读写文件:

load_file

load data infile

select sql outfile

1. load_file 方法

有以下限制条件:

(1) 文件权限和大小:当前权限对该文件可读、文件大小小于max_allowed_packet。

(2) 用户权限:当前数据库用户有FILE权限

(3) 可操作路径: 查看secure_file_priv,如果值为某目录,那么就只能对该目录的文件进行操作

secure_file_priv 值

权限说明

null

表示限制mysql不允许导入/导出

具体目录/路径

表示限制mysql的导入/导出只能发生该目录下

无具体值

表示不对mysql的导入/导出做限制

首先查看读写权限:

查看当前登录用户

select user();

mysql 有哪些关键字 mysql关键表_Web安全_07

select user, file_priv from mysql.user;

mysql 有哪些关键字 mysql关键表_Web安全_08

可见root用户具有文件读写权限

查看可操作路径:

show global variables like '%secure%';

mysql 有哪些关键字 mysql关键表_用户权限_09

secure_file_priv 值为null,表示mysql不允许导入导出。

此时我们修改配置文件

mysql 有哪些关键字 mysql关键表_数据库_10

在[mysqld]修改 **secure_file_priv = \ ** 即可

create database test1;

use test1;

create table user(data text);

insert into user(data) values(load_file('C:\\Users\\user\\Desktop\\1.txt'));

select * from user;

mysql 有哪些关键字 mysql关键表_mysql_11

读取成功

2. load data infile 方法

文件权限【读或写】 
 用户权限【file】 
 可操作路径【secure_file_priv】
load data infile 'C:\\Users\\user\\Desktop\\1.txt' into table user;

mysql 有哪些关键字 mysql关键表_用户权限_12

3. select sql outfile

select '<?php phpinfo();?>' into outfile "C:\\Users\\user\\Desktop\\2.txt";

在桌面发现2.txt 写入成功

mysql 有哪些关键字 mysql关键表_mysql_13