【问题标题】:SELECT command denied to user 'user'@'localhost' for table 'table'SELECT 命令拒绝用户 'user'@'localhost' 用于表 'table'
【发布时间】:2013-08-07 07:26:53
【问题描述】:

我已经在 MySQL 数据库服务器上部署了我的数据库。我有一个用户'bedgeaj_root@localhost',它拥有所有权限。但它仍然给我错误:

SELECT 命令拒绝用户 'bedgeaj_root'@'localhost' 用于表 'transactions'

在网上搜索时,我了解到这是一些用户权限问题。但是我不明白为什么它会给出这个错误,因为我已经给了这个用户所有的权限。

这是我的 cPanel 用户权限屏幕的屏幕截图:

这是我的堆栈跟踪:

   Caused by: net.sf.jasperreports.engine.JRException: Error executing SQL statement for : itemizedStatementReport_patientBalance
at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createDatasource(JRJdbcQueryExecuter.java:246)
at net.sf.jasperreports.engine.fill.JRFillDataset.createQueryDatasource(JRFillDataset.java:1073)
at net.sf.jasperreports.engine.fill.JRFillDataset.initDatasource(JRFillDataset.java:667)
at net.sf.jasperreports.engine.fill.JRBaseFiller.setParameters(JRBaseFiller.java:1235)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:859)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:804)
at net.sf.jasperreports.engine.fill.JRFillSubreport.fillSubreport(JRFillSubreport.java:652)
at net.sf.jasperreports.engine.fill.JRSubreportRunnable.run(JRSubreportRunnable.java:59)
at net.sf.jasperreports.engine.fill.JRThreadSubreportRunner.run(JRThreadSubreportRunner.java:205)
... 1 more


   Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: SELECT command denied to user 'bedgeaj_root'@'localhost' for table 'transactions'
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:407)
at com.mysql.jdbc.Util.getInstance(Util.java:382)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1052)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3603)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3535)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1989)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2150)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2626)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2119)
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2281)
at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createDatasource(JRJdbcQueryExecuter.java:239)
... 9 more

我正在使用这个查询:

    SELECT alias.patient_id , SUM(alias.balance) AS balance
    from (
    SELECT v.patient_id,trx.trx_id,trx.trx_status,trx.trx_seq,pb.billing_id,v.visit_id,v.visit_dt,forma t(SUM(tl.net_amount) - ifnull((SELECT SUM(pl.applied_amount+pl.discount_amount) FROM payment_lines pl where pl.trx_line_id = tl.trx_line_id),0.0),2)AS balance
    FROM ((transactions trx JOIN trx_lines tl ON (trx.trx_id = tl.trx_id))JOIN patient_billing pb ON(pb.billing_id = trx.billing_id))JOIN visits v ON (pb.visit_id = v.visit_id)
    where trx.trx_seq='4' AND trx.trx_status='PENDING' AND (date_format(v.visit_dt,'%Y/%m/%d')<date_format(DATE_SUB(NOW(), INTERVAL 1 day),'%Y/%m/%d'))
    group by tl.trx_id) alias
    where alias.patient_id = $P{patient_id}

按 alias.patient_id 分组]

我做错了什么?

【问题讨论】:

  • “因为我已将所有权限授予此用户。” - 不是那样的。
  • 我已为用户 bedgea_root@localhost 分配了所有权限,包括 SELECT 权限。除一个特定查询外,所有其他查询都运行良好。
  • 显示当前用户的授权;你得到了什么?
  • 您确定事务表在数据库中吗?
  • 向我们展示您的查询,有时查询错误可能会被误认为是权限问题。

标签: mysql mysql-workbench


【解决方案1】:

我遇到了类似的问题。
在我的情况下,出现错误是因为 MySQLLinux区分大小写

this:

在 MySQL 中,数据库对应于数据目录中的目录。数据库中的每个表对应于数据库目录中的至少一个文件(可能更多,取决于存储引擎)。触发器也对应于文件。因此,底层操作系统的区分大小写在数据库、表和触发器名称的区分大小写中起作用。这意味着此类名称在 Windows 中不区分大小写,但在大多数 Unix区分大小写

如果之前运行过GRANT命令,将tablename改为TABLENAME/Tablename即可解决问题。

【讨论】:

    【解决方案2】:

    我遇到了类似的问题。我的本地数据库是从另一台服务器的转储中创建的,并且本地服务器对开发服务器上的用户没有所有正确的权限。我在尝试使用 sequel pro 备份本地数据库时遇到此错误。然后我尝试了 mysqldump 并得到了一个不同的错误: Got error: 1449: The user specified as a definer ('joey'@'127.0.0.1') does not exist when using LOCK TABLES 。所以我同意了。到 joey@127.0.0.1 并修复它。

    【讨论】:

      【解决方案3】:
      grant all privileges on bedgeaj_medmax.transactions to 'bedgeaj_root'@'%'  identified by 'password';
      

      试试这个。

      编辑

      Error: select command denied to user '<userid>'@'<ip-address>' for table '<table-name>'

      查看以上链接中双鱼座的评论。

      【讨论】:

      • 我现在也提供了堆栈跟踪。
      • 我现在仔细检查了我在查询中使用的表,它们是否存在于数据库中。它们确实存在于数据库中。
      猜你喜欢
      • 2016-12-03
      • 2017-12-25
      • 2013-06-26
      • 2013-08-27
      • 2019-11-07
      • 2022-10-16
      • 2018-10-28
      • 1970-01-01
      • 2021-07-11
      相关资源
      最近更新 更多