サーバーの権限システムはどのように機能していますか?
更新日時:
対応OS: Windows, macOS, Linux
Navicat対応製品: Navicat for MySQL, Navicat for PostgreSQL, Navicat for MariaDB, Navicat Premium
Navicat対応バージョン: すべて
MySQL & MariaDB
ユーザー権限に関する情報は、mysqlデータベース (つまり、mysqlという名前のデータベース) のuser、db、host、tables_priv、columns_privテーブルに保存されます。MySQLサーバーは、起動時に、これらのテーブルの内容を読み込みます。
MySQLアクセスコントロールは2つの段階からなります:
- サーバーは、ユーザーのデスクトップ (ホストアドレスまたはIPアドレス) が接続を許可されているかどうかを確認します。
- 接続できると仮定して、サーバーは、ユーザーが発行する各リクエストについて、ユーザーがそのリクエストを実行するための十分な権限を持っているかどうかを確認します。例えば、Create table権限やDrop table権限、Alter table権限。
MySQLサーバーは、アクセスコントロールの両方の段階で、MysqlデータベースのUser、Db、Hostテーブルを使用します。
サーバーは、以下のように5つの権限テーブルを使用します:
mysql.userテーブルのスコープフィールドは、入ってくる接続を許可するか拒否するかを決定します。許可される接続に関しては、mysql.userテーブルで与えられている権限がそのユーザーのグローバル (スーパーユーザー) 権限を表します。これらの権限は、サーバーの全てのデータベースに適用されます。
mysql.dbとmysql.hostテーブルは、一緒に使用されます:
mysql.dbテーブルのスコープフィールドは、どのユーザーがどのホストからのどのデータベースにアクセスできるかを決定します。権限フィールドは、どの操作が許可されているかを決定します。
mysql.hostテーブルは、mysql.dbテーブルのエントリーを複数のホストに適用したい場合に、mysql.dbテーブルの拡張として使用されます。例えば、ユーザーがネットワーク上の複数のホストからデータベースを使用できるようにしたい場合、そのユーザーのmysql.dbテーブルのエントリーのmysql.hostの値を空にしておきます。そして、mysql.hostテーブルに、それぞれのホストについてのエントリーを追加します。
mysql.tables_privとmysql.columns_privテーブルは、mysql.dbテーブルに似ていますが、データベースレベルではなく、テーブルとカラムのレベルで適用されます。
PostgreSQL
ユーザー権限に関する情報は、pg_catalogと呼ばれるスキーマのpg_shadowテーブルに保存されます。PostgreSQLサーバーは、起動時に、このテーブルの内容を読み込みます。
PostgreSQLアクセスコントロールは2つの段階からなります:
- サーバーは、ユーザーのデスクトップ (ホストアドレスまたはIPアドレス) が接続を許可されているかどうかを確認します。
- 接続できると仮定して、サーバーは、ユーザーが発行する各リクエストについて、ユーザーがそのリクエストを実行するための十分な権限を持っているかどうかを確認します。例えば、Create table権限やDrop table権限、Alter table権限。