web-dev-qa-db-ja.com

MySQLユーザーのホスト権限の変更

ユーザー/データベースに対して次の権限を持っています

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%に(そして再び)変更する方法はありますか?

48
Fu86

mysqlデータベースへのアクセス権がある場合は、付与テーブルを直接変更できます。

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

...そしてそれを元に戻すための類似のUPDATE- statement.

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

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

次に、フラッシュして特権を適用します。

FLUSH PRIVILEGES;
67
nickgrim

Stackoverflow のベストアンサーは、ユーザー権限をコピーするRENAME USERの使用を提案します。

データコントロール言語(GRANT、REVOKE、RENAMEなどのステートメント)を使用する場合、FLUSH PRIVILEGES;は不要であり、MyISAMテーブルがmysqlデータベースにあるMySQLバージョンのGaleraまたはGroup Replicationなどのアーキテクチャで必要です。テーブルは複製されません。

8

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

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

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

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

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

 flush privileges;

単なる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;
0
mikew