【 TiDB 使用环境】生产环境
【 TiDB 版本】V5.10
【遇到的问题:问题现象及影响】
执行SQL,ALTER USER ‘username’@‘host’ ACCOUNT LOCK;对账号进行锁定时发现账号不能够锁定成功,账号的account_locked栏位的值依然为’N’,远程依然可以登录,这个是什么情况?
FLUSH PRIVILEGES;
执行了?
试一下
UPDATE mysql.user SET account_locked = ‘Y’ WHERE user = ‘username’ AND host = ‘host’;
FLUSH PRIVILEGES;也不行吗?
没有这么试了,我使用ALTER USER ‘username’@‘host’ ACCOUNT LOCK;然后flush privileges;数据库也是没有报错,执行时成功的,就想知道为什么?
使用命令ALTER USER ‘username’@‘host’ PASSWORD EXPIRE;也无法生效,但数据库没有任何错误提示,执行时成功的!
5.1 应该是不支持 alter user 修改用户属性,只是语法兼容,其实并没有生效。
修改用户属性是高版本才逐步完善的,你可以测试下 8.5 等最新版本看看。
那对于这种低版本需要怎么弄,直接更新user表吗?我等下测试一下先!
本身低版本代码内核就没这个功能。如果对修改用户属性有强需求,还是升级版本吧。
https://docs.pingcap.com/zh/tidb/v5.4/sql-statement-alter-user#mysql-兼容性
直接更新user表的account_locked状态为Y后,依然不生效,账号依然可远程登录,看样子只能直接删除了!
采用drop user命令可正常删除账号,问题处理完成!老版本不好弄!
用锁定账号命令:UPDATE mysql.user SET account_locked = ‘Y’ WHERE user = ‘username’ AND host = ‘host’;
然后刷新下权限的命令FLUSH PRIVILEGES;
6.5才有这个功能
这么操作没啥效果,只能直接删除账号
退出重新登录下,有时连接还是以前的进程,重新推出或重启下。
1,刷新一下权限。断开重新拦截试试
2.保留建用户语句,直接删了
3. 直接修改用户可访问地址,改成只能localhost 本地登录。或者制定一个不存在的地址
重新试下,不一定要删除账号,锁定就好了
在线刷新都是实时生效的。
试试这个语句
UPDATE mysql.user SET account_locked = ‘Y’ WHERE user = ‘username’ AND host = ‘host’;
测试最新的版本看看吧。
tidb 在v6.3.0之后支持了账号锁定的功能