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

这篇文章主要介绍了关于MySQL绕过授予information_schema中对象时报ERROR 1044(4200)错误,本文给大家分享解决方法,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

这个问题是微信群中网友关于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 //
CREATEDEFINER=`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 fortest@%;

+——————————————————————————-+
| Grants fortest@%|

+——————————————————————————-+
| 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.jb51.net/article/197565.ht

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:SEO优化专员,转转请注明出处:https://www.chuangxiangniao.com/p/895978.html

(0)
上一篇 2025年1月4日 00:29:10
下一篇 2025年1月4日 00:09:01

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 分区表场景下的 SQL 优化

    这篇文章主要介绍了分区表场景下的 SQL 优化,帮助大家更好的理解和学习SQL,感兴趣的朋友可以了解下 导读 有个表做了分区,每天一个分区。 该表上有个查询,经常只查询表中某一天数据,但每次都几乎要扫描整个分区的所有数据,有什么办法进行优化…

    数据库 2025年1月4日
    100
  • SQL Server 使用join all优化 or 查询速度

    一个老项目,加载列表奇慢,超过10秒钟, 主要涉及两个表, user表,procuts表。因为涉及多层代理,使用site字段保存目录 比如:,master,test, 表示 该用户为 test 的下级代码,test登录后可以看到 test名…

    数据库 2025年1月4日
    100
  • SQL Server 开窗函数 Over()代替游标的使用详解

    这篇文章主要介绍了SQL Server 开窗函数 Over()代替游标的使用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 前言: 今天在优化工作中遇到的sql慢的问题,发现以前用了挺多游标来处理…

    2025年1月4日
    100
  • 详解partition by和group by对比

    这篇文章主要介绍了详解partition by和group by对比,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 今天大概弄懂了partition by和group …

    2025年1月4日 数据库
    100
  • MariaDB数据库的外键约束实例详解

    约束保证了数据的完整性和一致性。下面这篇文章主要给大家介绍了关于MariaDB数据库的外键约束的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧 外键 外键的用途是确保数据的完整性。它通常包括以…

    数据库 2025年1月4日
    100
  • Access数据库日常维护方法(优化)

    这篇文章主要介绍了Access数据库日常维护方法(优化),需要的朋友可以参考下 本文适用范围:使用Access作为数据库建设的网站。 Access数据库的安全性 1、确保Access数据库不能直接下载,也就是通过http方式无法直接下载您的…

    数据库 2025年1月4日
    100
  • @@IDENTITY与SCOPE_IDENTITY()

    在一条 INSERT、SELECT INTO 或大容量复制语句完成后,@@IDENTITY 中包含语句生成的最后一个标识值 在一条 INSERT、SELECT INTO 或大容量复制语句完成后,@@IDENTITY 中包含语句生成的最后一个…

    数据库 2025年1月4日
    100
  • 解决sql server保存对象字符串转换成uniqueidentifier失败的问题

    这篇文章主要介绍了解决sql server保存对象字符串转换成uniqueidentifier失败的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 一、 背景介绍 web应用采用的是ssh框架,数据库使用的sql se…

    数据库 2025年1月4日
    100
  • 阿里云如何设置帝国备份王后台数据库

    帝国备份王升级到了5.1版本,相比于以前的版本,设置相对复杂一些,如果你使用的是阿里云空间,且使用的是帝国备份王5.1以上版本,首次设置可能需要耗费一些时间,我尝试了五分钟左右,终于成功正确的设置了帝国备份王后台的各项参数,提供一下方法,节…

    数据库 2025年1月4日
    100
  • 图书管理系统的sqlserver数据库设计示例

    这篇文章主要介绍了图书管理系统的sqlserver数据库设计示例,文中通过E_R图、数据字典、数据库脚本代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 首先,在写数据库时需要遵循以下…

    2025年1月4日
    100

发表回复

登录后才能评论

联系我们

156-6553-5169

在线咨询: QQ交谈

邮件:253000106@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

联系微信