Mysql ";执行拒绝给用户的命令";远程运行存储过程时

Mysql ";执行拒绝给用户的命令";远程运行存储过程时,mysql,mysqljs,Mysql,Mysqljs,我有一个nodejs服务,它试图在mysql数据库上运行一个存储过程,但调用失败,用户被拒绝执行executecommand 相同的服务可以成功地执行simpleSELECTs并返回数据,而不会出现任何问题 如果我使用mysql命令行实用程序连接到mysql数据库,并以nodejs服务配置为使用的用户身份登录,则存储过程工作正常 为什么远程运行存储过程会失败,但在本地运行它会起作用 编辑 按照下面的建议,这是从命令行访问mysql时运行show grants的结果: 这是我通过我的节点应用程序

我有一个nodejs服务,它试图在mysql数据库上运行一个存储过程,但调用失败,用户被拒绝执行
executecommand

相同的服务可以成功地执行simple
SELECT
s并返回数据,而不会出现任何问题

如果我使用mysql命令行实用程序连接到mysql数据库,并以nodejs服务配置为使用的用户身份登录,则存储过程工作正常

为什么远程运行存储过程会失败,但在本地运行它会起作用

编辑

按照下面的建议,这是从命令行访问mysql时运行
show grants
的结果:

这是我通过我的节点应用程序运行它时的结果:

{"Grants for myuser@%":"GRANT USAGE ON *.* TO `myuser`@`%` IDENTIFIED BY PASSWORD '*blahblahblahblahblahblah'"}

我不明白为什么授予选择权,自从我认为使用
%
通配符意味着它不应该关心它认为
myuser
来自哪个域以来,INSERTetc就消失了。

请记住,
'user'@'localhost'
'user'@'
或任何其他远程用户是不同的用户规范。他们实际上是两个不同的用户,可以拥有不同的权限集

我建议您作为本地用户连接并运行
SHOW GRANTS。然后远程连接并执行同样的操作

您需要
EXECUTE
权限来执行过程。我认为,当您以用户身份远程连接时,该权限将丢失


请回答您的最新问题:

显示的权限仅包括
用法
,这意味着用户可以登录(即验证),但没有任何权限。但是用户标识
'myuser'@'
与存在多个权限的另一种情况相同,包括
执行

我将尝试验证您是否确实连接到同一个MySQL实例

执行以下查询并检查它们是否在应用程序会话和交互会话中给出相同的结果:

SELECT @@hostname, @@port, @@socket;
SELECT @@server_uuid, @@server_id;
SELECT USER();
SELECT VERSION();
SHOW GLOBAL STATUS LIKE 'Uptime';
如果没有,那么您的节点应用程序正在连接到另一个MySQL服务器实例。正常运行时间会有所不同,因为它每秒钟都会发生变化,但它应该与从每个客户端执行查询之间的时间一致