ユーザー/データベースに対して次の権限を持っています
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
を%
に(そして再び)変更する方法はありますか?
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;
Stackoverflow のベストアンサーは、ユーザー権限をコピーするRENAME USER
の使用を提案します。
データコントロール言語(GRANT、REVOKE、RENAMEなどのステートメント)を使用する場合、FLUSH PRIVILEGES;
は不要であり、MyISAMテーブルがmysql
データベースにあるMySQLバージョンのGaleraまたはGroup Replicationなどのアーキテクチャで必要です。テーブルは複製されません。
私もこれに遭遇しましたが、データベース固有の権限も移動されなかったため、提案されたソリューションは機能しませんでした。私がしたこと:
UPDATE mysql.user SET Host='%' WHERE Host='localhost' AND User='username';
UPDATE mysql.db SET Host='%' WHERE Host='localhost' AND User='username';
FLUSH PRIVILEGES;
権限を変更するには、まずユーザーのすべての権限を取り消します
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;