web-dev-qa-db-ja.com

ユーザー特権を初めて付与したときに「GRANT USAGE」が作成されるのはなぜですか?

私は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
_
83
John M Naglick

あなたが言ったように、MySQLではUSAGEは「特権なし」と同義です。 MySQLリファレンスマニュアル から:

USAGE特権指定子は、「特権なし」の略です。グローバルレベルでGRANTを使用して、既存のアカウント権限に影響を与えることなく、リソース制限やSSL特性などのアカウント属性を変更します。

USAGEは、アカウントに実際の特権を付与せずにアカウントが存在することをMySQLに通知する方法です。それらは単にMySQLサーバーを使用するuseの許可があるため、USAGEです。これは、権限が設定されていない`mysql`.`user`テーブルの行に対応します。

IDENTIFIED BY句は、そのユーザーにパスワードが設定されていることを示します。ユーザーが自分が誰であるかを知るにはどうすればよいですか?彼らは自分のアカウントの正しいパスワードを送信することで自分自身をidentifyします。

ユーザーのパスワードは、特定のデータベースまたはテーブルに関連付けられていないグローバルレベルのアカウント属性の1つです。 `mysql`.`user`テーブルにも存在します。ユーザーにON *.*以外の特権がない場合は、USAGE ON *.*が付与され、パスワードハッシュがそこに表示されます。多くの場合、これはCREATE USERステートメントの副作用です。この方法で作成されたユーザーは、最初は特権を持たないため、USAGEが付与されるだけです。

120
Espresso_Boy

GRANT USAGE on *.* TOの意味を見つけようとしていて、ここにありました。次のコマンド(CREATE)を使用してcreateユーザーにGRANT USAGE on *.* TO user IDENTIFIED BY PASSWORD passwordが付与されることを明確にすることができます。

CREATE USER 'user'@'localhost' IDENTIFIED BY 'password'; 

grantGRANTで特権を付与すると、その上に新しい特権が追加されます。

8
5YrsLaterDBA