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に接続できない場合は、次の手順に従ってパスワードをリセットできます:
-
以下の構成項目をすべてのFEノードのfe/conf/fe.conf設定ファイルに追加して、ユーザ認証を無効にします:
enable_auth_check = false
-
構成が有効になるように、すべてのFEノードを再起動します。
./fe/bin/stop_fe.sh
./fe/bin/start_fe.sh -
MySQLクライアントから
root
ユーザ経由でStarRocksに接続します。ユーザの認証が無効化されているため、パスワードを指定する必要はありません。mysql -h <fe_ip_or_fqdn> -P<fe_query_port> -uroot
-
root
ユーザのパスワードをリセットします。SET PASSWORD for root = PASSWORD('xxxxxx');
-
すべてのFEノードのfe/conf/fe.conf設定ファイルで、ユーザ認証を有効にするために、構成項目
enable_auth_check
をtrue
に設定します。enable_auth_check = true
-
構成が有効になるように、すべてのFEノードを再起動します。
./fe/bin/stop_fe.sh
./fe/bin/start_fe.sh -
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_admin
とuser_admin
のロールがありますが、これらはユーザのデフォルトのロールではなく、ユーザがStarRocksに接続したときに自動的にアクティブ化されません。jack@'172.10.1.10'がdb_admin
とuser_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のすべてのメンバーからアクセスできます。
異なるメンバーが異なるデータベースおよびテーブルで異なる操作を実行するため、サービスとポジションに応じて役割を作成し、各役割に必要な特権のみを適用し、それらの役割を対応するメンバーに割り当てることをお勧めします。以下に示します:
-
クラスタの管理者にシステム定義の
db_admin
、user_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; -
各LOB内の各メンバーに対してユーザを作成し、各ユーザに複雑なパスワードを設定します。
-
各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; -
全てのクラスタユーザがアクセスできるデータベース
DB_PUBLIC
に対して、システム定義のpublic
ロールにSELECTの特権を付与します。例:GRANT SELECT ON ALL TABLES IN DATABASE DB_PUBLIC TO ROLE public;
複雑なシナリオでは、役割継承を行い、他のユーザに役割を割り当てることで、役割を他の役割に引き継ぐことができます。
たとえば、アナリストがDB_PUBLIC
のテーブルに書き込みとクエリの特権を必要とし、幹部はこれらのテーブルにクエリするだけで十分である場合、役割public_analysis
とpublic_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;
シナリオに基づいた役割のカスタマイズ
特権とユーザの管理に役立つため、シナリオに基づいて役割をカスタマイズすることをお勧めします。以下に、いくつかの一般的なシナリオに対する特権の組み合わせを分類したいくつかの例を示します。
-
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; -
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; -
特定の外部カタログに対する読み取り専用特権を付与する
-- 役割の作成
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以降)。
-
特定の外部カタログに対して書き込み専用特権を付与する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; -
グローバル、データベース、テーブル、およびパーティションレベルでバックアップおよびリストア操作を実行するための特権を付与する。
-
グローバルなバックアップおよびリストア操作の特権を付与する:グローバルなバックアップおよびリストア操作の特権は、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;
-