MySQL 有意思的权限报错

文若8个月前技术文章201

前言

今天遇到了一个报错,觉得挺有意思的,在此记录下。

SELECT command denied to user 'xxx'@'xxx' for table 'xxx'

1. 报错原因

这里是研发提了一条修改视图的 SQL,说报权限问题,当时就觉得很定是 DEFINER 定义者和修改视图的账号不一样,且没有 super 权限。 就让他去找视图定义账号去手动执行下。

ALTER VIEW

此时研发表示不知道是谁创建的视图,我就帮他去看了下,发现视图的创建者和审核平台的用户名一样,那说明审核平台是有权限执行这条 SQL 的。然后查了下报错:

ERROR:SELECT command denied to user 'xxx'@'xxx' for table 'xxx'

没有这张表的权限,审核平台有整个库所有的权限呀,很奇怪,于是就去查看了下视图的 SQL,发现 db_name.table_name 视图里面有其他库的信息。而且这个库名,数据库中不存在。那这个报错就有点抽象,随后测试了下。

创建一个只读用户:

root@mysql 10:53:  [(none)]>grant select on op_service_db.* to test1@'%' identified by '123';

use 一个存在的库,但是用户没有权限:

test1@mysql 10:53:  [(none)]>use op_bak;
ERROR 1044 (42000): Access denied for user 'test1'@'%' to database 'op_bak'

use 一个不存在的库:

test1@mysql 10:53:  [(none)]>use owqdwqd;
ERROR 1044 (42000): Access denied for user 'test1'@'%' to database 'owqdwqd'

无论数据库是否存在,都报没有权限,挺抽象的,SQL 是研发从 test 环境直接复制的,没有改库信息。

后记

如果遇到此类报错,最好先根据报错内容,查看下 SQL 语句,多数情况下,答案就在 SQL 里面。还有就是要注意 MySQL 权限这里,即使不存在的库,在此类场景下,也报权限不足,除非你的账号拥有 super 权限。


相关文章

CDH时钟同步问题

CDH时钟同步问题

首先执行如下命令:查看chronyd是否启动systemctl status chronyd如果没启动执行如下命令启动systemctl restart chronyd每台检查时间状态chronyc...

Dockerfile编写指南

Dockerfile编写指南

一、背景  在k8s提出抛弃docker,拥抱其他的cri插件的情况下,为什么还有这篇指南呢?首先Dockerfile作为容器打包的标准,已经存在了很多年了。其中的编写技巧到现在也是一直延续的,所以并...

mysqldump导入备份文件报错记录

mysqldump导入备份文件报错记录

mysqldump导入备份文件报错记录【问题记录1】目前遇到过两类报错,均主要是因为 GTID 引起,两类报错内容完全不同,但解决方法相同,报错内容具体如下:第一类报错:在自建数据库往云上数据库导入数...

PromQL查询解析

一. 概述Prometheus除了存储数据外,还提供了一种强大的功能表达式语言 PromQL,允许用户实时选择和汇聚时间序列数据。表达式的结果可以在浏览器中显示为图形,也可以显示为表格数据,或者由外部...

MySQL gh-ost DDL 变更工具

MySQL gh-ost DDL 变更工具

1. MDL 锁介绍MySQL 的锁可以分为四类:MDL 锁、表锁、行锁、GAP 锁,其中除了 MDL 锁是在 Server 层加的之外,其它三种都是在 InnoDB 层加的。下面主要介绍一下:MDL...

Apache hive 对接达梦数据库FQA

Apache hive 对接达梦数据库FQA

对接中遇到的问题问题1解决办法定义dm_svc.confIME_ZONE=(480) LANGUAGE=(cn) HIVE=(172.16.104.165:5236) [HIVE] KEYWO...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。