tidb 授权用户网段问题

【 TiDB 使用环境】生产环境 or 测试环境 or POC
【 TiDB 版本】
4.0.11
【遇到的问题】
创建了一个test@'192.168.%'用户 和test@'192.168.12.%'用户
对test库授权增删改查给test@‘192.168.12.%’ ; test库授权查询给test@‘192.168.%’ 发现授权后并不能进行增删改查 mysql里不是小网段段会覆盖大网段的权限吗?tidb是反过来的?
【复现路径】做过哪些操作出现的问题
【问题现象及影响】
image
image

但是show grants;看明明有删除权限 就很奇怪的现象


【附件】

请提供各个组件的 version 信息,如 cdc/tikv,可通过执行 cdc version/tikv-server --version 获取。

1赞

我这边测试了下没有问题,和mysql一样的,6.0版本

1赞

image
您好 您这样授权试试呢
image

1赞

能不能麻烦试试delete from sbtest.sbtest1;

1赞

image
也是一样的

1赞

这是我再6.0 试的结果
(root@192.168.135.148) [(none)] 17:26:53> create user jian@‘192.168.%’ identified by ‘123456’;
Query OK, 0 rows affected (0.13 sec)

(root@192.168.135.148) [(none)] 17:27:10> create user jian@‘192.168.135.%’ identified by ‘123123’;
Query OK, 0 rows affected (0.13 sec)
(root@192.168.135.148) [(none)] 17:28:41> create user jian@‘192.168.%.%’ identified by ‘111111’;
Query OK, 0 rows affected (0.02 sec)

[mysql@jian ~]$ mysql -ujian -p123456 -h192.168.135.148 -P4000
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user ‘jian’@‘192.168.135.149’ (using password: YES)
[mysql@jian ~]$ mysql -ujian -p111111 -h192.168.135.148 -P4000
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user ‘jian’@‘192.168.135.149’ (using password: YES)
[mysql@jian ~]$ mysql -ujian -p123123 -h192.168.135.148 -P4000
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 417
Server version: 5.7.25-TiDB-v6.0.0 TiDB Server (Apache License 2.0) Community Edition, MySQL 5.7 compatible

1赞

你可以链接上之后再 show grants; 看一下当前用户到底是什么权限

1赞

您好 这个结果看不出啥呢 我是建立了个test@‘192.168.12.%’ 然后test库授权查询删除权限给他;
再建立一个test@‘192.168.%’ 只授权查询
然后我在192.168.12网段机器登录 不能进行删除操作 权限只有test@‘192.168.%’ 的查询表权限,没有删除权限 但是show grants;看是有删除权限的 就很奇怪

1赞

image
大意了

1赞


打错的 还是没有的

1赞

您那边建个表试试? 能delete吗

1赞

testcase (4.7 KB)

可以复现
@billmay 帮忙瞅瞅

1赞

您好,你这现象跟我一样的看着 在mysql里 网段范围小的权限是会覆盖网段范围大的权限的 tidb感觉反过来了 相同用户范围比较大的网段权限反而把 同个用户小网段的权限给覆盖了

确实像你理解的一样
https://github.com/pingcap/tidb/blob/7fc6ebbda4ddf84c0ba801ca7ebb636b934168cf/privilege/privileges/cache.go

1赞

权限这块感觉限制有点死,我在192.168.% 授权了其他库 没授权sbtest库 给192.168.12.% 授权了sbtest库权限
image
用linyb@192.168.12.%进去看自己的权限只有sbtest库查询删除权限的 实际是完全没权限的 也没有用到192.168.% 的sbtest2库的权限, 192.168.12.%对sbtest库授权完全失效了
image

嗯,按照我的理解代码里是这个意思,大范围的权限覆盖了小范围的权限,具体情况可能需要官方大佬给答案了,请问什么需求要这么授权呢

我们想对’用户’@192.168.% 大段的用户只开通查询权限 然后只有’用户’@192.168.12.%用户可以增删改的时候 就会遇到这种情况 在mysql是可以这么做的 tidb这样授权的话 如果我对’用户’@192.168.% 开通了其他库的权限 里面没有test库权限 然后对’用户’@192.168.12.%进行test库的授权会完全失效 只认’用户’@192.168.% 里的权限

那可能暂时没有办法,或者高版本改过来了,但是还没有试用过,不过分不同的用户可能会好点,目前只能采用绕过的办法
可以采用工单系统或指定具体的ip几种方法,我感觉除了DBA,应该不需要有人有某一网段的增删改权限吧

之前用户权限是直接从mysql搬过来过来的 没想到有这个坑在 哈哈 程序用户是需要增删改查的 一般是按x.x.x.%开通 比较方便 避免服务高可用切换或者程序所在的服务器故障时迁移到新的服务器导致权限不通

嗯呢,一般后两段都一样了,好像很少有这种同一个账户需要根据不同ip给不同权限的需求,先暂时用不同账户绕过吧