MySQL 有意思的权限报错

文若2年前技术文章784

前言

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

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 权限。


相关文章

ES组件集成nlpSQL模块

ES组件集成nlpSQL模块

查看sql插件github https://github.com/NLPchina/elasticsearch-sql 安装cd elasticsearch #进入目录可以先去下载...

flume开启jmx加入grafana

部署flume_exporter需要go环境编译配置go环境首先下载go安装包Linux:https://golang.google.cn/dl/解压、添加环境变量tar -zxvf go*.tar....

Kubernetes网络模型与CNI网络插件

Kubernetes网络模型与CNI网络插件

在 Flannel 的网络插件中,容器跨主机网络的两种实现方法:UDP 和 VXLAN。它们有一个共性,就是用户的容器都连接在 docker0 网桥上。而网络插件则在宿主机上创建了一个特殊的设备(UD...

Kubernetes节点与令牌管理

令牌管理查看令牌```Plain Text [root@master ~]# kubeadm token list## **删除令牌**Plain Text [root@master ~]# ku...

Keepalived 高可用解决方案

Keepalived 高可用解决方案

Keepalived 起初是为 LVS 设计的,专门用来监控集群系统中各个服务节点的状态,后来有加入 VRRP 的功能,VRRP 是 Virtual Router Redundancy protoco...

HDFS元数据损坏恢复方法

HDFS元数据损坏恢复方法

HDFS JournalNode 编辑目录(dfs.journalnode.edits.dir)下数据损坏(单节点损坏或所有节点数据损坏),如何恢复 HDFS?单节点损坏a)  &...

发表评论    

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