【 TiDB 使用环境】生产环境
【 TiDB 版本】7.1.2
【复现路径】
grant select on db_1.test to ‘user’@‘%’;
【遇到的问题:问题现象及影响】
navicat中没有显示db_1数据库,但执行show databases有db_1,navicat是通过SELECT SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME FROM information_schema.SCHEMATA,获取数据库信息,执行该SQL没有db_1的结果
这可能是由于 Navicat 在获取数据库信息时使用了 SELECT SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME FROM information_schema.SCHEMATA
这个 SQL 查询语句,但该语句没有返回您授权的数据库 db_1
。
这是因为在 TiDB 中,授权操作只会影响到用户对表的权限,而不会改变数据库的元数据信息。因此,即使您对表 db_1.test
授予了 SELECT
权限,但数据库元数据中的信息仍然不包含 db_1
。
虽然 Navicat 在获取数据库信息时可能无法显示 db_1
,但您仍然可以通过执行 SHOW DATABASES
命令来查看数据库列表,其中应该包含 db_1
。
如果您需要在 Navicat 中显示数据库 db_1
,您可以尝试重新连接到 TiDB,或者在 Navicat 中执行 SHOW DATABASES
命令来刷新数据库列表。
表妹越来越专业了
我用dbeaver出现过这种情况,可以刷新一下链接或者重新链接就出来了。
navicat里面不行的,主要在于information_schema.SCHEMATA里面没有对应的值,mysql也不存在这种现象,我认为是个bug
刷新下或者重连
大概明白你的意思了,只给单表授权从SCHEMATA里是看不到该库信息的,在tidb里貌似有整库的权限才能看到SCHEMATA里的库名,刚测了下这点和mysql确实似乎不太一致,不知道是不是预期内的行为。
不显示schema,所以这条语句是授权查询权限不成功呗?
不是,授权成功了,查询数据和show databases都没问题,只是在information_schema.SCHEMATA看不到对应库名,应该是鉴权这里和mysql不太一样。
那确实有可能是个bug了
这个方法可行,目前我也是这样做的,但还是不方便
可以换dbeaver试试,我就是从navicat转到dbeaver的
dbeaver、datagrip都试试,navicate目前只能这么搞
sqlyog试一试