数据库用户授权问题

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:
【 TiDB 使用环境】
arm v5.1.0

【概述】 场景 + 问题概述
需要给一个自定义用户在test库上授予两个权限:create routine和create temporary tables,会发现授权成功后show grants查不出来。操作步骤为:
image


然后我改成全局授权就可以成功:

但是像create user这种全局权限如果指定在某个库上的话会直接报错:
image

我的疑问是:
1、如果这两个权限是全局的,那么行为我认为应该和create user这种一致,范围不对时直接报错,而不是执行成功但是查不出来。如果是可以在库这一级设置,那么这个功能就有问题。
2、create routine应该是存储过程相关,我猜测是为了兼容mysql吧,就算授权了也不会有作用。
3、create temporary tables是和临时表相关,tidb5.3才支持了临时表,在此之前应该也只是兼容语法不会有实际作用。

不知我的理解是否正确。

关于
问题 1 :建议参考 dev mysql;
问题2、3:这是tidb 针对 mysql 兼容性的一个策略,及只做语法支持,不做功能实现。
如后续有必要 会在 noop functions 中加以限制(需要参考官网不同版本的说明)
https://docs.pingcap.com/zh/tidb/stable/system-variables/#tidb_enable_noop_functions-从-v40-版本开始引入

多谢。关于第一点我查了dev.mysql文档,每太找到能解释这个问题的内容,我在mysql测试了一下,也同样存在这个问题,能否发个参考链接:eyes:

我哦测试了下mysql现象不一致啊(5.7.30)
±-----------------------------------------------------------------------------+
| Grants for user_test@% |
±-----------------------------------------------------------------------------+
| GRANT USAGE ON . TO ‘user_test’@’%’ |
| GRANT SELECT, INSERT, CREATE ROUTINE ON rollback_test.* TO ‘user_test’@’%’ |
±-----------------------------------------------------------------------------+
2 rows in set (0.00 sec)

我看错了,mysql确实不一致,这么来说mysql是正常的,tidb不正常

嗯,这个可能得看源码了,也可以创建库级别权限之后创建下过程之类的,看是没权限,还是不显示

现在没法验证吧,它不支持SP:joy:
临时表的话我看也是直接转成实体表处理了

额,这个操作有点秀,可能是这两个支持的比较晚,所以。。。