このトピックでは、Hologres のユーザー認証方法と、開発権限の付与に使用できる標準 PostgreSQL 権限モデル、簡易権限モデル (SPM)、スキーマレベル権限モデル (SLPM) という 3 つの権限モデルについて説明します。
Hologres の認証フロー
以下の図に、完全な認証フローを示します。
ユーザー
Alibaba Cloud アカウントで Hologres にアクセスするには、管理者が事前にcreate user "xxx" を実行して、そのアカウントを Hologres ユーザーとして登録する必要があります。登録しない場合、「role "xxx" does not exist」というエラーが返されます。ユーザーはインスタンスレベルで存在します。ユーザーを追加または削除すると、そのユーザーはインスタンスに追加または削除されます。テーブルの作成などの操作にはデータベースレベルの権限が必要です。この権限は特定のデータベース内で付与されるもので、データベース間では使用できません。
select * from pg_user; を実行すると、現在のインスタンスのスーパーユーザーを表示できます。
権限モデル
Hologres は PostgreSQL 11 と互換性があり、標準 PostgreSQL 権限モデル (エキスパートモデル) をサポートしています。PostgreSQL の権限はきめ細かく、権限付与の構文が複雑なため、Hologres では、簡易権限モデル (SPM) とスキーマレベル権限モデル (SLPM) という 2 つの簡素化されたモデルも提供しています。
以下の表では、3つのモデルを比較しています。
|
権限モデル |
シナリオ |
説明 |
|
標準 PostgreSQL 権限モデル (エキスパートモデル) |
特定のテーブルの特定のユーザーに対する厳格なアクセス制御。 |
きめ細かく柔軟ですが、権限付与の構文は複雑です。権限の付与方法の詳細については、「エキスパート権限モデル」をご参照ください。 |
|
簡易権限モデル (SPM) |
粗粒度のデータベースレベルのアクセス制御。 |
ユーザーグループごとに固定の権限を持つ、事前パッケージ化されたデータベースレベルのロールです。より簡単な構文で、ほとんどのユースケースをカバーします。権限の付与方法の詳細については、「SPMを使用した権限管理」をご参照ください。 |
|
スキーマレベル権限モデル (SLPM) |
権限付与が簡素化された、きめ細かいスキーマレベルのアクセス制御。 |
ユーザーグループごとに固定の権限を持つ、事前パッケージ化されたスキーマレベルのロールです。SPM よりもきめ細かな制御が可能です。権限の付与方法の詳細については、「SLPMを使用した権限管理」をご参照ください。 |
権限の付与
以下の表に、標準 PostgreSQL 権限モデルと簡易モデル (SPM/SLPM) での各操作に必要な権限を示します。
デフォルトでは、スーパーユーザーは以下のすべての権限を持ちます。
|
標準 PostgreSQL 権限モデルでの操作 |
必要な権限 |
権限付与ステートメント |
|
CREATE USER (ROLE) DROP USER (ROLE) |
CREATEROLE |
ユーザー A に CREATEROLE 権限を付与する場合:
|
|
CREATE TABLE VIEW TABLE FOREIGN TABLE |
データベースに対するCONNECT権限と、対象スキーマに対するCREATE権限 |
ユーザー A にスキーマ xx に対する CREATE 権限を付与する場合:
デフォルトでは、すべてのユーザーが public スキーマにテーブルを作成できます。 |
|
SELECT |
対応するスキーマに対するUSAGE権限と、対象テーブルに対するSELECT権限 |
例:
|
|
INSERT UPDATE DELETE TRUNCATE |
対応するスキーマに対するUSAGE権限と、対象テーブルに対する関連DML権限 (INSERT/UPDATE/DELETE/TRUNCATE) |
例:
|
|
ALTER TABLE |
テーブル所有者 (ALTER OWNER で変更可能) |
GRANT ではテーブルの所有権を譲渡できません。 |
|
DROP TABLE |
||
|
CREATE DATABASE |
CREATEDB |
ユーザー A に CREATEDB 権限を付与する場合:
|
|
DROP DATABASE |
DB 所有者 |
GRANT ではデータベースの所有権を譲渡できません。 |
|
CREATE EXTENSION |
DB 所有者 |
- |
|
GRANT REVOKE |
関連する権限とGRANT OPTIONを持つユーザー |
ユーザー A に GRANT OPTION を付与する場合:
|
|
権限モデルごとの権限付与 |
簡易権限モデル (SPM) |
スキーマレベル権限モデル (SLPM) |
||
|
操作 |
必要な権限 |
権限付与ステートメント |
必要な権限 |
権限付与ステートメント |
|
CREATE USER (ROLE) DROP USER (ROLE) |
DB管理者 |
ユーザーに管理者権限を付与する場合:
重要
SPM は、ユーザー名の末尾が |
DB管理者 |
ユーザーに管理者権限を付与する場合:
重要
SLPM は、ユーザー名の末尾が |
|
CREATE TABLE VIEW TABLE FOREIGN TABLE |
スーパーユーザー、または管理者/開発者ユーザーグループの権限 |
上記の SPM ステートメントを使用して、管理者または開発者の権限を付与します。 |
スーパーユーザー、またはスキーマの管理者/開発者ユーザーグループの権限 |
上記の SLPM ステートメントを使用して、スキーマの管理者または開発者の権限を付与します。 |
|
SELECT |
スーパーユーザー、または管理者/開発者/ライター/ビューアーユーザーグループの権限 |
上記の SPM ステートメントを使用して、管理者、開発者、ライター、またはビューアーの権限を付与します。 |
スーパーユーザー、またはスキーマの管理者/開発者/ライター/ビューアーユーザーグループの権限 |
上記の SLPM ステートメントを使用して、スキーマの管理者、開発者、ライター、またはビューアーの権限を付与します。 |
|
INSERT UPDATE DELETE TRUNCATE |
スーパーユーザー、または管理者/開発者/ライターユーザーグループの権限 |
上記の SPM ステートメントを使用して、管理者、開発者、またはライターの権限を付与します。 |
スーパーユーザー、またはスキーマの管理者/開発者/ライターユーザーグループの権限 |
上記の SLPM ステートメントを使用して、スキーマの管理者、開発者、またはライターの権限を付与します。 |
|
ALTER TABLE |
スーパーユーザー、または管理者/開発者ユーザーグループの権限 |
上記の SPM ステートメントを使用して、管理者または開発者の権限を付与します。 |
スーパーユーザー、またはスキーマの管理者/開発者ユーザーグループの権限 |
上記の SLPM ステートメントを使用して、スキーマの管理者または開発者の権限を付与します。 |
|
DROP TABLE |
||||
|
CREATE DATABASE DROP DATABASE CREATE EXTENSION |
DB管理者 |
上記の SPM ステートメントを使用して、管理者権限を付与します。 |
DB管理者 |
- |
|
GRANT REVOKE |
DB管理者 |
ユーザー A に権限を付与および取り消す場合:
|
DB管理者 |
ユーザー A に権限を付与および取り消す場合:
|