MySQL 有意思的权限报错

文若2年前技术文章684

前言

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

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


相关文章

PG的锁(二)

四、死锁PostgreSQL自动检测死锁情况并会自动回滚其中一个事务进行处理,从而其他事务完成。db1=# select * from t1 where id in (1,2,3);  id | i...

卸载mysql

1、查看安装的mysql,并停止mysqlps -ef|grep mysql #停止mysql  kill -9 pid2、卸载mysql安装包二进制安装的没有安装包 #查看安装的mysql...

shell编程基础(二)

1、条件表达式1.1 文件判断常用文件测试操作符:-d文件,d的全拼为directory 文件存在且为目录则为真,即测试表达式成立-f文件,f的全拼为file 文件存在且为普通文件则为真,即测试表达式...

Phoenix SQLLine快速使用

Phoenix SQLLine快速使用

1、启动在Phoenix主目录下bin文件夹中,执行以下命令:bin/sqlline.py master其中master为Zookeeper中的节点,如果有多个节点,中间使用逗号分开。执行该命令后,客...

企业级大数据安全架构(八)

企业级大数据安全架构(八)

前面第七章详细介绍了部署FreeIPA来做kerberos认证,这节接着介绍FreeIPA高可用部署1.FreeIPA高可用配置说明:在安装完一台ipa-server之后,在另一个备份节点部署ipa-...

mysql binlog文件删除情况下恢复主从

mysql binlog文件删除情况下恢复主从

1、对主库的数据进行全库dump2、删除自建的从库数据库3、将主库数据source到从库(1)将全库dump文件传到从库服务器节点scp ./backup_2023-12-08_14_49_17.sq...

发表评论    

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