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

ユーザー権限

MySQL の権限管理メカニズムに基づき、StarRocks の権限管理システムは、テーブルレベルでのきめ細かい権限制御、ロールベースのアクセス制御、およびホワイトリストをサポートしています。

用語

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

権限システムでは、ユーザーはユーザーアイデンティティとして識別されます。ユーザーアイデンティティは、ユーザー名とユーザーホストの2つの部分で構成されます。user_identityusername@'userhost' として表されます。ユーザー名は英字で構成されます。ユーザーホストは、ユーザーがリンクしている IP です。

user_identityusername@['domain'] としても表されることがあります。ここで domain は DNS によって IP のセットに解決できるドメイン名です。最終的な表現は username@'userhost' のセットであり、この章全体を通じて username@'userhost' で表現します。

  • 権限

ユーザーはノード、データベース、またはテーブルに対して権限を設定できます。異なる権限は、異なる操作権限を表します。

  • ロール

StarRocks では、カスタマイズされた名前でロールを作成できます。ロールは権限のコレクションです。新しく作成されたユーザーには、対応する権限を持つロールを与えることができます。その後の権限の変更は、そのロールを付与されたすべてのユーザーに適用されます。

  • ユーザー属性

ユーザー属性は、ユーザーアイデンティティではなく、ユーザーに直接付与されます。つまり、abc@'192.%'abc@['domain'] の両方が、ユーザー abc に属する同じセットのユーザー属性を持ちます。ユーザー属性には、最大ユーザー接続数、インポートクラスター構成などが含まれますが、これに限定されません。

サポートされている操作

  • ユーザーの作成: CREATE USER
  • ユーザーの削除: DROP USER
  • 認可: GRANT
  • 権限の取り消し: REVOKE
  • ロールの作成: CREATE ROLE
  • ロールの削除: DROP ROLE
  • 現在のユーザー権限の表示: SHOW GRANTS
  • すべてのユーザー権限の表示: SHOW ALL GRANTS
  • 作成されたロールの表示: SHOW ROLES
  • ユーザー属性の表示: SHOW PROPERTY

権限の種類

StarRocks は現在、以下の種類の権限をサポートしています。

  • NODE_PRIV

    ノード変更のための権限。これにより、FE、BE、BROKER ノードを追加、削除、無効化できます。現在、この権限は Root ユーザーにのみ付与できます。

  • GRANT_PRIV

    権限変更のための権限。これにより、ユーザー/ロールを付与、取り消し、変更できます。

  • SELECT_PRIV

    データベースとテーブルへの読み取り専用アクセス。

  • LOAD_PRIV

    データベースとテーブルへの書き込みアクセス。これにより、データベースまたはテーブルをロード、挿入、削除できます。

  • ALTER_PRIV

    データベースとテーブルを変更するための権限。これにより、名前の変更、列の追加/削除/変更、パーティションの追加/削除が可能です。

  • CREATE_PRIV

    データベース、テーブル、およびビューを作成するための権限。

  • DROP_PRIV

    データベース、テーブル、およびビューを削除するための権限。

  • USAGE_PRIV

    リソースを使用するための権限。

権限の階層

StarRocks は、データベースおよびテーブルの権限を3つのレベルに分類します。

  • GLOBAL LEVEL: グローバル権限。この権限は、GRANT ステートメントによって . に付与されます。付与された権限は、任意のデータベースの任意のテーブルに適用されます。
  • DATABASE LEVEL: データベースレベルの権限。この権限は、GRANT ステートメントによって db.* に付与されます。付与された権限は、特定のデータベース内の任意のテーブルに適用されます。
  • TABLE LEVEL: テーブルレベルの権限。この権限は、GRANT ステートメントによって db.tbl に付与されます。付与された権限は、特定のデータベース内の特定のテーブルに適用されます。

StarRocks は、リソースの権限を2つのレベルに分類します。

  • GLOBAL LEVEL: グローバル権限。この権限は、GRANT ステートメントによって * に付与されます。付与された権限は、すべてのリソースに適用されます。
  • RESOURCE LEVEL: リソースレベルの権限。この権限は、GRANT ステートメントによって resource_name に付与されます。付与された権限は、特定のリソースに適用されます。

権限の説明

ADMIN_PRIVGRANT_PRIV の権限は特別で、どちらも権限を付与する権限を持っています。

  • CREATE USER

  • ADMIN 権限または任意のレベルでの GRANT 権限を持つユーザーは、新しいユーザーを作成できます。

  • DROP USER

  • ADMIN 権限を持つユーザーは、ユーザーを削除できます。

  • CREATE/DROP ROLE

  • ADMIN 権限を持つユーザーは、ロールを作成できます。

  • GRANT/REVOKE

  • ADMIN 権限または GLOBAL レベルの GRANT 権限を持つユーザーは、任意のユーザーに権限を付与または取り消すことができます。

  • DATABASE レベルの GRANT 権限を持つユーザーは、特定のデータベース内の任意のテーブルに対して任意のユーザーに権限を付与または取り消すことができます。

  • TABLE レベルの GRANT 権限を持つユーザーは、特定のデータベース内の特定のテーブルに対して任意のユーザーに権限を付与または取り消すことができます。

  • SET PASSWORD

  • ADMIN 権限または GLOBAL レベルの GRANT 権限を持つユーザーは、ユーザーのパスワードを設定できます。

  • 通常のユーザーは、自分のユーザーアイデンティティのパスワードを設定できます。SELECT CURRENT_USER(); コマンドを使用してユーザーアイデンティティを表示します。

  • TABLE または DATABASE レベルの GRANT 権限を持つユーザーは、既存のユーザーのパスワードを設定することはできませんが、新しいユーザーのパスワードを設定することはできます。

その他の注意事項

  • StarRocks が初期化されると、次のユーザーとロールが自動的に作成されます。

  • operator ロール: このロールは NODE_PRIVADMIN_PRIV を持ち、すなわちすべての権限を持ちます。後のアップグレードでは、このロールは NODE_PRIV(ノード変更のための権限)に制限される可能性があります。これは、クラウド上での特定のデプロイ要件を満たすためです。

  • admin ロール: このロールは ADMIN_PRIV を持ち、すなわちノード変更のための権限を除くすべての権限を持ちます。

  • root@'%': ルートユーザーで、任意のノードから operator としてログインできます。

  • admin@'%': 管理者ユーザーで、任意のノードから admin としてログインできます。

  • ロールまたはユーザーに設定されたデフォルトの権限を削除または変更することはサポートされていません。

  • operator ロールは1人のユーザーにのみ付与できます。admin ロールは複数のユーザーに付与できます。

  • 潜在的に競合する操作の説明:

  • ドメイン名と IP の競合

次のユーザーが作成されたとします。
CREATE USER abc@['domain'];
そして権限が付与されました:
GRANT SELECT_PRIV ON *. * TO abc@['domain']
ドメインは2つの IP に解決されます: ip1 と ip2。次に abc@'ip1' に個別に権限を付与したとします: GRANT ALTER_PRIV ON *. * TO abc@'ip1';
すると、abc@'ip1' の権限は SELECT_PRIV, ALTER_PRIV に変更されます。今後、abc@['domain'] に対する権限の変更は abc@'ip1' には適用されません。

  • 重複する IP の競合

次のユーザーが作成されたとします。
CREATE USER abc@'%' IDENTIFIED BY "12345";
CREATE USER abc@'192.%' IDENTIFIED BY "abcde";
'192.%' は '%' よりも優先されます。ユーザーが 192.168.1.1 から '12345' のパスワードで StarRocks にログインしようとすると、リクエストは拒否されます。

  • パスワードを忘れた場合
    パスワードを忘れた場合は、次のコマンドを使用して StarRocks にログインできます。
    mysql-client -h 127.0.0.1 -P query_port -uroot
    ログイン後、SET PASSWORD コマンドでパスワードをリセットできます。

  • ルートユーザーのみが自分のパスワードをリセットでき、他のユーザーはルートユーザーのパスワードをリセットできません。

  • ADMIN_PRIV 権限は、GLOBAL レベルでのみ付与または取り消すことができます。

  • GLOBAL レベルでの GRANT_PRIVADMIN_PRIV に似ています。GLOBAL レベルでの GRANT_PRIV は任意の権限を付与する権限を持っているため、注意して使用してください。

  • current_user() と user()

ユーザーは SELECT current_user();SELECT user(); を使用して、それぞれ current_useruser を確認できます。current_user は認証システムの下での現在のユーザーのアイデンティティを示し、user はユーザーの実際の user_identity です。

たとえば、user1@'192.%' が作成され、その後 user1 が 192.168.10.1 からシステムにログインしたとします。この場合、current_user は user1@'192.%' であり、user は user1@'192.168.10.1' です。

すべての権限は current_user に付与され、実際のユーザーは対応する current_user のすべての権限を持っています。

ベストプラクティス

ここでは、StarRocks の権限管理システムを使用するシナリオをいくつか紹介します。

シナリオ 1: 権限の割り当て

StarRocks のユーザーは、管理者 (Admin)、開発エンジニア (RD)、およびユーザー (Client) に分けられます。管理者はすべての権限を持ち、主にクラスターの構築やノード管理を担当します。開発エンジニアは、ビジネスモデリングを担当し、データベースやテーブルの構築、データのインポートや変更などを行います。ユーザーはデータベースやテーブルにアクセスしてデータを取得します。

このシナリオでは、管理者には ADMIN 権限または GRANT 権限が付与されます。RD には、任意または特定のデータベーステーブルに対して CREATE、DROP、ALTER、LOAD、および SELECT の権限が付与されます。クライアントには、任意または特定のデータベーステーブルに対して SELECT の権限が付与されます。複数のユーザーがいる場合は、異なるロールを作成して認可を簡素化することも可能です。

シナリオ 2: 複数のビジネスライン

クラスター内には複数のユースケースが存在し、それぞれが1つ以上のデータベースを使用する場合があります。各ユースケースは自分のユーザーを管理する必要があります。このシナリオでは、ADMIN は各データベースに対して DATABASE レベルの GRANT 権限を持つユーザーを1人付与できます。このユーザーは、この特定のデータベースに対してのみユーザーを認可できます。

シナリオ 3: ブラックリスト

StarRocks はブラックリストをサポートしていません(ホワイトリストのみがサポートされています)が、ある方法でブラックリストを模倣することができます。たとえば、user@'192.%' というユーザーが最初に作成されたとします。これは、ユーザーが 192.* からログインできることを示しています。この時点で、ユーザーが 192.168.10.1 からのログインを防ぎたい場合は、別のユーザー abc@'192.168.10.1' を作成し、新しいパスワードを設定します。192.168.10.1 は 192.% よりも優先されるため、ユーザーは古いパスワードで 192.168.10.1 からログインできなくなります。

トラブルシューティング

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

ユーザー root のパスワードを忘れた場合は、次の手順でリセットできます。

  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> -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. MySQL クライアントを起動し、新しいパスワードを使用してユーザー root として StarRocks に接続し、パスワードが正常にリセットされたかどうかを確認します。

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