1

mysqlDBの顧客用にAとBの2人のユーザーがいるとします。

ユーザーAは特定のDBに対するすべての特権を持っており、ユーザーBは次のような複雑な特定の特権を持っています。

GRANT SELECT,INSERT
    ->     ON customer.Table1
    ->     TO 'user B'@'server.domain'
    ->     IDENTIFIED BY 'pwrd'; 

ここで、Table1テーブルの顧客DBでクエリを実行すると、ユーザーAとユーザーBで別々に実行した場合、クエリの実行時間に違いはありますか?

また、特権はクエリの実行時に実際にどのようにチェックされるのでしょうか。それとも、接続の構築時に特権がチェックされ、他の場所に保存されるのでしょうか。

私が知っているのは、特権は「user(Host、User、Password)」という名前のテーブルに格納されているということです。

4

1 に答える 1

3

sql ステートメントを実行する直前の sql ステートメントのコンパイル時に、ログイン ユーザーの権限がチェックされます。

テーブル、ビュー、ストアド プロシージャ、その特定の sql ステートメントで使用される関数などのリソースに対してのみ権限がチェックされます。

ユーザーの権限またはユーザー レベルは実行時間に影響しません。

ユーザーがデータベースに接続しようとすると、MySQL はその特定のユーザー名/ホスト/パスワードの組み合わせに接続権限があることを確認します。接続が確立されると、何らかの操作が実行される前に、MySQL はユーザーとホストの組み合わせがその操作を実行するための適切なレベルのアクセス権を持っているかどうかを再度確認します。ユーザー テーブルは、MySQL が最初にチェックするテーブルです。アクセスを許可する前に、すべてのユーザー/ホスト/パスワードの組み合わせをこの表にリストする必要があります。

于 2012-06-07T10:04:57.270 に答える