select command denied to user ‘test0525‘@‘10.189.80.60‘ for table ‘adm_cnyloan_rate‘

程序在尝试获取表的主键信息时遇到权限问题,即使在regulation数据库上有执行任何语句的权限,但仍被拒绝SELECT命令。通过DEBUG发现问题在于执行SHOWKEYS命令时无权访问特定表。解决方案是使用具有足够权限的账户(如root)执行GRANT语句来授予所需权限。
摘要由CSDN通过智能技术生成

一、背景

程序通过以下方式获取表的主键信息

Connection.getMetaData().getPrimaryKeys(String catalog, String schema, String table)

二、结论

出现这个提示肯定是当前mysql子账号无权限

三、排查

执行以下命令查看当前数据库拥有哪些数据库权限

SHOW GRANTS FOR dataBaseName

当前程序连接的就是regulation数据库,也能执行任何语句,但是界面的功能还是提示select command denied to user,这真tm日了狗了

 

 经过debug发现 this.getDatabaseIterator(db)  方法获取了当前jdbc信息下所有数据库列表,在循环执行

SHOW KEYS FROM tableName FROM dataBase

在SQLyog执行结果和应用程序提示一样,确认无权限

1 queries executed, 0 success, 1 errors, 0 warnings

查询:SHOW KEYS FROM adm_cnyloan_rate FROM `crm`

错误代码: 1142
SELECT command denied to user 'test0525'@'10.80.88.17' for table 'adm_cnyloan_rate'

执行耗时   : 0 sec
传送时间   : 0 sec
总耗时      : 0.035 sec
 

四、解决方式 

一般高权限账户执行 

-- 查询权限

grant select on dataBase_name.* to user_name 

需要root解决 

-- 所有权限

grant all privileges on dataBase_name.* to user_name;

-- 刷新权限

flush privileges;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值