2011-11-02 115 views
17

我一直在使用this免費託管網站進行開發和測試。更新命令被拒絕用戶

即使允許用戶使用cPanel的所有命令,我也無法使用MySQL命令來更改數據庫值。

然後,我測試了一個默認的用戶,它仍然不起作用。但是,它在我的系統上正常工作。

MySQL的錯誤是

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

其他命令工作正常。

這是怎麼發生的?如何防止?或者任何解決方案?

我很肯定用戶有權使用UPDATE命令,因爲我可以使用phpMyAdmin和相同的用戶並修改MySQL字段。

我不明白爲什麼來自PHP的一些MySQL命令被拒絕給予所有特權的用戶,並且可以通過phpMyAdmin執行所有操作。鑑於該腳本,phpMyAdmin和SQL主機位於同一臺服務器上。

+0

爲什麼這個問題被否決? – pahnin

+0

我沒有看到一個問題...... – Widor

+3

好。問題是解決方案或解決方案是什麼。更新 – pahnin

回答

24

對於每個嘗試過回答這個問題的人都是我衷心的感謝。我找到了問題和解決方案。

我的sql查詢是這樣

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

這是我從phpMyAdmin的得到和它完美的作品在我的系統上。 但是,當我在服務器上工作,它不工作,它說否認命令可能是因爲

`dblayer`.`test` 

我想選擇全球表(或類似的東西,我不知道) 但如果我的sql查詢是

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

它也適用於我的服務器。

+0

標記myown回答正確的我的問題!大聲笑 – pahnin

4

您的用戶沒有正確的權限。你需要給它進入UPDATE命令,就像這樣:

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

如果您使用的是圖形化的工具來管理數據庫 - 例如PHPMyAdmin或SQLYog等 - 您應該可以使用這些工具來啓用這些權限。

+0

用戶確實有權限。因爲我可以通過phpmyadmin修改內容。 – pahnin

+0

但是,而不是GRANT SELECT應該是GRANT UPDATE,或者如果你想給用戶完全的權限:GRANT ALL – Oldskool

+0

,當你通過phpmyadmin登錄時,你是否使用了與用戶'test'相同的用戶名/密碼?很可能情況並非如此。 – Icarus

2

在我的SQL錯誤的UPDATE命令,拒絕用戶「測試」 @「localhost」的 表「內容」

爲什麼會出現這種情況?以及如何預防它?或者任何解決方案爲 這?

它發生了什麼說它發生了:用戶test沒有表content上的更新權限。像這樣的東西應該授予用戶所需的權限:

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

*以上密碼只是一個佔位符。你應該使用真實的。

+0

我已更新問題plzz chk – pahnin

+1

@pahnin您沒有指定您的應用程序是本地連接到服務器還是遠程連接。請注意,用戶可能有權限僅從本地主機進行更新。如果您正在遠程連接,則需要以'GRANT UPDATE ...'的方式授予[email protected] ...' – Icarus

+0

腳本在本地運行。 – pahnin

0

提供完整的訪問測試用戶與IP爲localhost.Check從MySQL數據庫的用戶表。

以root身份登錄並進入mysql數據庫,然後進入用戶表。您將會找到您的測試用戶的當前權限。

4

正如其他人所說,這是許可問題。我相信你可能檢查過,但以防萬一。您登錄到phpMyAdmin的後,運行以下命令:

SELECT USER(); 

這應該吐出「測試」 @「localhost」的作爲在所有的評論指出上述

然後運行

SHOW GRANTS FOR 'test'@'localhost' 

應爲您提供該用戶的所有權限。當你得到結果時,選擇'選項',全文並點擊去獲取全文。

就在輸出時一定權限有類似的東西:

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' 

你可能無法得到GRANT ALL上一些託管設置,但只要你有INSERT,UPDATE,DELETE你絕對應該能夠更新數據

+0

我已經得到所有 – pahnin

+0

你能否粘貼你的整個GRANT ALL結果。它是否在'your_database'上授予所有權。*'測試'@'localhost'?或僅在某些表格上放行全部。另一個(可能很明顯的)步驟是聯繫您的託管供應商。如果你有所有的權限設置,並且不能更新表格,他們應該能夠幫助你 –

2

有時它是一個大小寫敏感的問題。

即使表不可用,MySQL也表示訪問被拒絕。請確保您沒有區分大小寫的問題。

+0

我有一個sql文件(一個應用程序數據庫結構升級文件)的這個問題。我已授予應用程序帳戶用戶對應用程序數據庫的完全訪問權限,但不斷獲得權限。在拔出一半頭髮後,我終於注意到,在這個龐大的文件中間,有一些旋鈕將表格名稱硬編碼爲一個命令。表格名稱是應用程序的名稱,而不是表格的名稱,所以它不會貼在我的面前。 :/ – dannysauer

3

我有同樣的問題,權限是正確的,但它在某些環境中工作,而不是在其他環境中工作。我使用的表名如

scheme.TABLE_NAME

不改變權限,但只使用

table_name的

在所有環境中工作。

-1

與MySQL你可以做 SELECT * mysql.user

看的特權,然後更新您想要的人。我更喜歡使用上述命令,因爲我可以在該表中看到所有可用的選項。

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

更新的特權後,我發現我將不得不重新啓動MySQL服務器的客戶端看到他們:

/etc/init.d/mysql restart 

然後,它做工精細

1

一個UPDATE command denied錯誤可以在某些網絡主機是達到MySQL數據庫空間限制的結果。

+0

我有這個問題。在ClearDb for Azure上 – AxelWass