心配しないで。
このmysql.user
表は、すべてのデータベースに対する特定のグローバル特権を軽減します。
ユーザーが特定のデータベースに制限されている場合、mysql.dbテーブルにはデータベース固有の許可のみが表示されます。データベースに制限されているユーザーは、SUPER、PROCESS、SHUTDOWN、およびこれらのような特権を必要としません。
グローバル権限を持つユーザーを作成する場合(つまり、にユーザーを配置する場合mysql.user
)、ユーザーを特定のデータベースに降格させるためだけにグローバル権限を取り消すことはできません。REVOKEコマンドを使用してこれを実行しようとするとmysql.user
、すべての列に元のY値を持つユーザーとmysql.db
、データベース固有の特権にY値を持つ同じユーザーが表示されます。
ユーザーを完全に削除し、より低い権限でユーザーを新しく作成する必要があります。
コメントに基づく例を次に示します
mysql> show grants for advdb@'%';
+-----------------------------------------------------------------------------+
| Grants for advdb@% |
+-----------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'advdb'@'%' IDENTIFIED BY PASSWORD '................' |
| GRANT ALL PRIVILEGES ON `advertpro`.* TO 'advdb'@'%' |
+-----------------------------------------------------------------------------+
GRANT USAGEを使用すると、認証に関係するMD5パスワードを知ることができます(パスワードが空白でない場合)。advdbは任意のIPアドレスからログインでき、advertproデータベースにのみアクセスできることに注意してください。
他のプロセスに属するプロセスも含め、プロセスリスト内のすべてのプロセスをユーザーに表示させない限り、ユーザーはPROCESS特権を必要としません。
ユーザーに読み取り専用のmysqlインスタンスへの書き込み、レプリケーションの開始と停止、バイナリログのザップなどを行わせない限り、ユーザーはSUPER権限を必要としません。
OSコマンドラインユーザーであるmysqladminクライアントプログラムからmysqlをシャットダウンする必要がない限り、ユーザーはSHUTDOWN権限を必要としません。
探しているprivをコピーするには、
SHOW GRANTS FOR 'user'@'xxx.xxx.xxx.%';
- 出力をテキストファイルにコピーします
- ホストをxxx.xxx.xxx.xxに編集します
- セミコロンを追加します
- それを他のサーバーに貼り付けます
OK、それをハックしましょう:
UPDATE mysql.db
SET host='xxx.xxx.xxx.xxx'
WHERE user='myuser'
AND host='xxx.xxx.%'
AND db='somedb';
FLUSH PRIVILEGES;
これはそれが必要です!!!
MySQL GrantsをSQLにダンプするには、次のことができます。pt-show-grantspt-show-grants
を使用してmysqlGrantsを移植する方がはるかに優れています。
これがpt-show-grantsが行うことの私の個人的なエミュレーションです
mysql -hhostaddr -umyuserid -pmypassword --skip-column-names -A -e"SELECT CONCAT('SHOW GRANTS FOR ''',user,'''@''',host,''';') FROM mysql.user WHERE user<>''" | mysql -hhostaddr -umyuserid -pmypassword --skip-column-names -A | sed 's/$/;/g' > MySQLUserGrants.sql