メインコンテンツまでスキップ

Manage user privileges

ユーザ権限の管理

このトピックでは、StarRocksでユーザ、ロール、および権限を管理する方法について説明します。

StarRocksは、StarRocksクラスタ内でのさまざまなグラニュールレベルでクラスタ管理者が簡単に特権を制限できるようにするために、ロールベースのアクセス制御(RBAC)とアイデンティティベースのアクセス制御(IBAC)の両方を使用します。

StarRocksクラスタ内では、ユーザまたはロールに特権を付与できます。ロールは、クラスタ内の他のユーザやロールに必要に応じて割り当てることができる特権のコレクションです。ユーザには1つ以上のロールが付与されることができ、これらのロールによって異なるオブジェクト上での権限が決定されます。

ユーザとロールの情報の表示

システム定義のuser_adminロールを持つユーザは、StarRocksクラスタ内のすべてのユーザおよびロール情報を表示することができます。

権限情報の表示

SHOW GRANTSを使用して、ユーザまたはロールに付与された特権を表示することができます。

  • 現在のユーザの特権を表示する。

    SHOW GRANTS;

    注意

    特権を持たないユーザでも、自分自身の特権を表示することができます。

  • 特定のユーザの特権を表示する。次の例は、ユーザjackの特権を表示しています:

    SHOW GRANTS FOR jack@'172.10.1.10';
  • 特定のロールの特権を表示する。次の例は、ロールexample_roleの特権を表示しています:

    SHOW GRANTS FOR ROLE example_role;

ユーザのプロパティの表示

SHOW PROPERTYを使用して、ユーザのプロパティを表示することができます。

次の例は、ユーザjackのプロパティを表示しています:

SHOW PROPERTY FOR jack@'172.10.1.10';

ロールの表示

SHOW ROLESを使用して、StarRocksクラスタ内のすべてのロールを表示することができます。

SHOW ROLES;

ユーザの表示

SHOW USERSを使用して、StarRocksクラスタ内のすべてのユーザを表示することができます。

SHOW USERS;

ユーザの管理

システム定義のuser_adminロールを持つユーザは、StarRocksでユーザを作成、変更、および削除することができます。

ユーザの作成

ユーザのアイデンティティ、認証方法、およびデフォルトのロールを指定して、ユーザを作成することができます。

StarRocksは、ログイン資格情報またはLDAP認証によるユーザ認証をサポートしています。StarRocksの認証についての詳細は、「認証」を参照してください。ユーザの作成に関する詳細な情報と詳細な手順については、「CREATE USER」を参照してください。

次の例では、ユーザjackを作成し、IPアドレス172.10.1.10からの接続のみを許可し、パスワードを12345に設定し、デフォルトのロールとしてexample_roleを割り当てます:

CREATE USER jack@'172.10.1.10' IDENTIFIED BY '12345' DEFAULT ROLE 'example_role';

注意

  • StarRocksは、ユーザのパスワードを保存する前に暗号化します。パスワードを取得するには、password()関数を使用できます。
  • ユーザの作成時にデフォルトのロールが指定されていない場合、システム定義のデフォルトロールPUBLICがユーザに割り当てられます。

ユーザの変更

ユーザのパスワード、デフォルトのロール、またはプロパティを変更することができます。

ユーザのデフォルトのロールは、ユーザがStarRocksに接続すると自動的にアクティブ化されます。接続後にユーザのすべての(デフォルトおよび付与された)ロールを有効にする方法については、「すべてのロールの有効化」を参照してください。

ユーザのデフォルトのロールの変更

SET DEFAULT ROLEまたはALTER USERを使用して、ユーザのデフォルトのロールを設定することができます。

次の例は、jackのデフォルトのロールをdb1_adminに設定しています。db1_adminは、jackに割り当てられている必要があります。

  • SET DEFAULT ROLEを使用してデフォルトのロールを設定する場合:

    SET DEFAULT ROLE 'db1_admin' TO jack@'172.10.1.10';
  • ALTER USERを使用してデフォルトのロールを設定する場合:

    ALTER USER jack@'172.10.1.10' DEFAULT ROLE 'db1_admin';

ユーザのプロパティの変更

SET PROPERTYを使用して、ユーザのプロパティを設定することができます。

次の例では、ユーザjackの最大接続数を1000に設定しています。ユーザ名が同じユーザIDでは同じプロパティを共有するため、jackのプロパティの設定のみを行えば、ユーザ名がjackであるすべてのユーザIDに対してこの設定が有効になります。

SET PROPERTY FOR jack 'max_user_connections' = '1000';

ユーザのパスワードのリセット

SET PASSWORDまたはALTER USERを使用して、ユーザのパスワードをリセットすることができます。

注意

  • 特権を持たないユーザでも、自分自身のパスワードをリセットすることができます。
  • rootユーザ自体のパスワードは、rootユーザ自身のみが設定できます。パスワードを失った場合でStarRocksに接続できない場合は、詳細な手順については、「失われたrootパスワードのリセット」を参照してください。

次の例は、jackのパスワードを54321にリセットしています:

  • SET PASSWORDを使用してパスワードをリセットする場合:

    SET PASSWORD FOR jack@'172.10.1.10' = PASSWORD('54321');
  • ALTER USERを使用してパスワードをリセットする場合:

    ALTER USER jack@'172.10.1.10' IDENTIFIED BY '54321';

失われたrootパスワードのリセット

rootユーザのパスワードを失った場合でStarRocksに接続できない場合は、次の手順に従ってパスワードをリセットできます:

  1. 以下の構成項目をすべてのFEノードfe/conf/fe.conf設定ファイルに追加して、ユーザ認証を無効にします:

    enable_auth_check = false
  2. 構成が有効になるように、すべてのFEノードを再起動します。

    ./fe/bin/stop_fe.sh
    ./fe/bin/start_fe.sh
  3. MySQLクライアントからrootユーザ経由でStarRocksに接続します。ユーザの認証が無効化されているため、パスワードを指定する必要はありません。

    mysql -h <fe_ip_or_fqdn> -P<fe_query_port> -uroot
  4. rootユーザのパスワードをリセットします。

    SET PASSWORD for root = PASSWORD('xxxxxx');
  5. すべてのFEノードfe/conf/fe.conf設定ファイルで、ユーザ認証を有効にするために、構成項目enable_auth_checktrueに設定します。

    enable_auth_check = true
  6. 構成が有効になるように、すべてのFEノードを再起動します。

    ./fe/bin/stop_fe.sh
    ./fe/bin/start_fe.sh
  7. rootユーザと新しいパスワードを使用して、MySQLクライアントからStarRocksに接続し、パスワードが正常にリセットされたかどうかを確認します。

    mysql -h <fe_ip_or_fqdn> -P<fe_query_port> -uroot -p<xxxxxx>

ユーザの削除

DROP USERを使用して、ユーザを削除することができます。

次の例は、ユーザjackを削除しています:

DROP USER jack@'172.10.1.10';

ロールの管理

システム定義のuser_adminロールを持つユーザは、StarRocksでロールを作成、付与、取り消し、または削除することができます。

ロールの作成

CREATE ROLEを使用して、ロールを作成することができます。

次の例は、ロールexample_roleを作成しています:

CREATE ROLE example_role;

ロールの付与

GRANTを使用して、ユーザまたは他のロールにロールを付与することができます。

  • ユーザにロールを付与する。次の例は、ユーザjackにロールexample_roleを付与しています:

    GRANT example_role TO USER jack@'172.10.1.10';
  • 他のロールにロールを付与する。次の例は、ロールexample_roleをロールtest_roleに付与しています:

    GRANT example_role TO ROLE test_role;

ロールの取り消し

REVOKEを使用して、ユーザまたは他のロールからロールを取り消すことができます。

注意

システム定義のデフォルトロールPUBLICは、ユーザから取り消すことはできません。

  • ユーザからロールを取り消す。次の例は、ユーザjackからロールexample_roleを取り消しています:

    REVOKE example_role FROM USER jack@'172.10.1.10';
  • 他のロールからロールを取り消す。次の例は、ロールexample_roleからロールtest_roleを取り消しています:

    REVOKE example_role FROM ROLE test_role;

ロールの削除

DROP ROLEを使用して、ロールを削除することができます。

次の例は、ロールexample_roleを削除しています:

DROP ROLE example_role;

注意

システム定義のロールは削除できません。

すべてのロールの有効化

ユーザのデフォルトのロールは、ユーザがStarRocksクラスタに接続するたびに自動的にアクティブ化されるロールです。

すべてのStarRocksユーザがStarRocksクラスタに接続する際にすべてのロール(デフォルトおよび付与されたロール)を有効にしたい場合は、次の操作を実行できます。

この操作には、システム特権OPERATEが必要です。

SET GLOBAL activate_all_roles_on_login = TRUE;

また、SET ROLEを使用して、自分に割り当てられたロールを有効にすることもできます。たとえば、ユーザjack@'172.10.1.10'にはdb_adminuser_adminのロールがありますが、これらはユーザのデフォルトのロールではなく、ユーザがStarRocksに接続したときに自動的にアクティブ化されません。jack@'172.10.1.10'がdb_adminuser_adminをアクティブ化する必要がある場合は、SET ROLE db_admin, user_admin;を実行できます。SET ROLEは元のロールを上書きします。すべてのロールを有効にする場合は、SET ROLE ALLを実行してください。

特権の管理

システム定義のuser_adminロールを持つユーザは、StarRocksで特権を付与または取り消すことができます。

特権の付与

GRANTを使用して、ユーザまたはロールに特権を付与することができます。

  • ユーザに特権を付与する。次の例では、ユーザjackにテーブルsr_memberのSELECT特権を付与し、他のユーザやロールにもこの特権を付与できるようにしています(SQLでWITH GRANT OPTIONを指定):

    GRANT SELECT ON TABLE sr_member TO USER jack@'172.10.1.10' WITH GRANT OPTION;
  • ロールに特権を付与する。次の例では、テーブルsr_memberのSELECT特権をロールexample_roleに付与しています:

    GRANT SELECT ON TABLE sr_member TO ROLE example_role;

特権の取り消し

REVOKEを使用して、ユーザまたはロールから特権を取り消すことができます。

  • ユーザから特権を取り消す。次の例では、ユーザjackからテーブルsr_memberのSELECT特権を取り消し、他のユーザやロールにはこの特権を付与できなくなります):

    REVOKE SELECT ON TABLE sr_member FROM USER jack@'172.10.1.10';
  • ロールから特権を取り消す。次の例では、ロールexample_roleからテーブルsr_memberのSELECT特権を取り消しています:

    REVOKE SELECT ON TABLE sr_member FROM ROLE example_role;

ベストプラクティス

マルチサービスアクセス制御

通常、企業が所有するStarRocksクラスタは、単一のサービスプロバイダによって管理され、複数の業務線(LOB)を維持しています。各業務線は1つ以上のデータベースを使用します。

以下に示すように、StarRocksクラスタのユーザは、サービスプロバイダと2つのLOB(AとB)のメンバーで構成されています。各LOBは、分析者と幹部の2つの役割で運営されます。アナリストはビジネスステートメントを作成および分析し、幹部はステートメントをクエリします。

ユーザ権限

LOB Aは、データベースDB_Aを独自に管理し、LOB BはデータベースDB_Bを管理します。LOB AとLOB Bは、DB_Cの異なるテーブルを使用します。DB_PUBLICは両LOBのすべてのメンバーからアクセスできます。

ユーザ権限

異なるメンバーが異なるデータベースおよびテーブルで異なる操作を実行するため、サービスとポジションに応じて役割を作成し、各役割に必要な特権のみを適用し、それらの役割を対応するメンバーに割り当てることをお勧めします。以下に示します:

ユーザ権限
  1. クラスタの管理者にシステム定義のdb_adminuser_admin、およびcluster_adminロールを割り当て、db_adminおよびuser_adminをデフォルトのロールとして日常的なメンテナンスに使用し、cluster_adminのロールを操作する必要がある場合にのみ手動でアクティブ化します。例:

    GRANT db_admin, user_admin, cluster_admin TO USER user_platform;
    ALTER USER user_platform DEFAULT ROLE db_admin, user_admin;
  2. 各LOB内の各メンバーに対してユーザを作成し、各ユーザに複雑なパスワードを設定します。

  3. 各LOB内の各ポジションにロールを作成し、対応する特権を各ロールに適用します。各LOBのディレクターに対しては、LOBが必要とする最大限の特権を付与し、(SQLでWITH GRANT OPTIONを指定して)これらの特権をLOBのメンバーに割り当てる権限も付与します。彼らの日常業務に必要な場合は、ロールをデフォルトのロールに設定します。例:

    GRANT SELECT, ALTER, INSERT, UPDATE, DELETE ON ALL TABLES IN DATABASE DB_A TO ROLE linea_admin WITH GRANT OPTION;
    GRANT SELECT, ALTER, INSERT, UPDATE, DELETE ON TABLE TABLE_C1, TABLE_C2, TABLE_C3 TO ROLE linea_admin WITH GRANT OPTION;
    GRANT linea_admin TO USER user_linea_admin;
    ALTER USER user_linea_admin DEFAULT ROLE linea_admin;

    アナリストと幹部の場合、対応する特権を持つロールを割り当てます。例:

    GRANT SELECT ON ALL TABLES IN DATABASE DB_A TO ROLE linea_query;
    GRANT SELECT ON TABLE TABLE_C1, TABLE_C2, TABLE_C3 TO ROLE linea_query;
    GRANT linea_query TO USER user_linea_salesa;
    GRANT linea_query TO USER user_linea_salesb;
    ALTER USER user_linea_salesa DEFAULT ROLE linea_query;
    ALTER USER user_linea_salesb DEFAULT ROLE linea_query;
  4. 全てのクラスタユーザがアクセスできるデータベースDB_PUBLICに対して、システム定義のpublicロールにSELECTの特権を付与します。例:

    GRANT SELECT ON ALL TABLES IN DATABASE DB_PUBLIC TO ROLE public;

複雑なシナリオでは、役割継承を行い、他のユーザに役割を割り当てることで、役割を他の役割に引き継ぐことができます。

たとえば、アナリストがDB_PUBLICのテーブルに書き込みとクエリの特権を必要とし、幹部はこれらのテーブルにクエリするだけで十分である場合、役割public_analysispublic_salesを作成し、関連する特権を適用し、これらをアナリストと幹部の元の役割に割り当てます。

例:

CREATE ROLE public_analysis;
CREATE ROLE public_sales;
GRANT SELECT, ALTER, INSERT, UPDATE, DELETE ON ALL TABLES IN DATABASE DB_PUBLIC TO ROLE public_analysis;
GRANT SELECT ON ALL TABLES IN DATABASE DB_PUBLIC TO ROLE public_sales;
GRANT public_analysis TO ROLE linea_analysis;
GRANT public_analysis TO ROLE lineb_analysis;
GRANT public_sales TO ROLE linea_query;
GRANT public_sales TO ROLE lineb_query;

シナリオに基づいた役割のカスタマイズ

特権とユーザの管理に役立つため、シナリオに基づいて役割をカスタマイズすることをお勧めします。以下に、いくつかの一般的なシナリオに対する特権の組み合わせを分類したいくつかの例を示します。

  1. StarRocksテーブルにグローバルな読み取り専用特権を付与する:

    -- 役割の作成
    CREATE ROLE read_only;
    -- 役割に対して全カタログのUSAGE特権を付与する
    GRANT USAGE ON ALL CATALOGS TO ROLE read_only;
    -- 役割に対して全テーブルのSELECT特権を付与する
    GRANT SELECT ON ALL TABLES IN ALL DATABASES TO ROLE read_only;
    -- 役割に対して全ビューのSELECT特権を付与する
    GRANT SELECT ON ALL VIEWS IN ALL DATABASES TO ROLE read_only;
    -- 役割に対して全マテリアライズドビューのSELECT特権とそれらを使用してクエリを高速化する特権を付与する
    GRANT SELECT ON ALL MATERIALIZED VIEWS IN ALL DATABASES TO ROLE read_only;

    クエリでUDFを使用するための特権もさらに付与できます:

    -- 全データベースレベルのUDFに対するUSAGE特権を役割に付与する
    GRANT USAGE ON ALL FUNCTIONS IN ALL DATABASES TO ROLE read_only;
    -- グローバルUDFに対するUSAGE特権を役割に付与する
    GRANT USAGE ON ALL GLOBAL FUNCTIONS TO ROLE read_only;
  2. StarRocksテーブルにグローバルな書き込み特権を付与する:

    -- 役割の作成
    CREATE ROLE write_only;
    -- カタログ全体のUSAGE特権を役割に付与する
    GRANT USAGE ON ALL CATALOGS TO ROLE write_only;
    -- カタログ全体のテーブルに対するINSERTおよびUPDATE特権を役割に付与する
    GRANT INSERT, UPDATE ON ALL TABLES IN ALL DATABASES TO ROLE write_only;
    -- カタログ全体のマテリアライズドビューのREFRESH特権を役割に付与する
    GRANT REFRESH ON ALL MATERIALIZED VIEWS IN ALL DATABASES TO ROLE write_only;
  3. 特定の外部カタログに対する読み取り専用特権を付与する

    -- 役割の作成
    CREATE ROLE read_catalog_only;
    -- 対象のカタログへのUSAGE特権を役割に付与する
    GRANT USAGE ON CATALOG hive_catalog TO ROLE read_catalog_only;
    --対応するカタログに切り替える
    SET CATALOG hive_catalog;
    --すべてのデータベースのすべてのテーブルに対するSELECT特権を付与する
    GRANT SELECT ON ALL TABLES IN ALL DATABASES TO ROLE read_catalog_only;
    GRANT SELECT ON ALL VIEWS IN ALL DATABASES TO ROLE read_catalog_only;

    注: Hiveテーブルのビューのみクエリできます(v3.1以降)。

  4. 特定の外部カタログに対して書き込み専用特権を付与するIcebergテーブルを使用してデータを書き込むことができます(v3.1以降)。

    -- 役割の作成
    CREATE ROLE write_catalog_only;
    -- 対象のカタログへのUSAGE特権を役割に付与する
    GRANT USAGE ON CATALOG iceberg_catalog TO ROLE read_catalog_only;
    --対応するカタログに切り替える
    SET CATALOG iceberg_catalog;
    -- Icebergテーブルにデータを書き込む特権を付与する
    GRANT INSERT ON ALL TABLES IN ALL DATABASES TO ROLE write_catalog_only;
  5. グローバル、データベース、テーブル、およびパーティションレベルでバックアップおよびリストア操作を実行するための特権を付与する。

    • グローバルなバックアップおよびリストア操作の特権を付与する:グローバルなバックアップおよびリストア操作の特権は、SYSTEMレベルのREPOSITORY特権、defaultカタログでのデータベース作成特権、任意のデータベースでのテーブル作成特権、および任意のテーブルでのデータのロードとエクスポート特権が必要です。

      -- 役割の作成
      CREATE ROLE recover;
      -- SYSTEMレベルのREPOSITORY特権を役割に付与する
      GRANT REPOSITORY ON SYSTEM TO ROLE recover;
      -- defaultカタログでのデータベース作成特権を役割に付与する
      GRANT CREATE DATABASE ON CATALOG default_catalog TO ROLE recover;
      -- 任意のデータベースでのテーブル作成特権を役割に付与する
      GRANT CREATE TABLE ON ALL DATABASE TO ROLE recover;
      -- 任意のテーブルでのデータのロードとエクスポート特権を役割に付与する
      GRANT INSERT, EXPORT ON ALL TABLES IN ALL DATABASES TO ROLE recover;
    • データベースレベルのバックアップおよびリストア操作の特権を付与する:データベースレベルのバックアップおよびリストア操作の特権には、SYSTEMレベルのREPOSITORY特権、defaultカタログでのデータベース作成特権、任意のデータベースでのテーブル作成特権、任意のテーブルへのデータのロード特権、およびバックアップ対象のデータベースからのテーブルへのデータのエクスポート特権が必要です。

      -- 役割の作成
      CREATE ROLE recover_db;
      -- SYSTEMレベルのREPOSITORY特権を役割に付与する
      GRANT REPOSITORY ON SYSTEM TO ROLE recover_db;
      -- defaultカタログでのデータベース作成特権を役割に付与する
      GRANT CREATE DATABASE ON CATALOG default_catalog TO ROLE recover_db;
      -- 任意のデータベースでのテーブル作成特権を役割に付与する
      GRANT CREATE TABLE ON ALL DATABASE TO ROLE recover_db;
      -- 任意のテーブルへのデータのロード特権を役割に付与する
      GRANT INSERT ON ALL TABLES IN ALL DATABASES TO ROLE recover_db;
      -- バックアップ対象のデータベースからのテーブルへのデータのエクスポート特権を役割に付与する
      GRANT EXPORT ON ALL TABLES IN DATABASE <db_name> TO ROLE recover_db;
    • テーブルレベルのバックアップおよびリストア操作の特権を付与する:テーブルレベルのバックアップおよびリストア操作の特権には、SYSTEMレベルのREPOSITORY特権、対応するデータベースでのテーブル作成特権、データベース内の任意のテーブルへのデータのロード特権、およびバックアップ対象のテーブルからのデータのエクスポート特権が必要です。

      -- 役割の作成
      CREATE ROLE recover_tbl;
      -- SYSTEMレベルのREPOSITORY特権を役割に付与する
      GRANT REPOSITORY ON SYSTEM TO ROLE recover_tbl;
      -- 対応するデータベースでのテーブル作成特権を役割に付与する
      GRANT CREATE TABLE ON DATABASE <db_name> TO ROLE recover_tbl;
      -- データベース内の任意のテーブルへのデータのロード特権を役割に付与する
      GRANT INSERT ON ALL TABLES IN DATABASE <db_name> TO ROLE recover_db;
      -- バックアップしたいテーブルからのデータのエクスポート特権を役割に付与する
      GRANT EXPORT ON TABLE <table_name> TO ROLE recover_tbl;
    • パーティションレベルのバックアップおよびリストア操作の特権を付与する:パーティションレベルのバックアップおよびリストア操作の特権には、SYSTEMレベルのREPOSITORY特権、および対応するテーブルでのデータのロードとエクスポートの特権が必要です。

      -- 役割の作成
      CREATE ROLE recover_par;
      -- SYSTEMレベルのREPOSITORY特権を役割に付与する
      GRANT REPOSITORY ON SYSTEM TO ROLE recover_par;
      -- 対応するテーブルでのデータのロードとエクスポートの特権を役割に付与する
      GRANT INSERT, EXPORT ON TABLE <tbl_name> TO ROLE recover_par;