1. ホーム
  2. mysql

[解決済み] ユーザーに初めて権限を与えると、なぜ "GRANT USAGE "が作成されるのですか?

2022-05-16 21:42:38

質問

私はDBMSの管理者側の初心者で、今夜新しいデータベース(MySQLを使用)をセットアップしていたときに、このことに気づきました。ユーザーに初めて権限を付与した後、次のような別のグラントが作成されます。

GRANT USAGE on *.* TO user IDENTIFIED BY PASSWORD password

ドキュメントによると USAGE と書いてあるので、グラントが階層的に働き、おそらくユーザはすべてのデータベースに対して何らかの特権を持たなければならないので、これがキャッチオールとして機能するのではと推測しているのですが、いかがでしょうか?

また、なぜこの行に IDENTIFIED BY 節がないことも理解できません (ほとんどの場合、私が作成したグラントには IDENTIFIED BY 節が何の役に立つのか理解できないからです)。

編集してください。 元々記載していなくて申し訳ないのですが、助成金は

GRANT ALL PRIVILEGES ON database.* TO admin_user
GRANT SELECT, INSERT, UPDATE, DELETE ON database.* TO user

どのように解決するのですか?

おっしゃるとおり、MySQLでは USAGE は、"no privileges" と同義です。から MySQL リファレンスマニュアル :

<ブロッククオート

USAGE権限指定子は"no privileges.の略で、グローバルレベルでGRANTと共に使用され、既存のアカウント権限に影響を与えずにリソース制限やSSL特性などのアカウント属性を変更するために使用されます。

USAGE は、そのアカウントに実際の特権を与えることなく、アカウントが存在することをMySQLに伝える方法です。彼らは単に、以下の権限を持つだけです。 を使用する を使用する権限を持っているに過ぎず、したがって USAGE . の行に相当します。 `mysql`.`user` テーブルの行に相当し、特権は設定されていません。

IDENTIFIED BY 節は、そのユーザにパスワードが設定されていることを示します。ユーザが本人であることをどうやって確認するのでしょうか?それは を識別します。 を送信することで、本人であることを確認します。

ユーザーのパスワードは、特定のデータベースやテーブルに結びつかない、グローバルレベルのアカウント属性の1つです。また、この属性は `mysql`.`user` テーブルの中にあります。もしユーザーが他の権限を持っていない場合は ON *.* であれば、それらは USAGE ON *.* が付与され、そこにパスワードハッシュが表示されます。これはしばしば CREATE USER ステートメントの副作用です。この方法でユーザが作成された場合、最初は何の権限も持っていないので、単に USAGE .