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

关于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日

相关文章

  • php 在线 mysql 大数据导入程序

    1 <?php 2 header(“content-type:text/html;charset=utf-8”); 3 error_reporting(E_ALL); 4 set_time_limit(0); 5 $file=’./test.sql’; 6 $data=file($file); 7 8 echo “<pre>”; 9 //p…

    MySQL 2023年4月13日
    00
  • mysql基础

    SQL语句 SQL语句分类 SQL分类: 数据定义语言:简称DDL(Data Definition Language),用来定义数据库对象:数据库,表,列等。关键字:create,alter,drop等 数据操作语言:简称DML(Data Manipulation Language),用来对数据库中表的记录进行更新。关键字:insert,delete,upd…

    MySQL 2023年4月27日
    00
  • mysql处理添加外键时提示error 150 问题的解决方法

    首先我们需要了解一些概念: 外键:数据库中,一个表的外键可以关联到另一个表的主键。在使用外键时,若子表中的外键引用了主表中不存在的值,则会报错。 error 150:这是MySQL中“添加外键失败”的常见错误提示,通常是由于外键定义不当导致的。 解决方法如下: 确认外键关联的主表和子表均使用InnoDB存储引擎 首先,我们需要确认外键关联的主表和子表均使用I…

    MySQL 2023年5月18日
    00
  • mysql插入索引太慢 加参数delay_key_write

    插入大数据时,有索引会很慢,可以DISABLE KEYS,或者直接在table中加入DELAY_KEY_WRITE 注: delay_key_write这个参数只对myisam类型表有效 如果你某个表需要经常update操作,这个参数就很管用! 但等delay_key_write使用时,出现断电或重启时,会导致在cache的索引update没来得及更新,所以…

    MySQL 2023年4月13日
    00
  • MySQL远程无法连接的一些常见原因总结

    MySQL远程无法连接的一些常见原因总结 MySQL是一款十分流行的关系型数据库,常用于web应用和后端服务中。然而,在使用MySQL时,经常会遇到远程无法连接的问题。本文总结了一些常见的原因,并为解决这些问题提供了一些示例。 原因一:MySQL服务未启动 在无法连接MySQL时,首先需要检查MySQL服务是否已经启动。可以使用以下命令检查MySQL服务状态…

    MySQL 2023年5月18日
    00
  • MySQL使用索引优化性能

    下面是关于“MySQL使用索引优化性能”的完整攻略。 什么是索引 MySQL索引是一种数据结构,用于提高数据库表中数据的读取效率。它类似于书索引中的目录,能够快速定位并获取相应的数据。 索引的优缺点 索引的优点: 提高查询性能:可以加快数据的检索速度。 加速排序:对于排序产生很大的帮助。 加速数据的过滤:在执行SELECT查询时,可以使用索引加速条件匹配。 …

    MySQL 2023年5月19日
    00
  • InnoDB的关键特性-插入缓存,两次写,自适应hash索引详解

    InnoDB是MySQL数据库管理系统中的一种存储引擎,其特性有很多,其中比较重要的特性包括插入缓存、两次写和自适应hash索引。 插入缓存 插入缓存是InnoDB中的一种缓存机制,它能够提高插入性能。当数据被插入到表中时,InnoDB并不会立即将数据写入磁盘,而是先将数据写入缓存中,然后等待一定的时间再将缓存中的数据写入磁盘。这个时间是通过配置参数inno…

    MySQL 2023年5月19日
    00
  • mysql数据库mysql: [ERROR] unknown option ‘–skip-grant-tables’

    首先,这个错误是因为该命令中使用了未知选项”–skip-grant-tables”,导致MySQL无法识别该选项,所以需要进行相应的处理来避免这个错误。下面是解决方案的完整攻略: 问题描述 在使用MySQL时,执行命令”mysql –skip-grant-tables”,会出现如下错误信息: mysql: [ERROR] unknown option ‘…

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