メインコンテンツまでスキップ
バージョン: 3.2

権限の概要

このトピックでは、StarRocks の権限システムの基本概念について説明します。権限は、どのユーザーがどのオブジェクトに対してどの操作を行えるかを決定するため、データとリソースをより細かく安全に管理できます。

注意: このトピックで説明する権限は v3.0 以降でのみ利用可能です。v3.0 の権限フレームワークと構文は、以前のバージョンとは互換性がありません。v3.0 にアップグレードした後、特定の操作に関するものを除いて、元の権限のほとんどは保持されます。詳細な違いについては、[Privileges supported in StarRocks] の Upgrade notes を参照してください。

StarRocks は 2 つの権限モデルを採用しています:

  • ロールベースのアクセス制御 (RBAC): 権限はロールに割り当てられ、そのロールがユーザーに割り当てられます。この場合、権限はロールを通じてユーザーに渡されます。
  • アイデンティティベースのアクセス制御 (IBAC): 権限はユーザーのアイデンティティに直接割り当てられます。

したがって、各ユーザーアイデンティティの最大権限範囲は、そのユーザーアイデンティティに割り当てられたロールの権限と自身の権限の和集合です。

StarRocks の権限システムを理解するための基本概念:

  • オブジェクト: アクセスを許可できるエンティティ。許可されていない限り、アクセスは拒否されます。オブジェクトの例としては、CATALOG、DATABASE、TABLE、VIEW などがあります。詳細については、Privileges supported in StarRocks を参照してください。
  • 権限: オブジェクトへのアクセスの定義されたレベル。複数の権限を使用して、オブジェクトに対して許可されるアクセスの粒度を制御できます。権限はオブジェクト固有です。異なるオブジェクトには異なる権限がある場合があります。権限の例としては、SELECT、ALTER、DROP などがあります。
  • ユーザーアイデンティティ: ユーザーの一意のアイデンティティであり、権限を付与できるエンティティでもあります。ユーザーアイデンティティは username@'userhost' として表され、ユーザー名とユーザーがログインする IP で構成されます。アイデンティティを使用すると、属性の設定が簡素化されます。同じユーザー名を共有するユーザーアイデンティティは同じ属性を共有します。ユーザー名に属性を設定すると、そのユーザー名を共有するすべてのユーザーアイデンティティにその属性が適用されます。
  • ロール: 権限を付与できるエンティティ。ロールは権限の抽象的な集合です。ロールはユーザーに割り当てることができ、他のロールにも割り当てることができ、ロール階層を作成します。データ管理を容易にするために、StarRocks はシステム定義のロールを提供します。ビジネス要件に応じてカスタムロールを作成することもできます。

以下の図は、RBAC および IBAC 権限モデルの下での権限管理の例を示しています。

モデルでは、オブジェクトへのアクセスは、ロールとユーザーに割り当てられた権限を通じて許可されます。ロールは他のロールまたはユーザーに割り当てられます。

privilege management

オブジェクトと権限

オブジェクトには論理的な階層があり、それが表す概念に関連しています。たとえば、Database は Catalog に含まれ、Table、View、マテリアライズドビュー、Function は Database に含まれます。以下の図は、StarRocks システム内のオブジェクト階層を示しています。

privilege objects

各オブジェクトには、付与可能な権限項目のセットがあります。これらの権限は、これらのオブジェクトに対して実行できる操作を定義します。権限は GRANT および REVOKE コマンドを通じてロールまたはユーザーに付与および取り消すことができます。

ユーザー

ユーザーアイデンティティ

StarRocks では、各ユーザーは一意のユーザー ID によって識別されます。それは IP アドレス (ユーザーホスト) とユーザー名で構成され、形式は username @'userhost' です。StarRocks は、異なる IP アドレスからの同じユーザー名を持つユーザーを異なるユーザーアイデンティティとして識別します。たとえば、user1@'starrocks.com'user1@'mirrorship.com' は 2 つのユーザーアイデンティティです。

ユーザーアイデンティティの別の表現は username @['domain'] であり、domain は DNS によって IP アドレスのセットとして解決できるドメイン名です。username @['domain'] は最終的に username@'userhost' のセットとして表されます。userhost 部分には % を使用してあいまいな一致を行うことができます。userhost が指定されていない場合、デフォルトで '%' となり、任意のホストからログインした同じ名前のユーザーを意味します。

ユーザーへの権限の付与

ユーザーは権限を付与できるエンティティです。権限とロールの両方をユーザーに割り当てることができます。各ユーザーアイデンティティの最大権限範囲は、そのユーザーアイデンティティに割り当てられたロールの権限と自身の権限の和集合です。StarRocks は、各ユーザーが許可された操作のみを実行できるようにします。

ほとんどの場合、権限を渡すためにロールを使用することをお勧めします。たとえば、ロールを作成した後、そのロールに権限を付与し、そのロールをユーザーに割り当てることができます。 一時的または特別な権限を付与したい場合は、直接ユーザーに付与することができます。これにより、権限管理が簡素化され、柔軟性が向上します。

ロール

ロールは、権限を付与および取り消すことができるエンティティです。ロールは、必要な操作をユーザーに許可するために割り当てることができる権限の集合と見なすことができます。ユーザーは複数のロールを割り当てられることができ、異なる権限セットを使用して異なる操作を実行できます。管理を簡素化するために、StarRocks はロールを通じて権限を管理することを推奨します。特別な権限や一時的な権限は、直接ユーザーに付与することができます。

管理を容易にするために、StarRocks は特定の権限を持ついくつかのシステム定義のロールを提供しており、日常の管理と保守の要件を満たすのに役立ちます。また、特定のビジネスニーズやセキュリティニーズを満たすために、柔軟にカスタムロールを作成することもできます。システム定義のロールの権限範囲は変更できないことに注意してください。

ロールがアクティブ化されると、ユーザーはそのロールによって許可された操作を実行できます。デフォルトロールを設定することで、ユーザーがログインしたときに自動的にアクティブ化されます。ユーザーは、現在のセッションで使用されるロールを手動でアクティブ化することもできます。

システム定義のロール

StarRocks はいくつかのタイプのシステム定義のロールを提供しています。

roles

  • root: グローバル権限を持っています。デフォルトで、root ユーザーは root ロールを持っています。 StarRocks クラスターが作成されると、システムは自動的に root 権限を持つ root ユーザーを生成します。root ユーザーとロールはシステムのすべての権限を持っているため、新しいユーザーとロールを作成して、リスクのある操作を防ぐことをお勧めします。root ユーザーのパスワードを適切に管理してください。

  • cluster_admin: ノードの追加や削除など、ノード関連の操作を行うためのクラスター管理権限を持っています。 cluster_admin はクラスターのノードを追加、削除、退役させる権限を持っています。予期しないノードの変更を防ぐために、cluster_admin またはこのロールを含むカスタムロールをデフォルトロールとしてユーザーに割り当てないことをお勧めします。

  • db_admin: カタログ、データベース、テーブル、ビュー、マテリアライズドビュー、関数、グローバル関数、リソースグループ、プラグインに対してすべての操作を行う権限を含むデータベース管理権限を持っています。

  • user_admin: ユーザーとロールに対する管理権限を持ち、ユーザー、ロール、権限を作成する権限を含みます。

    上記のシステム定義のロールは、複雑なデータベース権限を集約して日常の管理を容易にするために設計されています。上記のロールの権限範囲は変更できません。

    さらに、すべてのユーザーに特定の権限を付与する必要がある場合、StarRocks はシステム定義のロール public も提供しています。

  • public: このロールはすべてのユーザーが所有し、新しいユーザーを含むすべてのセッションでデフォルトでアクティブ化されます。public ロールにはデフォルトで権限がありません。このロールの権限範囲を変更することができます。

カスタムロール

特定のビジネス要件を満たすためにカスタムロールを作成し、その権限範囲を変更することができます。同時に、管理の便宜のために、ロールを他のロールに割り当てて権限階層と継承を作成することができます。これにより、ロールに関連付けられた権限が別のロールに継承されます。

ロール階層と権限継承

以下の図は、権限継承の例を示しています。

注意: ロールの継承レベルの最大数はデフォルトで 16 です。継承関係は双方向にすることはできません。

role inheritance

図に示されているように:

  • role_srole_p に割り当てられています。role_prole_spriv_1 を暗黙的に継承します。
  • role_prole_g に割り当てられ、role_grole_ppriv_2role_spriv_1 を暗黙的に継承します。
  • ロールがユーザーに割り当てられると、そのユーザーもこのロールの権限を持ちます。

アクティブロール

アクティブロールは、ユーザーが現在のセッションでロールの権限を適用できるようにします。現在のセッションでアクティブなロールを表示するには SELECT CURRENT_ROLE(); を使用できます。詳細については、current_role を参照してください。

デフォルトロール

デフォルトロールは、ユーザーがクラスターにログインしたときに自動的にアクティブ化されます。これは、1 人以上のユーザーが所有するロールである可能性があります。管理者は CREATE USERDEFAULT ROLE キーワードを使用してデフォルトロールを設定し、ALTER USER を使用してデフォルトロールを変更できます。

ユーザーは SET DEFAULT ROLE を使用してデフォルトロールを変更することもできます。

デフォルトロールは、ユーザーに基本的な権限保護を提供します。たとえば、ユーザー A は role_queryrole_delete を持ち、それぞれクエリと削除の権限を持っています。DELETETRUNCATE などの高リスク操作によるデータ損失を防ぐために、デフォルトロールとして role_query のみを使用することをお勧めします。これらの操作を実行する必要がある場合は、アクティブロールを手動で設定した後に実行できます。

デフォルトロールを持たないユーザーは、public ロールを持っており、ユーザーがクラスターにログインした後に自動的にアクティブ化されます。

ロールを手動でアクティブ化

デフォルトロールに加えて、ユーザーはセッション内で 1 つ以上の既存のロールを手動でアクティブ化することもできます。SHOW GRANTS を使用してアクティブ化可能な権限とロールを表示し、SET ROLE を使用して現在のセッションで有効なアクティブロールを設定できます。

SET ROLE コマンドは互いに上書きされることに注意してください。たとえば、ユーザーがログインした後、default_role がデフォルトでアクティブ化されます。その後、ユーザーが SET ROLE role_s を実行します。この時点で、ユーザーは role_s の権限と自身の権限のみを持ちます。default_role は上書きされます。

参考文献