mysql 的information_schame
This_is_Y Lv6

来自之前cnblog的博客
源地址:https://www.cnblogs.com/This-is-Y/p/13492709.html

借用知乎的某个回答:https://zhuanlan.zhihu.com/p/103047571

解释了database、schame、tables、column、row、dba、user的关系

 

information_schema数据库是MySQL系统自带的数据库,它提供了数据库元数据的访问方式。感觉information_schema就像是MySQL实例的一个百科全书,记录了数据库当中大部分我们需要了结的信息,比如字符集,权限相关,数据库实体对象信息,外检约束,分区,压缩表,表信息,索引信息,参数,优化,锁和事物等等。通过information_schema我们可以窥透整个MySQL实例的运行情况,可以了结MySQL实例的基本信息,甚至优化调优,维护数据库等,information_schema数据库是在mysql的版本5.0之后产生的,一个虚拟数据库,物理上并不存在。

 

在注入过程中经常会用到这个库,前提是MySQL版本在5.0之后,在注入中用version()函数查看mysql版本

 

在这个库里面有会用到这些表

SCHEMATA:   提供了当前mysql数据库中所有数据库的信息,其中SCHEMA_NAME字段保存了所有的数据库名.show databases的结果取自此表.

可以直接   select * from schemata;

或者   select schema_name from schemata;

来查看所有库名;

 在实际中还是用第二个搭配上group_concat(),

如    select group_concat(schema_name) from schemata;

 

 
TABLES:    提供了关于数据库中的表的信息,详细表述了某个表属于哪个schema,表类型,表引擎,创建时间等信息,其中table_name字段保存了所有列名信息,show tables from schemaname的结果取自此表.

例如select group_concat(table_name) from information_schema.tables;

 

COLUMNS:     提供了表中的列信息.详细表述了某张表的所有列以及每个列的信息,其中column_name保存了所有的字段信息.show columns from schemaname.tablename的结果取自此表.

 例如select group_concat(column_name) from information_schema.columns;

 一般在使用information_schema表的时候,都要用where选则需要的那个表,不然数据量太大

举个例子

得到表名:  select group_concat(table_name) from information_schema.tables where table_schema=database();

得到字段名: select group_concat(column_name) from information_schema.columns where table_name=xxx;

得到数据:  select group_concatusername,passward,xxx,…………) from xxx;
 

 

 

 

select group_concat(column_name) from information_schema.columns;

 Comments