特権システムテーブル| mysqlシステムライブラリの包括的な理解(1)

以前、performance_schema  、sysinformation_schemaシステムライブラリを完全に紹介しました。本日より、「mysqlシステムライブラリの総合的な理解」シリーズを開きます。これは、MySQLの最後のシステムライブラリでもあります。 「本当にMySQLのヘルプコマンドを使用していますか?「実際、mysqlシステムライブラリのヘルプ情報テーブルがこの記事で紹介されています。次のシリーズの記事では、mysqlシステムライブラリを包括的に紹介します。次に、mysqlシステムライブラリの学習の旅を開始するために私たちに従ってください。

MySQLアクセス権限システムテーブルには、次のテーブルが含まれています。

  • user:ユーザーアカウントとグローバルパーミッションおよびその他の非パーミッションリスト(セキュリティ構成オプションとリソース制御オプションの列)が含まれます

  • db:データベースレベルの権限テーブル

  • Tables_priv:テーブルレベルの特権テーブル

  • columns_priv:列レベルの権限テーブル

  • procs_priv:ストアドプロシージャと関数の特権テーブル

  • proxies_priv:プロキシユーザー特権テーブル

PS:

  • パーミッションテーブルの内容を変更するには、アカウント管理ステートメント(CREATE USER、GRANT、REVOKEなど)を使用してパーミッションテーブルを間接的に変更することをお勧めします。DMLステートメントを使用してパーミッションテーブルを変更することはお勧めしません。そうしないと、自己責任で行ってください。

  • 以下のコンテンツは主にMySQL5.7バージョン向けに構成されています

1、ユーザー

この表は、クエリのグローバル権限情報を提供します。この表のアカウントパスワード情報は、ユーザーが認証フェーズ1で接続を許可されるかどうかを決定します(次の号で認証フェーズに関連するコンテンツを紹介します)。アカウントパスワード認証フェーズを介した接続については、ユーザーテーブルで同時にアクセス許可チェックに合格すると、ユーザーがグローバルアクセス許可を持っていることを意味し、テーブルに記録されているアクセス許可情報は、ユーザーがインスタンス内のすべてのデータベースに対応するグローバルアクセス許可を持っているかどうかを表します。

  • 注:パーミッションがユーザーテーブルにYとしてリストされている場合、そのパーミッションはグローバルパーミッションであると見なされるため、ユーザーは、show databaseを使用するとき、またはinformation_schemaのschemataテーブルを使用してクエリを実行するときに、すべてのデータベース名のリストをクエリできます。

表に格納されている情報の内容は以下のとおりです。

root@localhost : mysql 12:51:40> select * from mysql.user limit 1\G;
*************************** 1. row ***************************
              Host: %
              User: qfsys
       Select_priv: Y
       Insert_priv: N
       Update_priv: N
       Delete_priv: N
       Create_priv: N
         Drop_priv: N
       Reload_priv: Y
     Shutdown_priv: Y
      Process_priv: Y
         File_priv: Y
        Grant_priv: N
   References_priv: N
        Index_priv: N
        Alter_priv: N
      Show_db_priv: N
        Super_priv: Y
 Create_tmp_table_priv: N
  Lock_tables_priv: Y
      Execute_priv: N
   Repl_slave_priv: Y
  Repl_client_priv: Y
  Create_view_priv: N
    Show_view_priv: N
   Create_routine_priv: N
Alter_routine_priv: N
  Create_user_priv: N
        Event_priv: N
      Trigger_priv: N
Create_tablespace_priv: N
          ssl_type: 
        ssl_cipher: 
       x509_issuer: 
      x509_subject: 
     max_questions: 0
       max_updates: 0
   max_connections: 0
  max_user_connections: 0
            plugin: mysql_native_password
 authentication_string: *3B3D7D2FD587C29C730F36CD52B4BA8CCF4C744F
  password_expired: N
 password_last_changed: 2017-07-01 14:37:32
 password_lifetime: NULL
    account_locked: N
1 row in set (0.00 sec)

テーブルフィールドの意味:

  • ホストとユーザーの2つの列は、正式にはスコープ列と呼ばれます。これらの2つのフィールドは、アクセスを許可されるクライアントのスコープと、クライアントがアクセスできるデータベースリソースのスコープを構成することが理解できます(ライブラリスコープを制限するdbテーブルのようなdbフィールドはありません。インスタンス全体のデータベース全体として理解できます) 
    *ホスト:ユーザーがデータベースへのアクセスを許可されるホストを表し、ワイルドカードとDNSを使用できます
    *ユーザー:ユーザー名

  • 権限列:Select_privからCreate_tablespace_privまで、およびその間の列(正式には権限列と呼ばれます)。各列は特定の権限に対応します。Yは権限を意味し、Nは権限がないことを意味します。

  • 以下は、正式にはセキュリティ列と呼ばれ、クライアントとサーバー間の安全で暗号化された通信に関連しています 
    * ssl_type:ユーザーが暗号化されたssl接続を使用するように構成されている場合、このフィールドはユーザーが使用する暗号化証明書のタイプを記録します 
    * ssl_cipher:を示しますSSL接続ハンドシェイクで使用できるパスワードのリスト 
    * x509_issuer:x509証明書関連フィールド 
    * x509_subject:x509証明書関連フィールド 
    * plugin:ユーザーが使用するパスワード認証プラグインの名前 
    * authentication_string:ユーザーのパスワードを表すmd5暗号化文字列 
    * password_expired:ユーザーパスワードの有効期限が切れているかどうかを示します。Ytryはユーザーパスワードの有効期限が切れることを意味します。Nはユーザーパスワードの有効期限が切れないことを意味します 
    * password_last_changed:このフィールドが組み込みのMySQL認証プラグイン(mysql_native_passwordまたはsha256_password)を使用する場合、ユーザーパスワードの最終変更時刻を示します。フィールドは空ではありません。外部認証プラグインを使用する場合、フィールドは空です。MySQLの組み込み認証プラグインを使用する場合、このフィールドの初期値は、CREATE USER、ALTER USER、SET PASSWORD、およびGRANTステートメントの実行で、ユーザーを作成または変更します。 Password time 
    * password_lifetime:password_expiredフィールドがYの場合、このフィールドには、ユーザーの残りのパスワードが期限切れになっていない日数が記録されます。このフィールドの値がNであるとすると、ユーザーはN日ごとにパスワードを変更する必要があります。ユーザーが値を個別に指定しない場合は、代わりにグローバルシステム変数default_password_lifetimeの値が使用されます。フィールド値がNULLで、グローバルシステム変数default_password_lifetimeが0またはフィールド値が0の場合、ユーザーのパスワードが期限切れになることはありません。 
    * account_locked:ユーザーの現在の状態がロックされているかアクティブであるかを表します

  • 次の列は、正式にはリソース制御列と呼ばれ、リソースへのユーザーのアクセスを制限するために使用されます 
    * max_questions:すべてのユーザーの1時間あたりの同時クエリの最大数を表します* max_updates:
    すべてのユーザーの1時間あたり同時更新の最大数を 
    表します * max_connections:1時間あたりのすべてのユーザーを表します同時接続の最大数 
    * max_user_connections:この行のユーザーの1時間あたりの同時接続の最大数を表します

2、db

このテーブルは、クエリデータベースレベルのオブジェクト権限情報を提供します。このテーブルに記録されている権限情報は、ユーザーがこれらの権限を使用して、データベース内のすべてのオブジェクト(テーブルまたはストアドプロシージャ)にアクセスできるかどうかを表します。

表に格納されている情報の内容は以下のとおりです。

root@localhost : mysql 12:53:28> select * from db limit 1\G;
*************************** 1. row ***************************
             Host: localhost
               Db: performance_schema
             User: mysql.session
      Select_priv: Y
      Insert_priv: N
      Update_priv: N
      Delete_priv: N
      Create_priv: N
        Drop_priv: N
       Grant_priv: N
  References_priv: N
       Index_priv: N
       Alter_priv: N
Create_tmp_table_priv: N
 Lock_tables_priv: N
 Create_view_priv: N
   Show_view_priv: N
  Create_routine_priv: N
   Alter_routine_priv: N
     Execute_priv: N
       Event_priv: N
     Trigger_priv: N
1 row in set (0.00 sec)

テーブルフィールドの意味:

  • ホスト、DB、およびユーザーの3つの列が正式範囲の列と呼ばれ、これらの二つのフィールドがアクセスを許可するクライアントの範囲とクライアントがアクセスできるデータベースリソースの範囲を構成することを理解することができます。。 
    *ホスト:userテーブルのHostフィールドと同じ意味を持っています 
    * db:ユーザー権限レコードが属するライブラリレベルの範囲を表します 
    * user:ユーザーテーブルのuserフィールドと同じ意味を持ちます

  • xxx_priv:ユーザーテーブルのxxx_privフィールドと同じ意味です。各フィールドは対応する権限に対応します。Yは権限を表し、Nは権限なしを表します。 
    *ユーザーテーブルと比較して、Reload_priv、Shutdown_priv、Process_priv、File_priv、Show_db_priv、 Super_priv、Repl_slave_priv、Repl_client_priv、Create_user_priv、Create_tablespace_priv、およびその他のフィールド。これは、これらのフィールドに対応する権限がスコープ内でグローバルであり、ライブラリテーブルレベルを区別しないことを意味します。

3、tables_priv

このテーブルは、dbテーブルと同様ですが、より詳細なクエリテーブルレベルのアクセス許可情報を提供します。tables_privテーブルに記録されるアクセス許可情報は、ユーザーがこれらのアクセス許可を使用してテーブル内のすべての列にアクセスできるかどうかを表します。

表に格納されている情報の内容は以下のとおりです。

root@localhost : mysql 12:54:14> select * from tables_priv;
+-----------+--------+---------------+------------+----------------+---------------------+----------------------------------------------------------------------------------------------+----------------------+
| Host      | Db     | User          | Table_name | Grantor        | Timestamp           | Table_priv                                                                                   | Column_priv          |
+-----------+--------+---------------+------------+----------------+---------------------+----------------------------------------------------------------------------------------------+----------------------+
| localhost | sys    | mysql.sys     | sys_config | root@localhost | 2017-07-01 14:31:32 | Select                                                                                       |                      |
| localhost | mysql  | mysql.session | user       | root@localhost | 2017-12-11 23:41:19 | Select                                                                                       |                      |
| %         | sbtest | xx            | sbtest1    | root@localhost | 0000-00-00 00:00:00 |                                                                                              | Select,Insert,Update |
| %         | sbtest | test_table    | sbtest1    | root@localhost | 0000-00-00 00:00:00 | Select,Insert,Update,Delete,Create,Drop,References,Index,Alter,Create View,Show view,Trigger |                      |
+-----------+--------+---------------+------------+----------------+---------------------+----------------------------------------------------------------------------------------------+----------------------+
4 rows in set (0.00 sec)

テーブルフィールドの意味:

  • host、db、user、Table_nameの4つの列は、正式には範囲列と呼ばれます。これら2つのフィールドは、アクセスが許可されるクライアントの範囲と、クライアントがアクセスできるテーブルオブジェクトリソースの範囲を構成することが理解できます。

  • Table_privとColumn_privは、正式にはアクセス許可列と呼ばれ、テーブルレベルのアクセス許可と列レベルのアクセス許可に対応します。アクセス許可列のこれら2つの列は、ユーザーテーブルやデータベーステーブルとは異なることに注意してください。これら2つの列はセットタイプであり、テーブルレベルと列レベルを記録します。特定の権限に対応するのではなく、権限のコレクション。Table_privは、テーブルレベルの「選択」、「挿入」、「更新」、「削除」、「作成」、「削除」、「付与」、「参照」、「インデックス」、「変更」、「ビューの作成」に対応します。 、「ビューの表示」、「トリガー」権限、Column_privは、列レベルの「選択」、「挿入」、「更新」、「参照」権限に対応します

  • その他のフィールド: 
    *付与者:テーブルに記録されたユーザー権限を付与したユーザーに代わって、つまり、テーブル内のユーザー権限が付与されたときにcurrent_user関数によって返されるユーザー値(アカウントフォーム) 
    *タイムスタンプ:付与者によって付与されたアカウントを表します許可のタイムスタンプ

 

4、columns_priv

このテーブルは、dbテーブルと同様ですが、より詳細なクエリ列レベルのアクセス許可情報を提供します。columns_privテーブルに記録されたアクセス許可情報は、ユーザーがこれらのアクセス許可を使用してテーブルの指定された列にアクセスできることを表します。

表に格納されている情報の内容は以下のとおりです。

root@localhost : mysql 12:55:13> select * from columns_priv;
+------+--------+------+------------+-------------+---------------------+----------------------+
| Host | Db     | User | Table_name | Column_name | Timestamp           | Column_priv          |
+------+--------+------+------------+-------------+---------------------+----------------------+
| %    | sbtest | xx   | sbtest1    | id          | 0000-00-00 00:00:00 | Select,Insert,Update |
+------+--------+------+------------+-------------+---------------------+----------------------+
1 row in set (0.00 sec)

テーブルフィールドの意味:

  • host、db、user、Table_name、Column_nameの5つの列は、正式には範囲列と呼ばれます。これら2つのフィールドは、許可されるクライアントの範囲と、クライアントがアクセスできる列オブジェクトリソースの範囲を構成することが理解できます。

  • Column_privは、正式には権限列と呼ばれ、tables_privテーブルのColumn_priv列と同じ意味を持ちます。これは、列レベルの「選択」、「挿入」、「更新」、および「参照」権限に対応するコレクションでもあります。

  • その他のフィールド 
    *タイムスタンプ:tables_privテーブルのタイムスタンプ列と同じ意味です

5、procs_priv

このテーブルは、保存されたプロシージャをクエリするためのアクセス許可情報を提供します。テーブルに記録されたアクセス許可情報は、ユーザーがこれらのアクセス許可を使用して、指定された保存されたプロシージャ(保存されたプロシージャと関数)にアクセスできるかどうかを表します

テーブルフィールドの意味:

  • host、db、user、Routine_name、Routine_typeの5つの列は、正式には範囲列と呼ばれます。これら2つのフィールドは、アクセスが許可されるクライアントのスコープと、クライアントがアクセスできるストレージオブジェクトリソースを構成することが理解できます。

  • Proc_privは、正式にはアクセス許可列と呼ばれます。このアクセス許可列は、保存されたプロシージャの「実行」、「ルーチンの変更」、および「付与」のアクセス許可を表すコレクションタイプでもあります。

  • その他の列: 
    *タイムスタンプ:tables_privテーブルのタイムスタンプフィールド
    と同じ意味*グランターtables_privテーブルのグランターフィールド と同じ意味

PS:テーブルの権限データは空であり、テーブルをデータで埋める方法が見つかりませんでした。

6、proxies_priv

この表は、クエリプロキシのユーザー権限情報を提供します。この表に記録されている権限情報は、ユーザーがエージェントとして機能できるユーザーと、ユーザーが他のユーザーにPROXY権限を付与できるかどうかを表します。

  • ユーザーが他のアカウントにPROXY権限を付与する必要がある場合は、テーブルに権限情報の行が必要であり、With_grantフィールドは1である必要があります。

表に格納されている情報の内容は以下のとおりです。

root@localhost : mysql 12:58:16> select * from proxies_priv;
+-----------+------+--------------+--------------+------------+----------------------+---------------------+
| Host      | User | Proxied_host | Proxied_user | With_grant | Grantor              | Timestamp           |
+-----------+------+--------------+--------------+------------+----------------------+---------------------+
| localhost | root |              |              |          1 | boot@connecting host | 0000-00-00 00:00:00 |
+-----------+------+--------------+--------------+------------+----------------------+---------------------+
1 row in set (0.00 sec)

テーブルフィールドの意味:

  • ホストフィールドとユーザーフィールドの意味は、上記の他の権限テーブルと同じです。

  • Proxied_hostおよびProxied_userは、プロキシアクセス許可(対応するホストおよびユーザー文字列)が付与されているアカウントを表します。

  • 他の列はtables_privと同じ意味です

注:権限テーブルの一部のフィールドには、次のように長さの保存制限があります。

  • ホスト、Proxied_host:長さ60文字

  • ユーザー、Proxied_user:長さは32文字に制限されています

  • パスワード:41文字の長さ

  • Db:長さは64文字に制限されています

  • Table_name:長さは64文字に制限されています

  • Column_name:長さは64文字に制限されています

  • Routine_name:長さは64文字に制限されています

この号の内容はここで紹介されており、この号の参照リンクは次のとおりです。

  • https://dev.mysql.com/doc/refman/5.7/en/grant-tables.html

|作者について

LuoXiaobo・ScaleFluxデータベーステクノロジーエキスパート

「千の金のレシピ-MySQLパフォーマンス最適化ピラミッドルール」、「データエコロジー:MySQLレプリケーションテクノロジーとプロダクションプラクティス」の著者の1人。

MySQLアーキテクチャに精通し、オープンソーステクノロジーに特化するなど、データベース全体のチューニングに精通し、オープンソーステクノロジーの推進に熱心であり、オンラインおよびオフラインで多くの公開データベーストピック共有を行い、100近くのデータベース関連の研究記事を公開しています。

全文は終わりました。

MySQLをお楽しみください:)

TeacherYeの「MySQLCoreOptimization」クラスがMySQL8.0にアップグレードされました。コードをスキャンして、MySQL8.0の練習の旅を始めてください。

おすすめ

転載: blog.csdn.net/n88Lpo/article/details/110507410