メインコンテンツまでスキップ
に最終更新

組み込み認証

Apache Doris には組み込みのユーザー認証機構があります。管理者は SQL コマンドを使用してユーザーを作成し、パスワードを設定し、接続元を制御します。このドキュメントでは、Doris のユーザー ID の構成、利用できるパスワードポリシー、IP の照合優先順位、一般的な運用例とトラブルシューティング方法を説明します。

主な利用シーン​

シーン参照先
アカウントの作成・削除、パスワードのリセット基本概念、よく使う操作コマンド
企業向けのパスワードポリシー(有効期限、履歴、強度、ロック)の設定パスワードポリシー
同じユーザー名が複数の user_identity に一致し、ログインが拒否される場合ユーザー ID の照合優先順位
特定の IP からのログインをブロックする場合(ブラックリストの模擬)ホワイトリストを使ったブラックリストの模擬
root のパスワードを忘れた場合、または current_user() と user() が一致しない場合FAQ

基本概念​

ユーザー(user_identity)​

Doris では、user_identity がユーザーを一意に識別し、次の二つの要素で構成されます。

  • user_name:ユーザー名。
  • host:クライアントの接続元ホストアドレス。あいまい一致には % を使用できます。

host を指定しない場合、デフォルトは '%' です。これは、どのホストからでも Doris に接続できることを意味します。

ユーザープロパティ​

ユーザープロパティは user_name に直接紐づき、user_identity には紐づきません。つまり、user@'192.%' と user@['domain'] は同じユーザープロパティを共有します。プロパティが属するのはユーザーであり、user@'192.%' や user@['domain'] ではありません。

ユーザープロパティには、ユーザーの最大接続数やロードクラスターの設定などが含まれます。

組み込みユーザー​

組み込みユーザーは、Doris がデフォルトで作成し、最初から一定の権限を持つユーザーです。root と admin が含まれます。初期パスワードは空です。FE の起動後、パスワード変更コマンドでパスワードを変更できます。デフォルトユーザーは削除できません。

ユーザーログイン可能な接続元デフォルトのロール
root@'%'任意のノードoperator
admin@'%'任意のノードadmin

パスワード​

パスワードは、ユーザーがログインするときに使用する認証情報です。ユーザーの作成時に管理者が設定し、後からユーザー自身が変更することもできます。

認証の仕組み​

Doris の認証は、次の二つのステップで行われます。

  1. クライアントが認証情報を送信します。 クライアントはユーザー情報(ユーザー名、パスワード、データベースなど)をまとめて Doris サーバーに送信し、自身の ID を証明してデータベースへのアクセスを要求します。
  2. サーバーが ID を検証します。 Doris は認証情報を受け取ると検証します。ユーザー名、パスワード、クライアント IP がすべて正しく、ユーザーに選択したデータベースへのアクセス権がある場合、認証は成功し、Doris はユーザーをシステム上のユーザー ID に対応付けます。それ以外の場合は認証に失敗し、対応するエラーメッセージがクライアントに返されます。

パスワードポリシー​

Doris は、管理者がパスワードのライフサイクルとセキュリティを管理できるよう、次のパスワードポリシーをサポートしています。

ポリシー目的デフォルト値
PASSWORD_HISTORY直近 N 個のパスワードの再利用を禁止する0(無効)
PASSWORD_EXPIREパスワードの有効期限を設定するNEVER(期限なし)
FAILED_LOGIN_ATTEMPTS + PASSWORD_LOCK_TIME連続したログイン失敗後にアカウントをロックする無効
validate_password_policyパスワードの強度を検証するNONE/0(検証なし)

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_ATTEMPTS と PASSWORD_LOCK_TIME​

ログインに n 回失敗した後に現在のユーザーのアカウントをロックし、ロック期間を設定します。たとえば、FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME 1 DAY は、ログインに 3 回失敗するとアカウントが一日間ロックされることを意味します。管理者は ALTER USER ステートメントでロックされたアカウントを手動で解除できます。

例:

  • ユーザーに設定する:ALTER USER user1@'ip' FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME 1 DAY

パスワードの強度​

この機能はグローバル変数 validate_password_policy で制御します。デフォルトは NONE/0 で、パスワードの強度は検証されません。STRONG/2 に設定すると、パスワードには大文字、小文字、数字、特殊文字の 4 種類のうち少なくとも 3 種類を含める必要があり、長さも 8 文字以上でなければなりません。

例:

  • SET validate_password_policy = STRONG

パスワードポリシーの確認​

上記のポリシーを設定した後、次のコマンドで確認できます。

SHOW PROC "/auth/'<user>'@'<host>'";

ユーザーとホストは、それぞれ単一引用符で囲む必要があります。例:

SHOW PROC "/auth/'root'@'%'";
SHOW PROC "/auth/'user1'@'127.0.0.1'";

ユーザー ID の照合優先順位​

user_identity は user_name と host で構成されますが、ログイン時にユーザーが指定するのは user_name だけです。Doris はクライアント IP を基に対応する host を照合し、ログインに使用する user_identity を決定します。

クライアント IP に一致する user_identity が一つだけの場合、Doris はそれを使用します。複数の user_identity が一致する場合は、次の優先順位を適用します。

比較対象優先順位
特定の IP とドメイン特定の IP がドメインより優先される
特定の IP と IP 範囲より具体的な IP 範囲が優先される(例:192.% は % より優先)

例 1:IP はドメインより優先される​

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

domain1 が ip1 と ip2 の二つの IP に解決されるとします。IP はドメインより優先されるため、ユーザー user1 が ip1 からパスワード '12345' を使って Doris にログインしようとすると、ログインは拒否されます(正しいパスワードは 'abcde' です)。

例 2:より具体的な IP 範囲が優先される​

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

'192.%' は '%' より優先されるため、ユーザー user1 が 192.168.1.1 からパスワード '12345' を使って Doris にログインしようとすると、ログインは拒否されます(正しいパスワードは 'abcde' です)。

ホワイトリストを使ったブラックリストの模擬​

Doris はブラックリストを標準ではサポートせず、ホワイトリストのみをサポートします。ただし、ユーザー ID の照合優先順位を利用してブラックリストを模擬できます。

たとえば、user@'192.%' というユーザーが作成され、192.* からのログインが許可されているとします。192.168.10.1 からのログインをブロックするには、別のユーザー cmy@'192.168.10.1' を作成し、新しいパスワードを設定します。192.168.10.1 は 192.% より優先されるため、192.168.10.1 からのユーザーは古いパスワードではログインできなくなります。

よく使う操作コマンド​

操作コマンド
ユーザーを作成するCREATE USER
ユーザーへの権限付与を確認するSHOW ALL GRANTS
ユーザーを変更するALTER USER
パスワードを変更するSET PASSWORD
ユーザーを削除するDROP USER
ユーザープロパティを設定するSET PROPERTY
ユーザープロパティを確認するSHOW PROPERTY

FAQ​

Q:忘れたパスワードをリセットするには?​

パスワードを忘れて Doris にログインできない場合は、次の手順で復旧します。

  1. FE の設定ファイルに次のパラメータを追加します。

    skip_localhost_auth_check = true
  2. FE を再起動します。

  3. FE ホスト上で、パスワードを指定せずに root ユーザーとして Doris にログインします。

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

Q:ほかのユーザーが root ユーザーのパスワードをリセットできますか?​

いいえ。root 以外のユーザーは、root ユーザーのパスワードをリセットできません。

Q:current_user() と user() の違いは何ですか?​

SELECT current_user() と SELECT user() を実行すると、それぞれ current_user と user を確認できます。

  • current_user:現在のユーザーが認証に使用した ID(ユーザーの作成時に使用した user_identity)。
  • user:実際のクライアント IP を含む、現在のユーザーの実際の ID。

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

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

Q:パスワードが正しいことを確認したのに、ユーザーのログインが拒否されるのはなぜですか?​

通常は、ユーザー ID の照合優先順位の規則が適用されたことを意味します。クライアント IP がより具体的な user_identity に一致したため、その user_identity に対応するパスワードでログインする必要があります。実際に一致した ID は、次のコマンドで確認できます。

SELECT current_user();