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


100

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

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

ドキュメントには、USAGE特権は「特権なし」を意味することが記載されているため、Grants Grantsは階層的に機能し、ユーザーはすべてのデータベースに対して何らかの特権を持っている必要があるため、これはすべてのキャッチとして機能しますか?

またIDENTIFIED BY、私が作成したグラントに条項がない場合、この行に条項がある理由もわかりません(主に、IDENTIFIED BY条項の目的がわからないためです)。

編集:これを最初に述べなかったことを申し訳ありません、助成金は

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

実行した助成金について教えてください
Pentium10

回答:


143

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

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

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

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

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


10
彼らが認証を許可されているからだと思います。間違ったユーザーやパスワードで試行すると、認証できません。USAGE特権を持つユーザーは、「select 1 + 1」や「show processlist」などの特定のSQLコマンドを実行できます。
Mircea Vutcovici

11

私はその意味を見つけようとしてGRANT USAGE on *.* TO、ここで見つけました。次のコマンド()でユーザーを作成するとGRANT USAGE on *.* TO user IDENTIFIED BY PASSWORD passwordそれが許可されることを明確にできます。CREATE

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

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


3

さらに、IDENTIFIED BY句を使用しない場合のmysqlパスワードは空白の値である場合があり、空白でない場合は暗号化される場合があります。しかし、はいUSAGEMAX_QUERIES_PER_HOUR、などの単純なリソースリミッターを付与することによってアカウントを変更するために使用されます。これも、WITH句を使用して指定できますGRANT USAGE(特権は追加されません)。またはGRANT ALLGRANT USAGEグローバルレベル、データベースレベルで指定することもできます。テーブルレベルなど...

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.