2013-08-06 54 views
7

Tôi đã triển khai cơ sở dữ liệu của mình trên máy chủ Cơ sở dữ liệu MySQL. Tôi có một người dùng 'bedgeaj_root @ localhost' và nó có tất cả các quyền. Nhưng nó vẫn cho tôi lỗi:Lệnh SELECT bị từ chối cho người dùng 'người dùng' @ 'localhost' cho bảng 'bảng'

SELECT command denied to user 'bedgeaj_root'@'localhost' for table 'transactions'

Trong khi tìm kiếm trên mạng, tôi đã nghiên cứu rằng đó là một số vấn đề về quyền của người dùng. Nhưng tôi không hiểu tại sao nó lại đưa ra lỗi này vì tôi đã cấp tất cả sự cho phép cho người dùng này.

Dưới đây là ảnh chụp màn hình của màn hình cho phép người sử dụng cPanel của tôi:

bedgeaj_root@localhost permissions screen

Ở đây đi stack trace của tôi:

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 

Tôi đang sử dụng truy vấn này:

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} 

nhóm theo alias.patient_id]

Tôi đang làm gì sai?

+4

"vì tôi đã cấp tất cả sự cho phép cho người dùng này". - không xuất hiện như vậy. –

+0

Tôi đã gán cho người dùng bedgea_root @ localhost tất cả các quyền bao gồm quyền SELECT. Tất cả các truy vấn khác chạy tốt ngoại trừ một truy vấn cụ thể. –

+0

HIỂN THỊ GRANTS CHO CURRENT_USER; Bạn được những gì? – Mihai

Trả lời

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

Hãy thử cái này.

EDIT

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

Xem bình luận bởi pisces trong liên kết ở trên.

+0

Tôi đã thử nó, nhưng vấn đề vẫn giữ nguyên. –

+0

Tôi hiện đã cung cấp dấu vết ngăn xếp. –

+0

Bây giờ tôi đã kiểm tra lại các bảng mà tôi đang sử dụng trong truy vấn cho dù chúng tồn tại trong DB hay không. Chúng tồn tại trong cơ sở dữ liệu. –

1

Tôi gặp sự cố tương tự. Cơ sở dữ liệu cục bộ của tôi được tạo từ một bãi chứa từ một máy chủ khác và máy chủ cục bộ không có tất cả các quyền phù hợp cho người dùng trên máy chủ dev. Tôi đã nhận được lỗi này cố gắng để sao lưu cơ sở dữ liệu địa phương của tôi bằng cách sử dụng phần tiếp theo chuyên nghiệp. Sau đó, tôi đã cố gắng mysqldump và có một lỗi khác nhau: Got lỗi: 1449: Người dùng được chỉ định như một definer ('joey'@'127.0.0.1') không tồn tại khi sử dụng LOCK BẢNG. Vì vậy, tôi được cấp tất cả. để [email protected] và nó cố định nó.

1

Tôi gặp sự cố tương tự.
Trong trường hợp của tôi, lỗi xuất hiện vì MySQLphân biệt chữ hoa chữ thường trong Linux!

Xem this:

In MySQL, databases correspond to directories within the data directory. Each table within a database corresponds to at least one file within the database directory (and possibly more, depending on the storage engine). Triggers also correspond to files. Consequently, the case sensitivity of the underlying operating system plays a part in the case sensitivity of database, table, and trigger names. This means such names are not case sensitive in Windows, but are case sensitive in most varieties of Unix.

Nếu GRANT lệnh được chạy trước, thay đổi tablename để TABLENAME/Tablename có thể giải quyết vấn đề.

Các vấn đề liên quan