ユーザー権限の管理
このトピックでは、StarRocks におけるユーザー、ロール、および権限の管理方法について説明します。
StarRocks は、ロールベースのアクセス制御 (RBAC) とアイデンティティベースのアクセス制御 (IBAC) の両方を使用して StarRocks クラスター内の権限を管理し、クラスター管理者が異なる粒度レベルでクラスター内の権限を簡単に制限できるようにします。
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';
ロールを表示
StarRocks クラスター内のすべてのロールを SHOW ROLES を使用して表示できます。
SHOW ROLES;
ユーザーを表示
StarRocks クラスター内のすべてのユーザーを SHOW USERS を使用して表示できます。
SHOW USERS;
ユーザーの管理
システム定義のロール user_admin
を持つユーザーは、StarRocks でユーザーを作成、変更、削除できます。
ユーザーの作成
ユーザーのアイデンティティ、認証方法、およびデフォルトのロールを指定してユーザーを作成できます。
StarRocks は、ログイン資格情報または LDAP 認証によるユーザー認証をサポートしています。StarRocks の認証についての詳細は、Authentication を参照してください。ユーザーの作成に関する詳細および高度な指示については、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
に設定します。同じユーザー名を持つユーザーアイデンティティは同じプロパティを共有します。
したがって、jack
のプロパティを設定するだけで、この設定はユーザー名 jack
を持つすべてのユーザーアイデンティティに適用されます。
SET PROPERTY FOR jack 'max_user_connections' = '1000';
ユーザーのパスワードをリセット
ユーザーのパスワードを SET PASSWORD または ALTER USER を使用してリセットできます。
注意
- すべてのユーザーは、自分のパスワードをリセットできます。
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/conf/fe.conf の すべての FE ノード において、構成項目
enable_auth_check
をtrue
に設定してユーザー認証を再度有効にします。enable_auth_check = true
-
構成を有効にするために すべての 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 -p<xxxxxx>
ユーザーの削除
ユーザーを DROP USER を使用して削除できます。
以下の例は、ユーザー jack
を削除します。
DROP USER jack@'172.10.1.10';
ロールの管理
システム定義のロール user_admin
を持つユーザーは、StarRocks でロールを作成、付与、取り消し、削除できます。
ロールの作成
ロールを CREATE ROLE を使用して作成できます。デフォルトでは、ユーザーは最大 64 のロールを持つことができます。この設定は、FE 動的パラメータ privilege_max_total_roles_per_user
を使用して調整できます。ロールは最大 16 の継承レベルを持つことができます。この設定は、FE 動的パラメータ privilege_max_role_depth
を使用して調整できます。
以下の例は、ロール example_role
を作成します。
CREATE ROLE example_role;
ロールの付与
ロールをユーザーまたは他のロールに GRANT を使用して付与できます。
-
ユーザーにロールを付与。
以下の例は、ロール
example_role
をユーザーjack
に付与します。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';
-
他のロールからロールを取り消す。
以下の例は、ロール
test_role
からロールexample_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 を使用して付与できます。
-
ユーザーに権限を付与。
以下の例は、テーブル
sr_member
に対する SELECT 権限をユーザーjack
に付与し、jack
がこの権限を他のユーザーやロールに付与できるようにします(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 を使用して取り消すことができます。
-
ユーザーから権限を取り消す。
以下の例は、テーブル
sr_member
に対する SELECT 権限をユーザーjack
から取り消し、jack
がこの権限を他のユーザーやロールに付与できないようにします。REVOKE SELECT ON TABLE sr_member FROM USER jack@'172.10.1.10';
-
ロールから権限を取り消す。
以下の例は、テーブル
sr_member
に対する SELECT 権限をロールexample_role
から取り消します。REVOKE SELECT ON TABLE sr_member FROM ROLE example_role;
ベストプラクティス
複数サービスのアクセス制御
通常、企業所有の StarRocks クラスターは単一のサービスプロバイダーによって管理され、複数の事業部門 (LOB) を維持しています。それぞれの 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 が必要とする最大の権限コレクションと対応する GRANT 権限(ステートメントで 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
にDB_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;
シナリオに基づいたロールのカスタマイズ
We recommend you customize roles to manage privileges and users. The following examples classify a few combinations of privileges for some common scenarios.
Grant global read-only privileges on StarRocks tables
-- Create a role.
CREATE ROLE read_only;
-- Grant the USAGE privilege on all catalogs to the role.
GRANT USAGE ON ALL CATALOGS TO ROLE read_only;
-- Grant the privilege to query all tables to the role.
GRANT SELECT ON ALL TABLES IN ALL DATABASES TO ROLE read_only;
-- Grant the privilege to query all views to the role.
GRANT SELECT ON ALL VIEWS IN ALL DATABASES TO ROLE read_only;
-- Grant the privilege to query all materialized views and the privilege to accelerate queries with them to the role.
GRANT SELECT ON ALL MATERIALIZED VIEWS IN ALL DATABASES TO ROLE read_only;
And you can further grant the privilege to use UDFs in queries:
-- Grant the USAGE privilege on all database-level UDF to the role.
GRANT USAGE ON ALL FUNCTIONS IN ALL DATABASES TO ROLE read_only;
-- Grant the USAGE privilege on global UDF to the role.
GRANT USAGE ON ALL GLOBAL FUNCTIONS TO ROLE read_only;
Grant global write privileges on StarRocks tables
-- Create a role.
CREATE ROLE write_only;
-- Grant the USAGE privilege on all catalogs to the role.
GRANT USAGE ON ALL CATALOGS TO ROLE write_only;
-- Grant the INSERT and UPDATE privileges on all tables to the role.
GRANT INSERT, UPDATE ON ALL TABLES IN ALL DATABASES TO ROLE write_only;
-- Grant the REFRESH privilege on all materialized views to the role.
GRANT REFRESH ON ALL MATERIALIZED VIEWS IN ALL DATABASES TO ROLE write_only;
Grant read-only privileges on a specific external catalog
-- Create a role.
CREATE ROLE read_catalog_only;
-- Grant the USAGE privilege on the destination catalog to the role.
GRANT USAGE ON CATALOG hive_catalog TO ROLE read_catalog_only;
-- Switch to the corresponding catalog.
SET CATALOG hive_catalog;
-- Grant the privileges to query all tables and all views in the external catalog.
GRANT SELECT ON ALL TABLES IN ALL DATABASES TO ROLE read_catalog_only;
For views in external catalogs, you can query only Hive table views (since v3.1).
Grant write-only privileges on a specific external catalog
You can only write data into Iceberg tables (since v3.1) and Hive tables (since v3.2).
-- Create a role.
CREATE ROLE write_catalog_only;
-- Grant the USAGE privilege on the destination catalog to the role.
GRANT USAGE ON CATALOG iceberg_catalog TO ROLE read_catalog_only;
-- Switch to the corresponding catalog.
SET CATALOG iceberg_catalog;
-- Grant the privilege to write data into Iceberg tables.
GRANT INSERT ON ALL TABLES IN ALL DATABASES TO ROLE write_catalog_only;
Grant admin privileges on a specific database
-- Create a role.
CREATE ROLE db1_admin;
-- Grant ALL privileges on the destination database to the role. This role can create tables, views, materialized views, and UDFs in this database. And it also can drop or modify this database.
GRANT ALL ON DATABASE db1 TO ROLE db1_admin;
-- Switch to the corresponding catalog.
SET CATALOG iceberg_catalog;
-- Grant all privileges on tables, views, materialized views, and UDFs in this database to the role.
GRANT ALL ON ALL TABLES IN DATABASE db1 TO ROLE db1_admin;
GRANT ALL ON ALL VIEWS IN DATABASE db1 TO ROLE db1_admin;
GRANT ALL ON ALL MATERIALIZED VIEWS IN DATABASE db1 TO ROLE db1_admin;
GRANT ALL ON ALL FUNCTIONS IN DATABASE db1 TO ROLE db1_admin;
Grant privileges to perform backup and restore operations on global, database, table, and partition levels
-
Grant privileges to perform global backup and restore operations:
The privileges to perform global backup and restore operations allow the role to back up and restore any database, table, or partition. It requires the REPOSITORY privilege on the SYSTEM level, the privileges to create databases in the default catalog, to create tables in any database, and to load and export data on any table.
-- Create a role.
CREATE ROLE recover;
-- Grant the REPOSITORY privilege on the SYSTEM level.
GRANT REPOSITORY ON SYSTEM TO ROLE recover;
-- Grant the privilege to create databases in the default catalog.
GRANT CREATE DATABASE ON CATALOG default_catalog TO ROLE recover;
-- Grant the privilege to create tables in any database.
GRANT CREATE TABLE ON ALL DATABASES TO ROLE recover;
-- Grant the privilege to load and export data on any table.
GRANT INSERT, EXPORT ON ALL TABLES IN ALL DATABASES TO ROLE recover; -
Grant the privileges to perform database-level backup and restore operations:
The privileges to perform database-level backup and restore operations require the REPOSITORY privilege on the SYSTEM level, the privilege to create databases in the default catalog, the privilege to create tables in any database, the privilege to load data into any table, and the privilege export data from any table in the database to be backed up.
-- Create a role.
CREATE ROLE recover_db;
-- Grant the REPOSITORY privilege on the SYSTEM level.
GRANT REPOSITORY ON SYSTEM TO ROLE recover_db;
-- Grant the privilege to create databases.
GRANT CREATE DATABASE ON CATALOG default_catalog TO ROLE recover_db;
-- Grant the privilege to create tables.
GRANT CREATE TABLE ON ALL DATABASES TO ROLE recover_db;
-- Grant the privilege to load data into any table.
GRANT INSERT ON ALL TABLES IN ALL DATABASES TO ROLE recover_db;
-- Grant the privilege to export data from any table in the database to be backed up.
GRANT EXPORT ON ALL TABLES IN DATABASE <db_name> TO ROLE recover_db; -
Grant the privileges to perform table-level backup and restore operations:
The privileges to perform table-level backup and restore operations require the REPOSITORY privilege on the SYSTEM level, the privilege to create tables in corresponding databases, the privilege to load data into any table in the database, and the privilege to export data from the table to be backed up.
-- Create a role.
CREATE ROLE recover_tbl;
-- Grant the REPOSITORY privilege on the SYSTEM level.
GRANT REPOSITORY ON SYSTEM TO ROLE recover_tbl;
-- Grant the privilege to create tables in corresponding databases.
GRANT CREATE TABLE ON DATABASE <db_name> TO ROLE recover_tbl;
-- Grant the privilege to load data into any table in a database.
GRANT INSERT ON ALL TABLES IN DATABASE <db_name> TO ROLE recover_db;
-- Grant the privilege to export data from the table you want to back up.
GRANT EXPORT ON TABLE <table_name> TO ROLE recover_tbl; -
Grant the privileges to perform partition-level backup and restore operations:
The privileges to perform partition-level backup and restore operations require the REPOSITORY privilege on the SYSTEM level, and the privilege to load and export data on the corresponding table.
-- Create a role.
CREATE ROLE recover_par;
-- Grant the REPOSITORY privilege on the SYSTEM level.
GRANT REPOSITORY ON SYSTEM TO ROLE recover_par;
-- Grant the privilege to load and export data on the corresponding table.
GRANT INSERT, EXPORT ON TABLE <table_name> TO ROLE recover_par;