Hologres インスタンスにログインした後、ユーザーは操作を実行するために必要な権限を持っている必要があります。このトピックでは、Hologres インスタンスでの開発に必要な権限について説明します。
Hologres の認証フロー
以下の図は、ユーザーが Hologres に接続してから使用するまでの完全な認証フローを示しています:
ユーザーの概念
Alibaba Cloud アカウントが Hologres に接続する場合、そのアカウントを Hologres ユーザーとして作成する必要があります。管理者は create user "xxx" 文を実行する必要があります。そうしないと、role "xxx" does not exist というエラーメッセージが表示されます。ユーザーはインスタンスレベルで存在します。ユーザーの追加または削除は、インスタンスへの追加またはインスタンスからの削除を意味します。インスタンス内でのテーブル作成などの特定の操作には、データベースレベルの権限が必要です。権限は特定のデータベース内で付与されます。これらの権限は、そのデータベース内のオブジェクトにのみ適用され、データベースをまたいで使用することはできません。
select * from pg_user; コマンドを実行すると、現在のインスタンスのスーパー管理者を表示できます。
権限モデル
Hologres は PostgreSQL 11 と互換性があります。開発権限を付与するには、標準の PostgreSQL 権限付与文を使用できます。この方法は、標準 PostgreSQL 権限モデルとして知られています。PostgreSQL の権限の粒度はきめ細かく、その権限付与構文は複雑です。アクセス制御を簡素化するために、Hologres は簡易権限モデルも提供しています。
次の表では、簡易権限モデルと標準 PostgreSQL 権限モデルの違い、およびそれぞれのシナリオについて説明します。
権限タイプ | シナリオ | 説明 |
標準 PostgreSQL 権限モデル | このモデルは、厳格なアクセス制御が必要なシナリオに適しています。たとえば、特定のユーザーに特定のテーブルに対する権限を付与できます。 | 標準 PostgreSQL 権限モデルは、きめ細かい粒度と柔軟性で権限を付与します。特定のユーザーに特定のテーブルに対する権限を付与できます。ただし、権限付与の構文は複雑です。権限の付与方法の詳細については、「標準 PostgreSQL 権限モデル」をご参照ください。 |
簡易権限モデル (SPM) | このモデルは、データベースレベルのアクセス制御を提供し、粗い粒度の権限管理シナリオに適しています。 | 簡易権限モデルは、データベースディメンションに基づいた事前パッケージ化されたモデルです。各ユーザーグループには対応する権限があり、変更することはできません。ほとんどの権限付与ニーズを満たし、権限付与操作を簡素化します。権限の付与方法の詳細については、「簡易権限モデル」をご参照ください。 |
スキーマレベルの権限モデル (SLPM) | このモデルは、スキーマレベルのアクセス制御を提供し、きめ細かい権限が必要でありながら、簡素化された権限付与フローも求められるシナリオに適しています。 | スキーマレベル簡易権限モデルは、スキーマディメンションに基づいた事前パッケージ化されたモデルです。各ユーザーグループには対応する権限があり、変更することはできません。よりきめ細かいアクセス制御をサポートし、権限付与操作を簡素化します。権限の付与方法の詳細については、「スキーマレベル簡易権限モデルの使用」をご参照ください。 |
権限の付与
Hologres を使用して開発を行うには、ユーザーに特定の権限を付与する必要があります。次の 2 つの表は、標準 PostgreSQL 権限モデルと簡易権限モデルの操作と必要な権限を示しています。必要な操作と使用する権限モデルに基づいて、ユーザーに権限を付与してください。
スーパー管理者は、デフォルトで表に記載されているすべての権限を持っています。
標準 PostgreSQL 権限モデルでの操作 | 必要な権限 | 権限付与文 |
CREATE USER(ROLE) DROP USER(ROLE) | CREATEROLE | 次の例では、ユーザー A にロールを作成する権限を付与します。 |
CREATE TABLE VIEW TABLE FOREIGN TABLE | データベースに対する CONNECT 権限と、対応するスキーマに対する CREATE 権限 | 次の例では、ユーザー A に xx スキーマでテーブルを作成する権限を付与します。 デフォルトでは、どのユーザーも public スキーマにテーブルを作成する権限を持っています。 |
SELECT | 対応するスキーマに対する USAGE 権限と SELECT 権限 | 次のように権限を付与します: |
INSERT UPDATE DELETE TRUNCATE | 対応するスキーマに対する USAGE 権限と、INSERT、UPDATE、DELETE、または TRUNCATE 権限 | 次のように権限を付与します: |
ALTER TABLE | テーブルのオーナー (テーブルのオーナーは ALTER OWNER を使用して変更できます) | GRANT を使用してテーブルを削除するのではなく、 |
DROP TABLE | ||
CREATE DATABASE | CREATEDB | 次の例では、ユーザー A にデータベースを作成する権限を付与します: |
DROP DATABASE | DB オーナー | GRANT を使用してデータベースを削除するのではなく、 |
CREATE EXTENSION | DB オーナー | - |
GRANT REVOKE | 対応する権限と GRANT OPTION 権限を持つユーザー | 次の例では、ユーザーに GRANT 操作の権限を付与します: |
権限モデルによる権限付与 | 簡易権限モデル (SPM) | スキーマレベル権限モデル (SLPM) | ||
操作 | 必要な権限 | 権限付与文 | 必要な権限 | 権限付与文 |
CREATE USER(ROLE) DROP USER(ROLE) | DB 管理者 | 次の 2 つの方法のいずれかで、ユーザーに管理者権限を付与します:
重要 SPM は、ユーザー名が | DB 管理者 | 次の 2 つの方法のいずれかで、ユーザーに管理者権限を付与します:
重要 SLPM は、ユーザー名が |
CREATE TABLE VIEW TABLE FOREIGN TABLE | スーパーユーザー、管理者、または開発者ユーザーグループの権限 | この表の SPM 権限付与文を参照して、ユーザーに管理者または開発者権限を付与します。 | スーパーユーザー、またはスキーマの管理者または開発者ユーザーグループの権限 | この表の SLPM 権限付与文を参照して、ユーザーにスキーマの管理者または開発者権限を付与します。 |
SELECT | スーパーユーザー、管理者、開発者、writer、または viewer ユーザーグループの権限 | この表の SPM 権限付与文を参照して、ユーザーに管理者、開発者、writer、または viewer 権限を付与します。 | スーパーユーザー、またはスキーマの管理者、開発者、writer、または viewer ユーザーグループの権限 | この表の SLPM 権限付与文を参照して、ユーザーにスキーマの管理者、開発者、writer、または viewer 権限を付与します。 |
INSERT UPDATE DELETE TRUNCATE | スーパーユーザー、管理者、開発者、または writer ユーザーグループの権限 | この表の SPM 権限付与文を参照して、ユーザーに管理者、開発者、または writer 権限を付与します。 | スーパーユーザー、またはスキーマの管理者、開発者、または writer ユーザーグループの権限 | この表の SLPM 権限付与文を参照して、ユーザーにスキーマの管理者、開発者、writer、または viewer 権限を付与します。 |
ALTER TABLE | スーパーユーザー、管理者、または開発者ユーザーグループの権限 | この表の SPM 権限付与文を参照して、ユーザーに管理者または開発者権限を付与します。 | スーパーユーザー、またはスキーマの管理者または開発者ユーザーグループの権限 | この表の SLPM 権限付与文を参照して、ユーザーにスキーマの管理者または開発者権限を付与します。 |
DROP TABLE | ||||
CREATE DATABASE DROP DATABASE CREATE EXTENSION | DB 管理者 | この表の SPM 権限付与文を参照して、ユーザーに管理者権限を付与します。 | DB 管理者 | この表の SLPM 権限付与文を参照して、ユーザーにスキーマの管理者権限を付与します。 |
GRANT REVOKE | DB 管理者 | 次の例は、ユーザー A の権限を付与および取り消す方法を示しています: | DB 管理者 | 次の例は、ユーザー A の権限を付与および取り消す方法を示しています: |