2011-11-02 43 views
17

Tôi đã sử dụng this trang web lưu trữ miễn phí để phát triển và thử nghiệm.lệnh cập nhật bị từ chối cho người dùng

Tôi không thể sử dụng lệnh UPDATE MySQL để thay đổi giá trị cơ sở dữ liệu, mặc dù người dùng được cho phép được phép sử dụng tất cả lệnh từ cPanel.

Sau đó, tôi đã thử nghiệm tương tự với người dùng mặc định, nó vẫn không hoạt động. Tuy nhiên, nó hoạt động tốt trên hệ thống của tôi.

Lỗi MySQL là

UPDATE command denied to user 'test'@'localhost' for table 'content'

lệnh khác đang làm việc tốt.

Tại sao điều này lại xảy ra? Và làm thế nào nó có thể được ngăn chặn? Hoặc bất kỳ giải pháp cho điều này?

Và tôi rất chắc chắn rằng người dùng có quyền sử dụng lệnh UPDATE vì tôi có thể sử dụng phpMyAdmin với cùng một người dùng và sửa đổi các trường MySQL.

Tôi không hiểu tại sao một số lệnh MySQL từ PHP bị từ chối cho người dùng đã được cấp tất cả các đặc quyền và có thể thực hiện mọi thứ qua phpMyAdmin. Với kịch bản đó, phpMyAdmin và máy chủ lưu trữ SQL nằm trên cùng một máy chủ.

+0

tại sao câu hỏi này được bỏ phiếu? – pahnin

+0

Tôi không thấy câu hỏi ... – Widor

+3

. câu hỏi là giải pháp hoặc sửa chữa cho điều này là gì. cập nhật – pahnin

Trả lời

24

Đối với tất cả những người đã cố gắng trả lời câu hỏi này, đây là lời cảm ơn chân thành của tôi. Tôi đã tìm thấy vấn đề và giải pháp.

truy vấn sql của tôi là như thế này

UPDATE `dblayer`.`test` SET `title` = 'hello a' WHERE `test`.`id` =1; 

mà tôi nhận được từ phpmyadmin và nó hoạt động hoàn hảo trên hệ thống của tôi. Nhưng khi tôi làm việc trên các máy chủ nó không hoạt động và nó nói lệnh từ chối có thể là do

`dblayer`.`test` 

Tôi cố gắng để chọn bàn trên toàn cầu (hoặc một cái gì đó như thế, tôi không chắc chắn) nhưng nếu truy vấn sql của tôi là

UPDATE `test` SET `title` = 'hello a' WHERE `test`.`id` =1; 

nó cũng hoạt động trên máy chủ của tôi.

+0

đánh dấu câu trả lời myown đúng cho câu hỏi của tôi! LOL – pahnin

4

Người dùng của bạn không có quyền phù hợp. Bạn cần cấp quyền truy cập cho lệnh UPDATE, như vậy:

GRANT UPDATE ON database.* TO [email protected]'localhost' IDENTIFIED BY 'password'; 

Nếu bạn đang sử dụng công cụ đồ họa để quản lý cơ sở dữ liệu - ví dụ: PHPMyAdmin hoặc SQLYog, v.v. - bạn sẽ có thể sử dụng những công cụ này để cho phép các quyền này.

+0

người dùng không có quyền. vì tôi có thể sửa đổi nội dung thông qua phpmyadmin. – pahnin

+0

Nhưng thay vì GRANT SELECT nó phải là CẬP NHẬT CẤP, hoặc nếu bạn muốn cấp cho người dùng quyền đầy đủ: GRANT ALL – Oldskool

+0

và khi bạn đăng nhập qua phpmyadmin, bạn có sử dụng cùng tên người dùng/mật khẩu như người dùng 'test' không? Rất có thể đây không phải là trường hợp. – Icarus

2

lỗi sql của tôi là lệnh UPDATE từ chối để người dùng 'test' @ 'localhost' cho bảng 'nội dung'

lý do tại sao điều này xảy ra? Và làm thế nào để ngăn chặn nó? Hoặc bất kỳ giải pháp nào cho điều này?

Điều này xảy ra với những gì nó nói đang xảy ra: người dùng test không có quyền cập nhật trên bảng content. Nội dung như thế này sẽ cấp cho người dùng quyền được yêu cầu:

GRANT UPDATE ON database.content TO [email protected]'localhost' IDENTIFIED BY 'password'; 

* mật khẩu ở trên chỉ là một trình giữ chỗ. Bạn nên sử dụng thực tế.

+0

Tôi đã cập nhật câu hỏi plzz chk – pahnin

+1

@pahnin bạn không chỉ định liệu ứng dụng của bạn có kết nối cục bộ với máy chủ hay từ xa hay không. Lưu ý rằng người dùng có thể có quyền cập nhật chỉ từ localhost. Nếu bạn đang kết nối từ xa, nó cần phải được cấp cụ thể theo cách 'CẬP NHẬT CẤP ... để [email protected] ...' – Icarus

+0

tập lệnh chạy cục bộ. – pahnin

0

Cung cấp toàn quyền truy cập để kiểm tra người dùng bằng ip dưới dạng localhost.Kiểm tra bảng người dùng từ db mysql.

Đăng nhập với tư cách là người chủ và nhập vào cơ sở dữ liệu mysql và sau đó tới bảng người dùng.Bạn sẽ tìm thấy các đặc quyền hiện tại của người dùng thử nghiệm của mình.

4

Như mọi người khác đã nói, đó là vấn đề về quyền. Tôi chắc chắn bạn có thể kiểm tra, nhưng chỉ trong trường hợp.Sau khi bạn đăng nhập vào phpmyadmin, chạy như sau:

SELECT USER(); 

Đó nên nhổ ra 'test' @ 'localhost' như được chỉ ra trong tất cả các ý kiến ​​trên

Sau đó chạy

SHOW GRANTS FOR 'test'@'localhost' 

Đó nên cung cấp cho bạn tất cả các bí mật cho người dùng đó. Khi bạn nhận được kết quả, chọn 'Tùy chọn', Toàn văn và nhấp vào để xem toàn văn.

Hãy chắc chắn rằng điều khoản trong đầu ra có một cái gì đó như thế:

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE ON `your_database`.* TO 'test'@'localhost' 

Bạn có thể không có khả năng để có được CẤP TẤT CẢ trên một số thiết lập lưu trữ nhưng miễn là bạn có INSERT, UPDATE, DELETE bạn chắc chắn nên có thể cập nhật dữ liệu

+0

Tôi đã có GRANT ALL – pahnin

+0

Bạn có thể dán toàn bộ kết quả GRANT ALL của mình không. Là nó GRANT ALL trên 'your_database'. * TO 'test' @ 'localhost'? hoặc GRANT ALL trên một số bảng. Một bước khác (có thể hiển nhiên) sẽ là liên hệ với nhà cung cấp dịch vụ lưu trữ của bạn. Nếu bạn có tất cả các quyền được thiết lập và không thể cập nhật bảng, họ sẽ có thể giúp bạn –

2

Đôi khi đó là vấn đề nhạy cảm với chữ hoa chữ thường.

MySQL cũng cho biết quyền truy cập bị từ chối ngay cả khi bảng không khả dụng. Hãy chắc chắn rằng bạn không có vấn đề nhạy cảm.

+0

Tôi đã gặp sự cố này với tệp sql (tệp nâng cấp cấu trúc ứng dụng db). Tôi đã cấp cho người dùng tài khoản ứng dụng quyền truy cập đầy đủ vào cơ sở dữ liệu của ứng dụng nhưng vẫn bị cho phép từ chối. Sau khi kéo ra một nửa mái tóc của tôi, cuối cùng tôi cũng nhận ra rằng một số núm đã mã hóa cứng tên bảng thành một lệnh ở giữa tập tin khổng lồ này. Tên bảng là tên của ứng dụng, không phải tên của bảng, vì vậy nó không dính vào tôi. :/ – dannysauer

3

Tôi đã có cùng một vấn đề, sự cho phép là đúng nhưng nó đã được làm việc trong một số môi trường và không phải ở những người khác. Tôi đang sử dụng tên bảng như

scheme.TABLE_NAME.

Nếu không có thay đổi sự cho phép nhưng chỉ sử dụng

tên_bảng

làm việc trong mọi môi trường.

-1

Với mysql bạn chỉ có thể làm SELECT * mysql.user

Nhìn vào đặc quyền và sau đó cập nhật những cái bạn muốn. Tôi thích rằng cá nhân hơn sau đó sử dụng các lệnh trên bởi vì tôi có thể thấy tất cả các tùy chọn của tôi có sẵn trong bảng đó.

UPDATE mysql.user 
SET Insert_priv = 'Y', 
Update_priv = 'Y' 
WHERE user.Host = 'localhost' AND user.User = 'test'; 

Sau khi cập nhật các ưu đãi tôi nhận thấy tôi sẽ phải khởi động lại máy chủ mysql cho khách hàng để xem họ:

/etc/init.d/mysql restart 

Sau đó, nó sẽ làm việc tốt

1

Một lỗi UPDATE command denied thể trên một số máy chủ web là kết quả của việc đạt đến giới hạn không gian cơ sở dữ liệu MySQL.

+0

Tôi đã có chính xác vấn đề này. Trên ClearDb cho Azure – AxelWass

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