MySQLユーザーのホスト許可の変更


44

ユーザー/データベースに対して次の許可があります

mysql> SHOW GRANTS FOR 'username'@'localhost';
+---------------------------------------------------------------------------+
| Grants for username@localhost                                             |
+---------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'username'@'localhost' IDENTIFIED BY PASSWORD 'xxx' |
| GRANT ALL PRIVILEGES ON `userdb`.* TO 'username'@'localhost'              |
+---------------------------------------------------------------------------+

データベースへの外部アクセスを有効にするには、localhostをに変更する必要があります%。これを行う1つの方法は、REVOKEすべてのアクセス許可を設定して再設定することです。問題は、わからないパスワードが設定されているため、許可を取り消すと元に戻せないことです。

ホスト名に変更する方法があるlocalhost%権限自体を取り消さずに(再びとは)?

回答:


59

mysqlデータベースにアクセスできる場合、許可テーブルを直接変更できます。

UPDATE mysql.user SET Host='%' WHERE Host='localhost' AND User='username';
FLUSH PRIVILEGES;

...そして、UPDATEそれを元に戻す類似のステートメント。

また、mysql.dbテーブルにも変更を加える必要がある場合があります。

UPDATE mysql.db SET Host='%' WHERE Host='localhost' AND User='username';

少し修正(mysqlサーバーバージョン:5.7.5-m15-MySQL Community Server):phpmyadminとmysqlコマンドプロンプトの両方から-UPDATE mysqluserSET Host= 'localhost' WHERE userHost= '%' AND userUser= 'XXXdbusr';
ジェイディ

1
実稼働データベースの場合、%に注意してください。セキュリティリスクになる可能性があります。複数のウェブサーバーがある場合は、「192.168.0。%」や「%.example.com」などのワイルドカードホストを使用することもできます。別のオプションは、ホストごとに同じユーザーを複数回追加するか、Webサーバーごとに個別の名前のユーザーを作成することです。
okdewit

私のように、ローカルテストマシン(私の場合はRasPi)でルートアクセスを許可しようとした場合、これはMySQL 5.7以降では機能しません。参照してくださいこのスレッド
ラウル・ピント

@RaulPinto:そのスレッドはphpMyAdminに関するもののようです。これはここでは完全に関連しているわけではありませんが、それを使用するだけの人には注意してください。
ニックグリム

よく文書化された声明を使用する方が良いRENAME USER
Antonio Bardazzi

6

Stackoverflowのベストアンサーは、RENAME USERどちらのユーザー権限をコピーするかを使用することを提案しています。

データ制御言語(GRANT、REVOKE、RENAMEなどのステートメント)の使用はFLUSH PRIVILEGES;、MyISAMテーブルがレプリケートされないGaleraやGroup Replicationなどのアーキテクチャでは不要であり、必要です。


2

私もこれに出くわしましたが、データベース固有の特権も移動されないため、提案されたソリューションは機能しませんでした。私がしたこと:

UPDATE mysql.user SET Host='%' WHERE Host='localhost' AND User='username';
UPDATE mysql.db SET Host='%' WHERE Host='localhost' AND User='username';
FLUSH PRIVILEGES;

そして、「それ」は機能しましたか?
Pierre.Vriens

1

特権を変更するには、まずユーザーへのすべての許可を取り消します

 revoke all privileges on *.* from 'username'@'localhost';

 grant SELECT,INSERT,UPDATE,DELETE ON `db`.* TO 'username'@'%';

 flush privileges;

それがまさに私の問題です。パスワードが原因で許可を取り消すことはできません。私の質問を読んでください。
Fu86

更新により、パスワードハッシュを古いものと同じに設定できます。そのために実際のパスワードを知る必要はありません。
drogart

0

単にdb以外の特権(テーブルや列など)がある場合、多くのテーブルが欠落しています。ユーザーに付与されている権限に応じて、これらすべてのテーブルまたはいくつかを更新する必要があります。

UPDATE mysql.user SET Host='%' WHERE Host='localhost' AND User='username';
UPDATE mysql.db SET Host='%' WHERE Host='localhost' AND User='username';
UPDATE mysql.tables_priv SET Host='%' WHERE Host='localhost' AND User='username';
UPDATE mysql.columns_priv SET Host='%' WHERE Host='localhost' AND User='username';
UPDATE mysql.procs_priv SET Host='%' WHERE Host='localhost' AND User='username';
UPDATE mysql.proxies_priv SET Host='%' WHERE Host='localhost' AND User='username';
FLUSH PRIVILEGES;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.