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

ビルトイン認証

主要概念

ユーザー

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

ユーザー属性

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

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

ビルトインユーザー

ビルトインユーザーは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.%''%'よりも優先されます。したがって、ユーザーuser1がパスワード'12345'を使用して192.168.1.1から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は現在のユーザーが認証システムを通過するために使用するIDを示し、userは現在のユーザーの実際のUser Identityです。

    例:

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

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