这个问题是微信群中网友关于MySQL权限的讨论,有这么一个业务需求(下面是他的原话):

因为MySQL的很多功能都依赖主键,我想用zabbix用户,来监控业务数据库的所有表,是否都建立了主键。

监控的语句是:

FROM information_schema.tables t1

LEFT OUTER JOIN information_schema.table_constraints t2

ON t1.table_schema = t2.table_schema

AND t1.table_name = t2.table_name

AND t2.constraint_name IN ( "PRIMARY" )

WHERE t2.table_name IS NULL

AND t1.table_schema NOT IN ( "information_schema", "myawr", "mysql",

"performance_schema",

"slowlog", "sys", "test" )

AND t1.table_type = "BASE TABLE"

但是我不希望zabbix用户,能读取业务库的数据。一旦不给zabbix用户读取业务库数据的权限,那么information_schema.TABLES 和 information_schema.TABLE_CONSTRAINTS 就不包含业务库的表信息了,也就统计不出来业务库的表是否有建主键。有没有什么办法,即让zabbix不能读取业务库数据,又能监控是否业务库的表没有建立主键?

首先,我们要知道一个事实:information_schema下的视图没法授权给某个用户。如下所示

mysql> GRANT SELECT ON information_schema.TABLES TO test@"%";

ERROR 1044 (42000): Access denied for user "root"@"localhost" to database "information_schema"

关于这个问题,可以参考mos上这篇文章:Why Setting Privileges on INFORMATION_SCHEMA does not Work (文档 ID 1941558.1)

APPLIES TO:

MySQL Server - Version 5.6 and later

Information in this document applies to any platform.

GOAL

To determine how MySQL privileges work for INFORMATION_SCHEMA.

SOLUTION

A simple GRANT statement would be something like:

mysql> grant select,execute on information_schema.* to "dbadm"@"localhost";

ERROR 1044 (42000): Access denied for user "root"@"localhost" to database "information_schema"

The error indicates that the super user does not have the privileges to change the information_schema access privileges.

Which seems to go against what is normally the case for the root account which has SUPER privileges.

The reason for this error is that the information_schema database is actually a virtual database that is built when the service is started.

It is made up of tables and views designed to keep track of the server meta-data, that is, details of all the tables, procedures etc. in the database server.

So looking specifically at the above command, there is an attempt to add SELECT and EXECUTE privileges to this specialised database.

The SELECT option is not required however, because all users have the ability to read the tables in the information_schema database, so this is redundant.

The EXECUTE option does not make sense, because you are not allowed to create procedures in this special database.

There is also no capability to modify the tables in terms of INSERT, UPDATE, DELETE etc., so privileges are hard coded instead of managed per user.

那么怎么解决这个授权问题呢? 直接授权不行,那么我们只能绕过这个问题,间接实现授权。思路如下:首先创建一个存储过程(用户数据库),此存储过程找出没有主键的表的数量,然后将其授予test用户。

DELIMITER //

CREATE DEFINER=`root`@`localhost` PROCEDURE `moitor_without_primarykey`()

BEGIN

SELECT COUNT(*)

FROM information_schema.tables t1

LEFT OUTER JOIN information_schema.table_constraints t2

ON t1.table_schema = t2.table_schema

AND t1.table_name = t2.table_name

AND t2.constraint_name IN ( "PRIMARY" )

WHERE t2.table_name IS NULL

AND t1.table_schema NOT IN ( "information_schema", "myawr", "mysql",

"performance_schema",

"slowlog", "sys", "test" )

AND t1.table_type = "BASE TABLE";

END //

DELIMITER ;

mysql> GRANT EXECUTE ON PROCEDURE moitor_without_primarykey TO "test"@"%";

Query OK, 0 rows affected (0.02 sec)

此时test就能间接的去查询information_schema下的对象了。

mysql> select current_user();

+----------------+

| current_user() |

+----------------+

| test@% |

+----------------+

1 row in set (0.00 sec)

mysql> call moitor_without_primarykey;

+----------+

| COUNT(*) |

+----------+

| 6 |

+----------+

1 row in set (0.02 sec)

Query OK, 0 rows affected (0.02 sec)

查看test用户的权限。

mysql> show grants for test@"%";

+-------------------------------------------------------------------------------+

| Grants for test@% |

+-------------------------------------------------------------------------------+

| GRANT USAGE ON *.* TO `test`@`%` |

| GRANT EXECUTE ON PROCEDURE `zabbix`.`moitor_without_primarykey` TO `test`@`%` |

+-------------------------------------------------------------------------------+

2 rows in set (0.00 sec)

到此这篇关于关于MySQL绕过授予information_schema中对象时报ERROR 1044(4200)错误的文章就介绍到这了,更多相关mysql ERROR 1044(4200)内容请搜索云海天教程以前的文章或继续浏览下面的相关文章希望大家以后多多支持云海天教程!

原文链接:https://www.cnblogs.com/kerrycode/archive/2020/10/16/13826210.html

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

  1. 1135 mysql_Mysql实例mysql中一个普通ERROR 1135 (HY000)错误引发的血案

    <Mysql实例mysql中一个普通ERROR 1135 (HY000)错误引发的血案>要点: 本文介绍了Mysql实例mysql中一个普通ERROR 1135 (HY000)错误引发的血 ...

  2. 1044 mysql_MySQL 常见错误 ERROR 1044

    原标题:MySQL 常见错误 ERROR 1044 来源:潇湘隐者 , www.cnblogs.com/kerrycode/p/9198566.html 从供应商那边接手一个MySQL数据库(数据库版 ...

  3. ERROR 1044 (42000): Access denied for user/非root角色授权用户找不到已创建数据库

    没有权限,网上大部分说是 用户密码错误 或者空密码的情况下为了安全 而要通过关闭mysql服务等绕过权限. 但我是在设计数据库实验过程中,设计的用户通过角色授权,在验证用户权限时,发现用户找不到已创建 ...

  4. 从偶然的机会发现一个mysql特性到wooyun waf绕过题

    从偶然的机会发现一个mysql特性到wooyun waf绕过题 MayIKissYou | 2015-06-19 12:00 最近在测试的时候,偶然的机会发现了一个mysql的特性, 为啥是偶然的机会 ...

  5. 创建数据库 mysql 1044_mysql ERROR 1044 (42000): Access denied for user ''@'localhost' to database...

    1. 问题描述: 在MySQL控制台下创建数据库出现以下信息: mysql> CREATE DATABASE python; ERROR 1044 (42000): Access denied ...

  6. mysql 1044_mysql重置密码和mysql error 1044(42000)错误

    #mysql错误:(密码不正确,需要重置密码) ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passwor ...

  7. MySQL报错ERROR 1044 (42000)

    文章目录 1. 报错 2. 排查 3. 解决 1. 报错 进入mysql,执行针对库授予对应用户权限,报错: ERROR 1044 (42000): Access denied for user 'r ...

  8. MySQL之自带四库之information_schema库

    一.information_schema库简介   Mysql5.7版本自带4个数据库,information_schema.mysql.performance_schema.sys.INFORMAT ...

  9. 【Linux】【服务器】 CentOS7下远程访问mysql数据库_创建用户及授予权限_查看用户、修改密码详细步骤

    一.创建用户 CREATE USER 'username'@'%' IDENTIFIED BY 'password'; username:你将创建的用户名: %:指定该用户在哪个主机上可以登录,%表示 ...

最新文章

  1. 理解Meta Learning 元学习,这篇文章就够了!
  2. 算法-----三数之和等于0
  3. 【Python】青少年蓝桥杯_每日一题_7.27_邮箱密码
  4. android 高清壁纸设置慢
  5. pytorch保存模型运行时状态,记录点checkpoint
  6. ssm(Spring、Springmvc、Mybatis)实战之淘淘商城-第四天(非原创)
  7. maven项目在pom.xml中设置JDK编译版本
  8. http请求中get和post方法的区别
  9. java微调器_java-更改微调器标题栏样式
  10. fit文件用python画瀑布图
  11. webx框架升级springboot遇到的问题及解决方案
  12. 吉比特无源光纤说明书_[干货]光纤通信之缩略语英汉对照表
  13. 信号与系统:综述【知识梳理】
  14. c语言累加和求平均数程序,c语言编程:连续输入若干个正整数,求其和及其平均值,直到输入0结束....
  15. cadence17.4 - Checking Hostname and HostID in license file Match Failed
  16. Windows 10 21H1开启关闭卓越模式
  17. 一周小结(七)——从零开始配置VINS-Mono运行环境
  18. 表白神器——Python画丘比特之箭穿心
  19. 绿盟科技网络安全威胁周报2017.15 建议关注方程式组织泄漏大量针对Windows攻击工具...
  20. NQA和静态路由联动

热门文章

  1. Android百度地图,绘制,覆盖物,导航,定位,细腻分解!
  2. 计算机职称照图片,全国职称计算机报名如何上传照片。怎么提示你无需上传照片。可以直接进行报名呢...
  3. 数码宝贝相遇电脑版怎么玩 数码宝贝相遇安卓模拟器教程
  4. 解决centos8 中安装mysql5.7.26时 libtinfo.so.5()(64bit)被依赖的问题
  5. python基础进阶之堆糖头像爬虫
  6. Win7系统下文件或程序无法选择默认打开方式如何解决
  7. 408,你可敬的对手!
  8. 读书笔记软件调试之道 :问题的核心-诊断
  9. Java8新特性LocalDateTime获取年,月,周,当年第X周
  10. Chrome 浏览器安装Vue2、Vue3插件方法