スクリプトを使用して Mysql データベースとテーブルを作成しています。これらのスクリプトには、次のような許可セクションが含まれています。
GRANT SELECT ON my_database.* TO my_user@"%" IDENTIFIED BY 'my_password';
REVOKE ALL PRIVILEGES ON my_database.* FROM my_user@"%";
GRANT SELECT, UPDATE ON my_database.* TO my_user@"%" IDENTIFIED BY 'my_password';
最初は 3 行目だけを使用していましたが、次の問題が発生しました。ユーザーから特権 Q を削除してそのスクリプトを再実行すると、ユーザーはデータベースでその特権をまだ持っていました。そのため、付与行の前に取り消し行を追加しました。
次に、次の問題に遭遇しました。「新しい」Mysql インストールでスクリプトを実行するたびに、ユーザーがまだ存在していないため、取り消しに失敗しました。そのため、取り消しの前に「ダミー」許可を追加しました。
質問: これを達成するためのより良い方法はありますか? 私の「実際の」スクリプトには多数のユーザーと多数のデータベースが含まれており、読みにくいです。割り当てたい権限のセットごとに 3 行が必要だからです。1行だけ使いたいです。
編集(回答とコメントからのフィードバックに基づく):
私は次のようなことを言う最短の方法を探しています
SET PRIVILEGES SELECT, UPDATE
ON my_database.*
TO my_user@"%"
IDENTIFIED BY 'my_password';
my_user の可能性がある場所
- すでに存在します(ただし、新しい可能性があります)
- 現在、私が彼に与えたい特権を拡張する特権を持っています
- 影響を受けないようにする必要がある他のデータベースに対する特権を持っている