赋权语句成功但是切换到被赋权的用户执行查询操作仍然显示没有权限

【 使用环境 】测试环境
【 OB or 其他组件 】ob
【 使用版本 】4.2.1
【问题描述】使用user1数据库创建表test,执行grant select,update,delete,insert on user1.test to user2; 显示执行成功。切换到user2,执行select * from user1.test;报错无权限访问user1数据库
请问这个是什么原因?

可以把整个赋权和查询 SQL和报错信息贴出来,另外可以查下user2有哪些权限

show grant 也 看看 use2 的都有啥权限

赋权语句是这个grant select,update,delete,insert on user1.test to user2,报错的是无权限访问user1,然后我切换到user2查看权限,show grants,显示了这个grant select,update,delete,insert on “user1”.“test” to “user2”

还有grant usage on . to ‘user2’

请问下 user1 和 user2 是 database 还是 user ?
请问下如何切换的 user?或者说有没有详细的操作步骤可以复现这个问题?

user1和user2是登录的时候是不同的账户登录的,然后user1用户下有user1命名的数据库,user2有user2命名的数据库,切换user2的时候直接切换了不同的账户

哦哦,user 名和 database 名都相同是吧?我们本地复现下看看~

我这边复现不出来您说的问题,麻烦帮忙看看我的复现步骤哪里和您执行的步骤不一致?

最好还是麻烦您也提供一个类似于我这边的详细的复现步骤?不然我们只能去猜您执行过的 SQL 序列是什么,很难复现出您说的问题。

我这边是先用 root 用户创建 user1 和 user2

obclient -h 11.124.5.43 -u root@mysql -P22603 -Dtest

obclient [test]> create user user1;
Query OK, 0 rows affected (0.171 sec)

obclient [test]> create user user2;
Query OK, 0 rows affected (0.122 sec)

obclient [test]> create database user1;
Query OK, 1 row affected (0.146 sec)

obclient [test]> create database user2;
Query OK, 1 row affected (0.124 sec)

obclient [test]> grant ALL PRIVILEGES ON *.* TO user1 WITH GRANT OPTION;
Query OK, 0 rows affected (0.136 sec)

然后登录 user1 给 user2 赋权限

obclient -h 11.124.5.43 -u user1@mysql -P22603 -Duser1

obclient [user1]> create table test(c1 int);
Query OK, 0 rows affected (0.208 sec)

obclient [user1]> grant select,update,delete,insert on user1.test to user2;
Query OK, 0 rows affected (0.249 sec)

最后登录 user2 查询 user1.test

obclient -h 11.124.5.43 -u user2@mysql -P22603 -Duser1

obclient [user1]> select * from user1.test;
Empty set (0.047 sec)

obclient [user1]> show grants;
+-------------------------------------------------------------------+
| Grants for user2@%                                                |
+-------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'user2'                                     |
| GRANT DELETE, INSERT, UPDATE, SELECT ON `user1`.`test` TO 'user2' |
+-------------------------------------------------------------------+
2 rows in set (0.051 sec)

2 个赞

感谢您帮我复现这个场景,可能是我没有说清楚,使用obclient黑窗命令去赋权和查询,都是可以成功的,你复现的这个场景是没有问题的,我这边在命令窗口也就是obclient命令下切换到user2是可以查询成功的,但是在白屏状态下显示赋权成功,切换用户user2是显示无权限访问user1数据库

76fc1c8474ea92ae00b8c8185dc04de
4d3cbf7e3a1ecc51a15f978a6411360

这里rpt就是user1,rptapp是user2

哦哦,ODC 的问题是吧?我找个熟悉 ODC 的同学来看下~

麻烦确认下 RPT 库是否加入到了同一个项目下。


是在同一个项目下的

目前在单个 SQL 窗口不支持跨数据源访问哈,这个报错信息我们后续优化下。

相同的数据源是可以查询的是嘛