MySQL 内置系统表详解及用户hash查询

5.6版本自带的库为:information_schema、mysql、performance_schema、test

5.7版本自带的库为:information_schema、mysql、performance_schema、sys

以5.6版本为例,查看数据库内置系统表:
在这里插入图片描述
5.7版本内置系统表:
在这里插入图片描述

information_schema

Information_schema数据库是MySQL自带的,它提供了访问数据库元数据的方式。

元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等。有些时候用于表述该信息的其他术语包括“数据词典”和“系统目录”。

在MySQL中,把 information_schema 看作是一个数据库,确切说是信息数据库。其中保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等。在INFORMATION_SCHEMA中,有数个只读表。它们实际上是视图,而不是基本表,因此,你将无法看到与之相关的任何文件

简单来说,这个库在mysql中就是个信息数据库,它保存着mysql服务器所维护的所有其他数据库的信息,包括了数据库名,表名,字段名等。在注入中,infromation_schema库的作用无非就是可以获取到table_schema、table_name、column_name这些数据库内的信息。

  • TABLES:提供了关于数据库中的表的信息(包括视图),详细表述了某个表属于哪个 schema、表类型、表引擎、创建时间等信息,show tables from schemaname 的结果取之此表。

  • COLUMNS:提供了表中的列信息,详细表述了某张表的所有列以及每个列的信息,show columns from schemaname.tablename的结果取之此表。

  • STATISTICS:提供了关于表索引的信息,show index from schemaname.tablename 的结果取之此表。

  • USER_PRIVILEGES(用户权限):给出了关于全程权限的信息,该信息源自 mysql.user 授权表(非标准表)。

  • SCHEMA_PRIVILEGES(方案权限):给出了关于方案(数据库)权限的信息,该信息来自 mysql.db 授权表(非标准表)。

  • TABLE_PRIVILEGES(表权限):给出了关于表权限的信息,该信息源自 mysql.tables_priv 授权表(非标准表)。

  • COLUMN_PRIVILEGES(列权限):给出了关于列权限的信息,该信息源自 mysql.columns_priv 授权表(非标准表)。

  • CHARACTER_SETS(字符集):提供了mysql实例可用字符集的信息,SHOW CHARACTER SET结果集取之此表。

  • COLLATIONS:提供了关于各字符集的对照信息。

  • COLLATION_CHARACTER_SET_APPLICABILITY:指明了可用于校对的字符集,这些列等效于 SHOW COLLATION 的前两个显示字段。

  • TABLE_CONSTRAINTS:描述了存在约束的表,以及表的约束类型。

  • KEY_COLUMN_USAGE:描述了具有约束的键列。

  • ROUTINES:提供了关于存储子程序(存储程序和函数)的信息,此时,ROUTINES 表不包含自定义函数(UDF),名为“mysql.proc name”的列指明了对应于 INFORMATION_SCHEMA.ROUTINES 表的mysql.proc表列。

  • VIEWS:给出了关于数据库中的视图的信息,需要有 show views 权限,否则无法查看视图信息。

  • TRIGGERS:提供了关于触发程序的信息,必须有super权限才能查看该表。

mysql

mysql 的核心数据库,类似于 sql server 中的 master 表,主要负责存储数据库的用户、权限设置、关键字等 mysql 自己需要使用的控制和管理信息。(常用的如在 mysql.user 表中修改 root 用户的密码)。
在这里插入图片描述

performance_schema

PERFORMANCE_SCHEMA 主要用于收集数据库服务器性能参数,并且库里的表的存储引擎均为 PERFORMANCE_SCHEMA,用户不能创建存储引擎为 PERFORMANCE_SCHEMA 的表。

performance_schema在5.7.x及以上版本中默认启用(5.6.x及以下版本默认关闭)。如果要显式启用或关闭,我们需要使用参数performance_schema=ON|OFF设置,并在my.cnf中进行配置。

这里的数据表分为几类:

  • setup table:设置表,配置监控选项。

    setup_consumers:描述各种事件。

    setup_instruments:描述这个数据库下的表名以及是否开启监控。

    setup_timers :描述监控选项已经采样频率的时间间隔。

  • current events table:记录当前那些thread 正在发生什么事情。

  • history table:发生的各种事件的历史记录表。

  • summary table:对各种事件的统计表。

  • 其他表。

sys

sys_config:这是在这个系统库上存在的唯一一个表。

sys数据库表说明:

CREATE TABLE `sys_config` (
  `variable` varchar(128) NOT NULL,
  `value` varchar(128) DEFAULT NULL,
  `set_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `set_by` varchar(128) DEFAULT NULL,
  PRIMARY KEY (`variable`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
  • variable:配置选项名称

  • value:配置选项值

  • set_time:该行配置修改的时间

  • set_by:该行配置信息修改者,如果从被安装没有修改过,那么这个数据应该为NULL

在这里插入图片描述

以上值的会话变量为@sys.+表中variable字段,如

@sys.statement_truncate_len

临时改变值,在会话中会一直使用这个值:

set @sys.statement_truncate_len = 32;

如果想要恢复使用表的默认值,只需要将这个会话值设置为null:

set @sys.statement_truncate_len = null;

diagnostics.allow_i_s_tables

默认为OFF ,如果开启表示允许diagnostics() 存储过程执行扫描information_schema.tables 表,如果表很多,那么可能会很耗性能。

diagnostics.include_raw

默认为OFF,开启将会从metrics 视图输出未加工处理的数据。

statement_performance_analyzer.limit

视图在没有加limit限制时,返回的最大行数。

statement_truncate_len

通过format_statement()函数返回值的最大长度。

debug

这个表非默认选项还有一个@sys.debug参数,可以手动加入:

INSERT INTO sys_config (variable, value) VALUES('debug', 'ON');
UPDATE sys_config SET value = 'OFF' WHERE variable = 'debug';
SET @sys.debug = NULL;

关于此表有两个触发器:

sys_config_insert_set_user触发器

如果加入新行通过insert语句,那么这个触发器会把set_by列设置为当前操作者。

sys_config_update_set_user触发器

如果加入新行通过update语句,那么这个触发器会把set_by列设置为当前操作者。

test

这是安装时创建的一个测试数据库,是一个空数据库,没有任何表,可以删除。

查询用户的hash

MySQL中hash的加密方式共分为两种。MySQL4.1之前的版本中,所用的加密方式为MySQL 323,加密出来的hash是16位的。MySQL4.1包括之后的版本中,所用的加密方式为MySQL SHA1,加密出来的hash是40位的。

1.登录mysql

/usr/local/mysql/bin/mysql -uroot -p

2.查询数据库

show databases;

3.找到mysql库并进入该库

use mysql;

4.查询数据表

show tables from mysql;

5.找到user表并查询表中字段

select * from user;

6.查询user、password字段信息

select user,password from user;

得到user:root,password:*81F5E…

7.查询hash值
在这里插入图片描述

hashcat 使用教程

上面获得用户hash值使用的是一个在线网站,也可以使用kali自带的hashcat进行破解。hashcat是一款自称为世界上最快的密码破解工具。

hashcat 常用命令

在这里插入图片描述

hashcat 破解模式

在这里插入图片描述

hashcat 集成字符集

在这里插入图片描述
在这里插入图片描述

hash id 对照表

img
在这里插入图片描述
不知道为什么失败了,应该是个人操作问题,在这里就不予深究了。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MySQL 中的 hash join 是一种连接两个的方法,它通过将其中一个的数据哈希到内存中的哈希来实现。另一个的数据在哈希上进行匹配,从而得到符合条件的行。 这种方法适用于其中一个的数据量较小的情况。因为哈希查询速度很快,所以这种方法效率高。但是,如果其中一个的数据量很大,则需要将整个加载到内存中,这可能会导致内存不足。 在 MySQL 中,使用 INNER JOIN、LEFT JOIN 或 RIGHT JOIN 关键字可以实现 hash join 操作。 ### 回答2: MySQLhashJoin是一种关联查询的算法,用于将两个中的数据进行关联。它通过计算每个的关联列的哈希值,将相同哈希值的记录分配到同一个哈希桶中,然后对每个哈希桶进行内存中的关联操作。 首先,hashJoin需要将两个要关联的按照关联列进行哈希分区。然后,对于第一个的每个分区,将其哈希列值与第二个进行匹配。如果哈希值相同,则将两个记录进行关联,生成结果。 hashJoin的优点是在内存充足的情况下,处理大规模数据的效率较高。由于哈希是在内存中构建的,所以可以减少磁盘I/O的开销。此外,它适用于多种关联类型,如内连接、左连接、右连接等。 然而,hashJoin也有一些限制。首先,它需要将整个进行哈希分区,因此在内存不足的情况下,可能导致性能下降。其次,在进行哈希分区和关联操作时,需要消耗较多的CPU资源。此外,如果两个中的关联列不具有相同的数据分布,可能导致哈希桶不均匀,进而影响关联操作的效率。 总的来说,MySQLhashJoin算法是一种高效的关联查询方法,可以在合适的场景下提供较好的性能。但需要注意配合适的内存大小,并保证关联列的数据分布较为均匀,以达到最佳的运行效果。 ### 回答3: MySQL中的hashJoin是一种用于联接操作的算法。联接操作是将多个中的数据按照某些条件进行匹配和合并的过程。而hashJoin是其中一种高效的联接算法。 hashJoin的原理是利用哈希的特性,在内存中构建一个哈希来存储较小中的数据。首先,将待联接的两个中的一个的数据读入内存并构建哈希,将哈希的键值设为联接条件的键值,并将相应的数据行存储在哈希中。然后,遍历另一个的数据,对于每一行数据,通过联接条件的键值查找哈希中是否存在对应的数据行,如果存在,则将两行数据进行合并,并输出结果。 相比于其他联接算法,hashJoin的优点主要体现在以下几个方面: 1. 内存控制:hashJoin将较小的数据存储在内存中,避免了大规模的磁盘读写操作,提高了查询效率。同时,由于使用哈希存储数据,可以大幅度减少内存的占用空间。 2. 快速查找:哈希的查找操作具有快速的特性,可以在常数时间内完成查找操作。这使得hashJoin能够在较短的时间内完成联接操作,适用于处理大规模数据的场景。 3. 并行化处理:由于hashJoin的哈希是在内存中构建的,可以方便地进行并行化处理。可以将不同的数据分配给不同的CPU进行处理,提高了联接操作的并行度和效率。 需要注意的是,hashJoin算法对内存的需求较高,如果内存不足,可能会导致性能下降或者无法完成联接操作。此外,选择合适的联接条件和恰当的索引也会对hashJoin的效率产生影响。因此,在使用hashJoin时,需要根据具体的业务场景和数据特点进行调优和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值