information_schema数据库是MySQL自带的,MySQL 5以下没有这个数据库,它提供了访问数据库元数据的方式。元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等。也就是说information_schema中保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等。在INFORMATION_SCHEMA中,有数个只读表。
在phpmyadmin中,在左侧点击information_schema数据库。
执行如下SQL语句来查看该库中的所有表:
show tables;
想要查看数据库的数据保存目录,可以执行select @@datadir
在数据库中执行show databases;的时候,可以看到存在5个数据库,正是少了information_schema这个数据库。
进入mysql终端
进入information_schema 数据库,命令为:use information_schema;
执行show databases;查看所有的数据库,然后再执行select schema_name from schemata;。
desc 可以用来看表结构。看下tables的表结构,执行desc tables;
在查询前,先看看有多少条记录,避免记录太多查看不方便,执行select count(*) from tables;
选择最后一条记录,SQL语句为:select * from tables limit 141,1\G由于在客户端中,默认查询结果显示不友好,所以,可以把语句后面的分号改成\G,他会让一条记录显示一行
查看sqli数据库中的表,SQL语句为:show tables from sqli;
通过information_schema数据库来查询sqli数据库中所有的表,那么就可以使用如下SQL语句:
select TABLE_NAME from information_schema.TABLES where TABLE_SCHEMA = 'sqli';
获取最后一条记录,执行select * from columns limit 1661,1\G
查看sqli的user表是否存在该字段,执行SQL语句:show columns from sqli.user;
要通过information_schema数据库的columns表查询sqli数据库中user表中所有的字段,可以执行如下SQL语句:
select column_name from information_schema.columns where TABLE_SCHEMA='sqli' and TABLE_NAME='user';
查询结果与show columns from sqli.user; 一致。
为什么网上的SQL注入语句中,数据库名都是用的字符的16进制值?
十六进制的SQL语句可以突破很多防火墙和防注入程序