メインコンテンツまでスキップ
に最終更新

組み込み認可

Doris の組み込み認可は、RBAC(ロールベースのアクセス制御)モデルに基づいています。「権限からロール、ロールからユーザーへ」という三層構造により、ユーザーの ID に応じて、ノード、Catalog、データベース、テーブル、カラム、Resource、Workload Group などのリソースへのアクセスと操作を制限します。

このドキュメントでは、Doris の組み込み認可の基本概念、動作の仕組み、関連する SQL コマンド、代表的な権限設計のシナリオを説明します。

適用シナリオ​

シナリオ推奨する方法
クラスター運用(管理者)Admin_priv または Node_priv を付与し、組み込みの operator / admin ロールを使用する
データ開発(データベースやテーブルの作成、データのロード)指定したデータベースやテーブルに CREATE、DROP、ALTER、LOAD、SELECT 権限を付与する
データ照会(読み取り専用アクセス)指定したデータベース、テーブル、カラムに Select_priv を付与する
複数業務によるマルチテナントの共有クラスター業務ごとのデータベースに対するデータベースレベルの Grant_priv を持つ「業務管理者」ユーザーを作成し、そのユーザーに各業務のユーザーを管理させる
Resource / ワークロードの分離Usage_priv によって Resource と Workload Group の使用を制御する
機密フィールドの保護(電話番号や ID 番号など)カラムレベルの Select_priv を使用するか、データアクセス制御と組み合わせて行レベルのポリシーを設定する

基本概念​

Doris の認可は、次の三つの主要な要素で構成されます。

  • 権限(Privilege):特定のリソースオブジェクトに対する操作の許可です(読み取り、書き込み、変更など)。
  • ロール(Role):ユーザーに付与できる権限の集合です。
  • ユーザー(User):操作を実行する主体で、user_name と host によって一意に識別されます。

権限​

権限の対象には、ノード、Catalog、データベース、テーブル、カラム、Resource、Workload Group があります。権限の種類によって、許可される操作が異なります。

すべての権限項目​

権限オブジェクトの種類説明
Admin_privGlobalスーパー管理者権限。
Node_privGlobalノードの変更権限。FE、BE、BROKER ノードの追加、削除、廃止などの操作を含みます。
Grant_privGlobal、Catalog、Db、Table、Resource、Workload Group権限の変更権限。権限の付与と取り消し、ユーザーやロールの追加、削除、変更などの操作を許可します。
ほかのユーザーやロールに権限を付与する場合、バージョン 2.1.2 より前は、現在のユーザーが該当するレベルの Grant_priv を持っていれば十分です。バージョン 2.1.2 以降は、付与対象のリソースに対する、その権限も持っている必要があります。
ほかのユーザーにロールを割り当てる場合、現在のユーザーは Global レベルの Grant_priv を持っている必要があります。
Select_privGlobal、Catalog、Db、Table、ColumnCatalog、データベース、テーブル、カラムに対する読み取り専用権限。
Load_privGlobal、Catalog、Db、TableCatalog、データベース、テーブルに対する書き込み権限。Load、Insert、Delete などを含みます。
Alter_privGlobal、Catalog、Db、TableCatalog、データベース、テーブルに対する変更権限。データベースやテーブルの名前変更、カラムの追加・削除・変更、パーティションの追加・削除を含みます。
Create_privGlobal、Catalog、Db、TableCatalog、データベース、テーブル、ビューを作成する権限。
Drop_privGlobal、Catalog、Db、TableCatalog、データベース、テーブル、ビューを削除する権限。
Usage_privResource、Workload GroupResource と Workload Group を使用する権限。
Show_view_privGlobal、Catalog、Db、TableSHOW CREATE VIEW を実行する権限。

権限レベル​

同じ権限を異なるレベルで付与できます。GRANT 文で指定するリソースパスによって、権限の適用範囲が決まります。

レベル付与パスの例適用範囲
GlobalGRANT ... ON *.*.* TO user1すべての Catalog 内のすべてのデータベースまたはテーブル
CatalogGRANT ... ON ctl.*.* TO user1指定した Catalog 内のすべてのデータベースまたはテーブル
DatabaseGRANT ... ON ctl.db.* TO user1指定したデータベース内のすべてのテーブル
TableGRANT ... ON ctl.db.tbl TO user1指定したテーブル内のすべてのカラム
ColumnGRANT Select_priv(col1,col2) ON ctl.db.tbl TO user1指定したテーブルの指定したカラム。現在、カラム権限でサポートされるのは Select_priv のみです。
Rowポリシーに基づいて定義します。データアクセス制御を参照ユーザーがアクセスできるデータ行を制御します。
ResourceGRANT USAGE_PRIV ON RESOURCE '%' TO user1Resource の使用。Usage_priv と Grant_priv のみをサポートします。
Workload GroupGRANT USAGE_PRIV ON WORKLOAD GROUP '%' TO user1Workload Group の使用。Usage_priv と Grant_priv のみをサポートします。
ヒント

Admin_priv の付与と取り消しは、Global レベルでのみ行えます。

ロール​

ロールは権限の集合です。ユーザーにロールを割り当てると、そのロールのすべての権限を自動的に継承します。その後、ロールの権限を変更した場合も、そのロールを持つすべてのユーザーに変更が反映されます。

組み込みロール​

Doris はデフォルトで次の二つの組み込みロールを作成します。

組み込みロールデフォルトの権限主な用途
operatorAdmin_priv + Node_privクラスター運用、ノードの変更
adminAdmin_priv業務管理、データ管理

カスタムロール​

CREATE ROLE で名前付きロールを作成し、よく使う権限をまとめて複数のユーザーに付与できます。これにより、権限の一元管理と取り消しが容易になります。

ユーザー​

Doris では、user_identity によってユーザーを一意に識別します。user_identity は次の二つの部分で構成されます。

  • user_name:ユーザー名。
  • host:ユーザークライアントの接続元ホストアドレス。

認可の仕組み​

Doris の権限システムは RBAC モデルに基づいています。ユーザーはロールに、ロールは権限に関連付けられます。ユーザーはロールを通じて間接的に権限を持ちます。

┌────────┐        ┌────────┐         ┌────────┐
│ user1 ├────┬───► role1 ├────┬────► priv1 │
└────────┘ │ └────────┘ │ └────────┘
│ │
│ │
│ ┌────────┐ │
│ │ role2 ├────┤
┌────────┐ │ └────────┘ │ ┌────────┐
│ user2 ├────┘ │ ┌─► priv2 │
└────────┘ │ │ └────────┘
┌────────┐ │ │
┌──────► role3 ├────┘ │
│ └────────┘ │
│ │
│ │
┌────────┐ │ ┌────────┐ │ ┌────────┐
│ userN ├─┴──────► roleN ├───────┴─► privN │
└────────┘ └────────┘ └────────┘

上の図が示すとおり、次の関係があります。

  • user1 と user2 が持つ priv1 権限は、どちらも role1 を通じて付与されます。
  • userN が持つ priv1 権限は role3 に由来し、priv2 と privN の権限は roleN に由来します。したがって、userN は priv1、priv2、privN の権限を同時に持ちます。

権限の継承と取り消しのルール​

  • ロールを削除すると、そのロールを持つユーザーは、ロールのすべての権限を自動的に失います。
  • ユーザーからロールの割り当てを解除すると、そのユーザーはロールのすべての権限を自動的に失います。
  • ロールの権限を追加または削除すると、そのロールを持つすべてのユーザーの権限が同時に変わります。

注意事項​

  • Doris では、利便性のためにユーザーへの権限の直接付与をサポートしています。内部実装では、ユーザーごとに専用のデフォルトロールが作成されます。ユーザーに直接権限を付与すると、実際にはそのデフォルトロールに権限が付与されます。
  • デフォルトロールは削除できず、ほかのユーザーに割り当てることもできません。ユーザーを削除すると、そのデフォルトロールも自動的に削除されます。
操作の種類コマンド
権限の付与 / ロールの割り当てGRANT
権限の取り消し / ロールの割り当て解除REVOKE
ロールの作成CREATE ROLE
ロールの削除DROP ROLE
ロールの変更ALTER ROLE
現在のユーザーの権限を表示SHOW GRANTS
すべてのユーザーの権限を表示SHOW ALL GRANTS
作成済みロールを表示SHOW ROLES
サポートされるすべての権限項目を表示SHOW PRIVILEGES

ベストプラクティス​

以下に、Doris の権限システムを使用する代表的な二つのシナリオを示します。

シナリオ 1:単一業務のクラスターでロールに基づいて職務を分ける​

Doris クラスターのユーザーを、管理者(Admin)、開発エンジニア(RD)、クライアント(Client)に分けます。

  • 管理者:クラスター全体のすべての権限を持ち、クラスターのセットアップやノード管理などを担当します。
  • 開発エンジニア(RD):データベースやテーブルの作成、データのロードと変更など、業務のモデリングを担当します。
  • クライアント:各種データベースやテーブルにアクセスし、データを取得します。

推奨する権限付与の計画は次のとおりです。

  • 管理者:Admin_priv または Global レベルの Grant_priv を付与します。
  • RD:任意または指定したデータベースやテーブルに Create_priv、Drop_priv、Alter_priv、Load_priv、Select_priv を付与します。
  • クライアント:任意または指定したデータベースやテーブルに Select_priv を付与します。

複数のユーザーにまとめて権限を付与するには、異なるロールを作成すると管理が容易になります。

シナリオ 2:複数業務のクラスターで管理を委任する​

単一のクラスターで複数の業務を運用します。各業務は一つ以上のデータベースを使用し、それぞれのユーザーを管理する必要があります。

推奨する権限付与の計画:管理者は業務ごとのデータベースに対して「業務管理者」ユーザーを作成し、対応するデータベースに対するデータベースレベルの Grant_priv をそのユーザーに付与します。このユーザーは、権限を与えられたデータベースの範囲内でのみ、ほかのユーザーに権限を付与できます。これにより、業務間で権限を分離し、それぞれが自分のユーザーを管理できます。