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

組み込み認証

主要概念

ユーザー

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

ユーザー属性

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

ユーザー属性には、ユーザーの最大接続数、importクラスター構成などが含まれますが、これらに限定されません。

組み込みユーザー

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

  • 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 のすべての権限を持ちます。