Built-in Authorization
主要な概念
Authorizationとは、ユーザーアイデンティティがDorisリソースへのアクセスと操作において制限されるメカニズムを指します。
Dorisは権限管理にRole-Based Access Control (RBAC)モデルを使用します。
権限
権限はノード、カタログ、データベース、またはTableに適用されます。異なる権限は異なる操作の許可を表します。
すべての権限
| 許可 | Object タイプ | デスクリプション |
|---|---|---|
| Admin_priv | Global | スーパー管理者権限。 |
| Node_priv | Global | ノード変更権限。FE、BE、BROKERノードの追加、削除、廃止を含みます。 |
| Grant_priv | Global, カタログ, Db, Table, Resource, Workload Group | 権限変更権限。権限の付与、取り消し、ユーザー/ロールの追加/削除/変更などの操作を許可します。 他のユーザー/ロールに権限を付与する場合、バージョン2.1.2以前では、現在のユーザーは対応するレベルのGrant_priv権限のみが必要でした。バージョン2.1.2以降では、現在のユーザーは付与したいリソースの権限も必要です。 他のユーザーにロールを割り当てるには、GlobalレベルのGrant_priv権限が必要です。 |
| Select_priv | Global, カタログ, Db, Table, Column | Select権限。データの照会を許可します。 |
| Load_priv | Global, カタログ, Db, Table | Load権限。Load、Insert、Deleteなどを含みます。 |
| Alter_priv | Global, カタログ, Db, Table | Alter権限。データベース/Tableの名前変更、カラムの追加/削除/変更、パーティションの追加/削除などを含みます。 |
| Create_priv | Global, カタログ, Db, Table | Create権限。カタログ、データベース、Table、ビューの作成を許可します。 |
| Drop_priv | Global, カタログ, Db, Table | Drop権限。カタログ、データベース、Table、ビューの削除を許可します。 |
| Usage_priv | Resource, Workload Group | ResourcesとWorkload GroupsのUsage権限。 |
| Show_view_priv | Global, カタログ, Db, Table | SHOW CREATE VIEW実行権限。 |
ロール
Dorisでは、カスタム名のロールを作成できます。ロールは権限の集合として見ることができます。新しいユーザーにロールを割り当てると、そのロールの権限が自動的に付与されます。その後のロールの権限変更も、そのロールに属するすべてのユーザーの権限に影響します。
Built-inロール
Built-inロールは、Dorisによって作成されるデフォルトのロールで、operatorとadminを含むデフォルト権限を持ちます。
- operator: Admin_privとNode_privを持ちます
- admin: Admin_privを持ちます
ユーザー
Dorisでは、user_identityがユーザーを一意に識別します。user_identityはuser_nameとhostの2つの部分で構成され、usernameはユーザー名です。hostはユーザーが接続するホストアドレスを識別します。
Authorization メカニズム
Dorisの権限設計は、RBAC (Role-Based Access Control)モデルに基づいており、ユーザーとロール、ロールと権限を関連付け、ユーザーがロールを通じて間接的に権限を持ちます。
ロールが削除されると、ユーザーは自動的にそのロールのすべての権限を失います。
ユーザーとロールの関連付けが解除されると、ユーザーは自動的にそのロールのすべての権限を失います。
ロールの権限が追加または削除されると、ユーザーの権限も変化します。
┌────────┐ ┌────────┐ ┌────────┐
│ user1 ├────┬───► role1 ├────┬────► priv1 │
└────────┘ │ └────────┘ │ └────────┘
│ │
│ │
│ ┌────────┐ │
│ │ role2 ├────┤
┌────────┐ │ └────────┘ │ ┌────────┐
│ user2 ├────┘ │ ┌─► priv2 │
└────────┘ │ │ └────────┘
┌────────┐ │ │
┌──────► role3 ├────┘ │
│ └────────┘ │
│ │
│ │
┌────────┐ │ ┌────────┐ │ ┌────────┐
│ userN ├─┴──────► roleN ├───────┴─► privN │
└────────┘ └────────┘ └────────┘
上記のように:
user1とuser2は両方ともrole1を通じてpriv1権限を持っています。
userNはrole3を通じてpriv1権限を、roleNを通じてpriv2とprivN権限を持っているため、userNはpriv1、priv2、privN権限を持っています。
注意事項
- 利便性のため、ユーザーに直接権限を付与することができます。内部的には、各ユーザーに対してデフォルトロールが作成され、ユーザーへの権限付与はデフォルトロールへの権限付与と同等です。
- デフォルトロールは削除できず、他のユーザーに割り当てることもできず、ユーザーが削除されると自動的に削除されます。
関連コマンド
- ロールの付与/割り当て: GRANT
- ロールの取り消し/撤回: REVOKE
- ロールの作成: CREATE ROLE
- ロールの削除: DROP ROLE
- ロールの変更: ALTER ROLE
- 現在のユーザー権限とロールの表示: SHOW GRANTS
- 全ユーザー権限とロールの表示: SHOW ALL GRANTS
- 作成されたロールの表示: SHOW ROLES
- サポートされている権限の表示: SHOW PRIVILEGES
ベストプラクティス
以下はDorisの権限システムを使用する例です。
-
シナリオ1
Dorisクラスターのユーザーは管理者(Admin)、開発エンジニア(RD)、ユーザー(クライアント)に分けられます。管理者はクラスター全体に対してすべての権限を持ち、主にクラスターのセットアップやノード管理などを担当します。開発エンジニアはビジネスモデリングを担当し、データベースとTableの作成、データのインポートと変更などを行います。ユーザーは異なるデータベースとTableにアクセスしてデータを取得します。
このシナリオでは、管理者にはADMINまたはGRANT権限を付与できます。RDには任意または指定されたデータベースとTableに対してCREATE、DROP、ALTER、LOAD、SELECT権限を付与できます。Clientには任意または指定されたデータベースとTableに対してSELECT権限を付与できます。同時に、複数ユーザーの権限管理を簡素化するため、異なるロールを作成できます。
-
シナリオ2
クラスターには複数のビジネスがあり、各ビジネスは1つ以上のデータセットを使用する場合があります。各ビジネスは独自のユーザーを管理する必要があります。このシナリオでは、管理者は各データベースに対してDATABASEレベルのGRANT権限を持つユーザーを作成できます。このユーザーは指定されたデータベースに対してのみ権限を付与できます。