web-dev-qa-db-ja.com

ユーザーの更新コマンドが拒否されました

this 開発およびテスト用の無料ホスティングサイトを使用しています。

ユーザーがcPanelのすべてのコマンドの使用を許可されている場合でも、UPDATE MySQLコマンドを使用してデータベース値を変更できませんでした。

その後、デフォルトのユーザーで同じことをテストしましたが、まだ動作しません。ただし、私のシステムでは正常に動作します。

MySQLエラーは

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

他のコマンドは正常に機能しています。

なんでこんなことが起こっているの?そして、どうすればそれを防ぐことができますか?またはこれに対する解決策はありますか?

また、同じユーザーでphpMyAdminを使用し、MySQLフィールドを変更できるため、ユーザーはUPDATEコマンドを使用する権限を持っていると確信しています。

PHPからの一部のMySQLコマンドが、すべての特権を与えられ、phpMyAdminを介してすべてを実行できるユーザーに対して拒否される理由を理解していません。そのスクリプト、phpMyAdminおよびSQLホストは同じサーバ。

22
pahnin

ここでこの質問に答えようとしたすべての人に、心から感謝します。問題と解決策を見つけました。

私の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;

私のサーバーでも動作します。

32
pahnin

他のみんなが言ったように、それは許可の問題です。おそらくチェックしましたが、念のため。 phpmyadminにログインした後、次を実行します。

SELECT USER(); 

上記のすべてのコメントに示されているように、 'test' @ '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を取得している限り、間違いなくデータを更新できるはずです。

6

ユーザーに適切な権限がありません。次のように、UPDATEコマンドへのアクセスを許可する必要があります。

GRANT UPDATE ON database.* TO test@'localhost' IDENTIFIED BY 'password';

グラフィカルツールを使用してデータベースを管理している場合-例: PHPMyAdminまたはSQLYogなど-これらのツールを使用して、これらのアクセス許可も有効にする必要があります。

5
user542603

私は同じ問題を抱えていました。許可は正しかったのですが、環境によっては機能しており、他の環境では機能していませんでした。私は次のようなテーブル名を使用していました

scheme.TABLE_NAME

許可を変更せずに、ただ使用する

テーブル名

すべての環境で機能しました。

4
deleted

場合によっては、大文字と小文字が区別される問題です。

MySQLはまた、テーブルが利用できない場合でもアクセスが拒否されると言います。大文字と小文字を区別する問題がないことを確認してください。

2
SG 86

my sqlエラーは、テーブル 'content'のユーザー 'test' @ 'localhost'に対して拒否されたUPDATEコマンドです

なんでこんなことが起こっているの?そして、それを防ぐ方法は?またはこれに対する解決策はありますか?

それはそれが起こっていると言っていることのために起こっています:ユーザーtestはテーブルcontentに対する更新パーミッションを持っていません。このようなものは、ユーザーに必要な許可を与える必要があります。

GRANT UPDATE ON database.content TO test@'localhost' IDENTIFIED BY 'password';

*上記のパスワードは単なるプレースホルダーです。実際のものを使用する必要があります。

2
Icarus

UPDATE command deniedエラーは、一部のWebホストで、MySQLデータベースのスペース制限に達した結果である可能性があります。

1

Ipをlocalhostとしてテストユーザーにフルアクセスを提供します。mysqldbからユーザーテーブルを確認します。

Rootとしてログインし、mysqlデータベースに入力してから、ユーザーテーブルにアクセスします。テストユーザーの現在の権限を見つけます。

0