关于MySQL绕过授予information_schema中对象时报ERROR 1044(4200)错误

yizhihongxing

关于MySQL绕过授予information_schema中对象时报ERROR 1044(4200)错误的攻略如下:

1. 问题概述

当我们授权一个用户访问MySQL数据库中的information_schema时,有时候会遇到错误提示:

ERROR 1044 (42000): Access denied for user 'user_name'@'%' to database 'information_schema'

这是因为MySQL使用了特殊的代码路径来处理这些系统表,从安全角度考虑,拒绝用户访问information_schema中的数据和对象,以限制可能的攻击和数据泄露。

但是,在某些情况下,我们确实需要允许用户访问information_schema中的数据和对象。本文将讨论如何绕过该问题的方法。

2. 解决方案

我们可以使用以下三种方法来避免ERROR 1044(4200)错误:

方法一:使用授予权限

我们可以使用以下语句授权用户访问information_schema中的数据和对象:

GRANT SELECT ON information_schema.* TO 'user_name'@'%';

这个语句将授予'user_name'@'%'用户在information_schema数据库中选择任何表的权限。

方法二:更改MySQL源代码

MySQL默认不允许我们访问information_schema中的任何表,这是因为源代码中定义了一个函数security_ctx_check(),该函数会检查用户的权限,如果没有访问表的权限则返回错误代码。我们可以更改源代码,并重新构建MySQL以绕过此限制。

以下是如何更改MySQL代码的步骤:

  1. 下载MySQL的源代码
    wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.36.tar.gz

  2. 解压缩源代码包
    tar -zxvf mysql-5.7.36.tar.gz

  3. 更改源文件中的security_ctx.cc文件
    cd mysql-5.7.36/sql
    vi security_ctx.cc

找到以下代码片段:
if (arg_db == system_schema || arg_db == mysql_schema ||
arg_db == performance_schema_schema || arg_db == information_schema_schema)
return1;
}
DBUG_RETURN(0);

并更改为:
if (arg_db == system_schema || arg_db == mysql_schema ||
arg_db == performance_schema_schema) return1;
DBUG_RETURN(0);

这里我们将if语句中的arg_db == information_schema_schema删除,并重新排版代码。

  1. 重新构建MySQL
    cmake .
    make
    make install

重新构建MySQL可能需要一些时间,但是这个方法可以完全绕过对information_schema的限制。

方法三:使用MySQL中的FEDERATED引擎

MySQL中的FEDERATED引擎可以将数据源的表“联合”到当前MySQL服务器中。通过使用FEDERATED引擎,我们可以实现绕过授权和安全问题的目的。以下是使用FEDERATED引擎的步骤:

  1. 首先需要检查MySQL服务器是否已经开启FEDERATED引擎,可以输入以下SQL语句:

mysql
SHOW ENGINES;

如果FEDERATED引擎已经在列表中,那么可以跳过第2步。

  1. 开启FEDERATED引擎
    在启动MySQL服务器时,需要使用--federated选项开启FEDERATED引擎。如果MySQL服务器已经按照二进制安装包安装,那么可以在my.cnf文件中添加如下选项:

[mysqld]
federated=1

  1. 创建一个FEDERATED表
    假设本地MySQL服务器的IP地址为192.168.1.1,端口号为3306,用户名为user_name,密码为password,那么我们可以通过以下SQL语句来创建一个FEDERATED表:

mysql
CREATE TABLE federated_table (
id INT(11) NOT NULL AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
PRIMARY KEY (id)
) ENGINE=FEDERATED CONNECTION='mysql://user_name:password@192.168.1.1:3306/your_database/Table_name';

在这个例子中,我们在本地MySQL服务器上创建一个名为federated_table的表,并将它连接到位于远程MySQL服务器上的your_database数据库中的Table_name表。

注意,我们需要使用“mysql://”URL格式来定义远程MySQL服务器的连接信息,然后在后面跟着用户名、密码、IP地址、端口和数据库和表名。

以上是三种方法中的小部分示例,可以根据具体情况选择不同的方法。绕过授权和安全限制是有风险的,请在使用前评估风险。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:关于MySQL绕过授予information_schema中对象时报ERROR 1044(4200)错误 - Python技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • 深入浅析Mysql联合索引最左匹配原则

    MySQL联合索引是一种通过组合多个列来优化查询性能的索引类型。其中,联合索引的最左匹配原则是指,索引能够被优化使用的部分内容必须是联合索引从左到右的前缀。在本文中,我们将深入浅析Mysql联合索引的最左匹配原则,以及如何优化查询性能。 什么是联合索引最左匹配原则? 联合索引最左匹配原则是指,在使用联合索引进行查询时,只有从左到右的连续列可以被索引使用。换言…

    MySQL 2023年5月19日
    00
  • 安装MySQL 5后无法启动(不能Start service)解决方法小结

    下面是针对“安装MySQL 5后无法启动(不能Start service)解决方法小结”的完整攻略: 问题描述 在安装MySQL 5后,有时候会出现无法启动(MySQL cannot start service)的情况。如何解决这个问题呢? 解决方法 检查my.ini文件是否正确 在安装MySQL后,my.ini文件可能会出现问题,导致MySQL无法启动。因…

    MySQL 2023年5月18日
    00
  • mysql高级、索引

    1.视图 # 引子 select * from emp left join dep on emp.dep_id = dep.id union select * from emp right join dep on emp.dep_id = dep.id; create view temp(emp_id,emp_name,salary,dep_id,dep_i…

    MySQL 2023年4月12日
    00
  • Mysql中行转列和列转行

    一、行转列 即将原本同一列下多行的不同内容作为多个字段,输出对应内容。 建表语句 DROP TABLE IF EXISTS tb_score; CREATE TABLE tb_score(    id INT(11) NOT NULL auto_increment,    userid VARCHAR(20) NOT NULL COMMENT ‘用户id’,…

    MySQL 2023年4月13日
    00
  • Mysql 文件配置解析

    MySQL 文件配置解析 MySQL 是广泛使用的关系数据库管理系统。MySQL 服务器有一个默认的配置文件 my.cnf,这个文件包含了大量的配置选项。在使用 MySQL 时,我们通常需要修改这个配置文件,以满足我们的特定需求。 my.cnf 文件的位置 my.cnf 文件的默认路径是 /etc/mysql/my.cnf。但是,在不同的操作系统中,可能存在…

    MySQL 2023年5月18日
    00
  • IDEA下Maven项目中通过JDBC连接MySQL数据库

    1. 在当前Maven项目的pom.xml文件中导入数据库依赖: <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> </dependenc…

    MySQL 2023年4月11日
    00
  • MySQL修改和删除事件

    MySQL修改和删除事件的方法可以通过以下步骤完成: 登录MySQL数据库,使用指定的用户和密码。 在MySQL中,使用以下命令查看所有的事件: SHOW EVENTS; 如果需要修改或删除某个事件,可以使用以下命令: ALTER EVENT event_name ON SCHEDULE start_time DO event_body; DROP EVEN…

    MySQL 2023年3月10日
    00
  • 解决MySQL启动报错:ERROR 2003 (HY000): Can’t connect to MySQL server on ‘localhost’ (10061)

    针对MySQL启动时报错“ERROR 2003 (HY000): Can’t connect to MySQL server on ‘localhost’ (10061)”的问题,我们可以根据下面的步骤进行排查和解决。 原因分析 报错信息中指出了“Can’t connect to MySQL server on ‘localhost’”,大致意思是无法连接到…

    MySQL 2023年5月18日
    00
合作推广
合作推广
分享本页
返回顶部