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

組み込み認証

主要概念

ユーザー

Dorisでは、user_identityがユーザーを一意に識別します。user_identityは2つの部分で構成されます:user_namehostで、user_nameはユーザー名です。hostはユーザーが接続するホストアドレスを識別します。host部分はあいまいマッチングに%を使用できます。hostが指定されていない場合、デフォルトで%となり、ユーザーは任意のホストからDorisに接続できることを意味します。

ユーザー属性

ユーザー属性はuser_identityではなくuser_nameに直接付与されます。つまり、user@'192.%'user@['domain']は同じユーザー属性セットを共有します。これらの属性はユーザーに属し、user@'192.%'user@['domain']には属しません。

ユーザー属性には以下が含まれますが、これらに限定されません:ユーザー接続の最大数、インポートクラスター設定など。

組み込みユーザー

組み込みユーザーはDorisでデフォルトで作成されるユーザーで、デフォルトで特定の権限を持ちます。rootadminが含まれます。初期パスワードは空で、frontendの開始後にパスワード変更コマンドを使用して変更できます。デフォルトユーザーは削除できません。

  • root@'%':rootユーザー、任意のノードからのログインが許可され、ロールはoperatorです。
  • admin@'%':adminユーザー、任意のノードからのログインが許可され、ロールはadminです。

パスワード

ユーザーログイン用の認証情報で、ユーザー作成時に管理者が設定し、作成後にユーザーが変更することも可能です。

パスワードポリシー

Dorisは、ユーザーがパスワードをより適切に管理できるよう、以下のパスワードポリシーをサポートしています。

  • PASSWORD_HISTORY 現在のユーザーがパスワードをリセットする際に履歴パスワードの使用を許可するかどうか。例えば、PASSWORD_HISTORY 10は過去10個のパスワードを新しいパスワードとして再利用できないことを意味します。PASSWORD_HISTORY DEFAULTに設定された場合、グローバル変数password_historyの値が使用されます。0はこの機能が有効でないことを意味します。デフォルトは0です。 例:
    • グローバル変数の設定:SET GLOBAL password_history = 10
    • ユーザーの設定:ALTER USER user1@'ip' PASSWORD_HISTORY 10
  • PASSWORD_EXPIRE 現在のユーザーのパスワード有効期限を設定します。例えば、PASSWORD_EXPIRE INTERVAL 10 DAYはパスワードが10日で期限切れになることを意味します。PASSWORD_EXPIRE NEVERはパスワードが期限切れにならないことを意味します。PASSWORD_EXPIRE DEFAULTに設定された場合、グローバル変数default_password_lifetimeの値(日数)が使用されます。デフォルトはNEVER(または0)で、パスワードが期限切れにならないことを意味します。 例:
    • グローバル変数の設定:SET GLOBAL default_password_lifetime = 1
    • ユーザーの設定:ALTER USER user1@'ip' PASSWORD_EXPIRE INTERVAL 10 DAY
  • FAILED_LOGIN_ATTEMPTSPASSWORD_LOCK_TIME アカウントがロックされる前の不正なパスワード試行回数とロック時間を設定します。例えば、FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME 1 DAYは3回のログイン試行失敗後にアカウントが1日間ロックされることを意味します。管理者はALTER USER文を使用してロックされたアカウントをロック解除できます。 例:
    • ユーザーの設定:ALTER USER user1@'ip' FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME 1 DAY
  • パスワード強度 グローバル変数validate_password_policyによって制御されます。デフォルトはNONE/0で、パスワード強度チェックを行わないことを意味します。STRONG/2に設定された場合、パスワードには「大文字」、「小文字」、「数字」、「特殊文字」のうち少なくとも3つが含まれ、長さは少なくとも8文字である必要があります。 例:
    • SET validate_password_policy=STRONG

認証メカニズム

  1. クライアント認証情報の送信:クライアントはユーザー情報(ユーザー名、パスワード、データベースなど)をパッケージしてDorisサーバーに送信します。この情報はクライアントの身元を証明し、データベースへのアクセスを要求するために使用されます。
  2. サーバー認証:Dorisはクライアントの認証情報を受信後、それを検証します。ユーザー名、パスワード、クライアントIPが正しく、ユーザーが選択されたデータベースにアクセスする権限がある場合、認証が成功し、Dorisはユーザーエンティティをシステムのユーザーアイデンティティにマップします。それ以外の場合、認証が失敗し、エラーメッセージがクライアントに返されます。

ホワイトリストとブラックリスト

Doris自体はブラックリストをサポートせず、ホワイトリスト機能のみをサポートしますが、いくつかの方法でブラックリストをシミュレートできます。user@'192.%'という名前のユーザーが作成され、192.*からのユーザーがログインできるとします。192.168.10.1からのユーザーのログインを禁止したい場合、別のユーザーcmy@'192.168.10.1'を作成し、新しいパスワードを設定できます。192.168.10.1は192.%よりも高い優先度を持つため、192.168.10.1からのユーザーは古いパスワードを使用してログインできなくなります。

関連コマンド

その他の説明

  1. ログイン時のユーザーアイデンティティ優先度選択の問題

    上記で紹介したように、user_identityuser_namehostで構成されますが、ログイン時にユーザーはuser_nameのみを入力すればよいため、DorisはクライアントのIPに基づいてログインに使用するuser_identityを決定します。

    クライアントのIPに基づいて1つのuser_identityのみがマッチする場合、それがログインに使用され、問題は発生しません。しかし、複数のuser_identityがマッチする場合、優先度の問題が発生します。

    1. ドメイン名とIPの間の優先度: 以下のユーザーが作成されているとします:

           CREATE USER user1@['domain1'] IDENTIFIED BY "12345";
      CREATE USER user1@'ip1'IDENTIFIED BY "abcde";

domain1は2つのIP:ip1ip2に解決されます。

優先度の観点では、IPがドメイン名よりも優先されます。したがって、ユーザーuser1がパスワード'12345'を使用してip1からDorisにログインを試みる場合、ログインは拒否されます。 2. 特定のIPと範囲IPの間の優先度: 以下のユーザーが作成されているとします:

    ```sql
CREATE USER user1@'%' IDENTIFIED BY "12345";
CREATE USER user1@'192.%' IDENTIFIED BY "abcde";
```

優先度に関して、'192.%''%'よりも優先されます。したがって、ユーザーuser1192.168.1.1からパスワード'12345'を使用してDorisにログインしようとすると、ログインは拒否されます。

  1. パスワードを忘れた場合

    パスワードを忘れてDorisにログインできない場合は、FEの設定ファイルにskip_localhost_auth_check=trueパラメータを追加してFEを再起動してください。これにより、rootユーザーを使用してFEマシンからパスワードなしでDorisにログインできるようになります。

    ログイン後、SET PASSWORDコマンドを使用してパスワードをリセットできます。

  2. rootユーザー自身を除き、どのユーザーもrootユーザーのパスワードをリセットできません。

  3. current_user()user()

    ユーザーはSELECT current_user()SELECT user()を使用して、それぞれcurrent_useruserを表示できます。current_userは現在のユーザーが認証システムを通過するために使用したアイデンティティを示し、userは現在のユーザーの実際のUser Identityです。

    例:

    user1@'192.%'が作成され、その後user1という名前のユーザーが192.168.10.1からシステムにログインしたとします。この時、current_useruser1@'192.%'であり、useruser1@'192.168.10.1'です。

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