web-dev-qa-db-ja.com

テーブル 'table'のユーザー 'user' @ 'localhost'に対してSELECTコマンドが拒否されました

データベースをMySQLデータベースサーバーにデプロイしました。ユーザー 'bedgeaj_root @ localhost'があり、すべての権限があります。しかし、それでもエラーが発生します:

テーブル「トランザクション」のユーザー「bedgeaj_root」@「localhost」に対してSELECTコマンドが拒否されました

ネットで検索していると、ユーザー権限の問題だとわかりました。しかし、私はこのユーザーにすべての許可を与えたので、なぜこのエラーが発生するのか理解できません。

これが私のcPanelユーザー権限画面のスクリーンショットです:

bedgeaj_root@localhost permissions screen

これが私のスタックトレースです:

   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によるグループ化]

私が間違っていることは何ですか?

grant all privileges on bedgeaj_medmax.transactions to 'bedgeaj_root'@'%'  identified by 'password';

これを試してください。

編集

エラー:テーブル '<テーブル名>'のユーザー '<ユーザーID>' @ '<IPアドレス>'に対して選択コマンドが拒否されました

上記のリンクの魚座によるコメントを参照してください。

4
Mihai

私も同様の問題を抱えていました。
私の状況では、MySQL大文字と小文字を区別Linux

this を参照してください:

MySQLでは、データベースはデータディレクトリ内のディレクトリに対応します。データベース内の各テーブルは、データベースディレクトリ内の少なくとも1つのファイル(ストレージエンジンによってはそれ以上)に対応します。トリガーはファイルにも対応します。したがって、基盤となるオペレーティングシステムの大文字と小文字の区別は、データベース、テーブル、およびトリガー名の大文字と小文字の区別に影響します。つまり、このような名前はWindowsでは大文字と小文字を区別しませんですが、nixのほとんどの種類では大文字と小文字を区別しますです。

以前にGRANTコマンドを実行した場合は、tablenameTABLENAME/Tablenameに変更すると問題を解決できます。

1

同様の問題がありました。私のローカルデータベースは別のサーバーからのダンプから作成されましたが、ローカルサーバーには開発サーバー上にいるユーザーに対する適切な権限がすべてありませんでした。 sequelproを使用してローカルデータベースをバックアップしようとするとこのエラーが発生しました。次に、mysqldumpを試しましたが、別のエラーが発生しました。エラーが発生しました:1449:LOCK TABLESを使用しているときに、定義者として指定されたユーザー( 'joey' @ '127.0.0.1')が存在しません。だから私はすべてを許可しました。 [email protected]に送信すると、修正されました。

1
superaesomedad