From 47a0e5a5b151126b226d7ed8415214358241ec1c Mon Sep 17 00:00:00 2001 From: Tatsuo Ishii Date: Sat, 10 Jan 2026 12:12:25 +0900 Subject: [PATCH 1/2] =?UTF-8?q?oauth-validators.sgml=E3=81=AEPostgreSQL=20?= =?UTF-8?q?18.0=E5=AF=BE=E5=BF=9C=E3=81=A7=E3=81=99=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit とりあえず機械翻訳タグを削除しただけのdraft prです。 これでまずAIレビューをしてもらうテスト。 --- doc/src/sgml/oauth-validators.sgml | 74 +++++++++++++++--------------- 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/doc/src/sgml/oauth-validators.sgml b/doc/src/sgml/oauth-validators.sgml index 08b8ef55b48..e6ea62b28f5 100644 --- a/doc/src/sgml/oauth-validators.sgml +++ b/doc/src/sgml/oauth-validators.sgml @@ -14,7 +14,7 @@ itself; validator modules provide the integration layer between the server and the OAuth provider in use. --> -《機械翻訳》PostgreSQLは、インフラストラクチャモジュールを作成してOAuthベアラトークンのカスタム側バリデーションを実行するためのサーバを提供します。 +PostgreSQLは、インフラストラクチャモジュールを作成してOAuthベアラトークンのカスタム側バリデーションを実行するためのサーバを提供します。 OAuthの実装は非常に多様であり、ベアラトークンバリデーションは発行側に大きく依存しているため、サーバはトークン自分自身をチェックすることができません。 バリデータモジュールはサーバと使用中のOAuthプロバイダ間の統合レイヤを提供します。 @@ -24,7 +24,7 @@ OAuthの実装は非常に多様であり、ベアラトークンバリデーシ (see ) and the required callback for performing validation (see ). --> -《機械翻訳》OAuthバリデータモジュールは、少なくとも初期関数(を参照)と、バリデーションを実行するために必要なコールバック(を参照)で構成されている必要があります。 +OAuthバリデータモジュールは、少なくとも初期関数(を参照)と、バリデーションを実行するために必要なコールバック(を参照)で構成されている必要があります。 @@ -33,7 +33,7 @@ OAuthの実装は非常に多様であり、ベアラトークンバリデーシ correct implementation is crucial for server safety. See for design considerations. --> -《機械翻訳》不正な動作をするバリデータは、許可されていないユーザをデータベースに入れる可能性があるため、正しい実装はサーバの安全にとって非常に重要です。 +不正な動作をするバリデータは、許可されていないユーザをデータベースに入れる可能性があるため、正しい実装はサーバの安全にとって非常に重要です。 デザインの考慮事項については、を参照してください。 @@ -49,7 +49,7 @@ OAuthの実装は非常に多様であり、ベアラトークンバリデーシ provides, and because it may contribute to attacks against other pieces of an OAuth ecosystem. --> -《機械翻訳》前モジュールを実装しているこのセクションバリデータの全体を読んで理解してください。 +前モジュールを実装しているこのセクションバリデータの全体を読んで理解してください。 機能不全のバリデータは、認証が提供する偽の感覚と、OAuthエコシステムの他の部分に対する攻撃に寄与する可能性があるため、全くセキュリティがないよりも潜在的に悪いです。 @@ -62,7 +62,7 @@ OAuthの実装は非常に多様であり、ベアラトークンバリデーシ validation, implementations generally need to perform three separate actions: --> -《機械翻訳》異なるモジュールは、トークンバリデーションに対して非常に異なるアプローチをとることがあるが、実装は一般に、3つの別個のアクションを実行する必要がある。 +異なるモジュールは、トークンバリデーションに対して非常に異なるアプローチをとることがあるが、実装は一般に、3つの別個のアクションを実行する必要がある。 @@ -78,7 +78,7 @@ OAuthの実装は非常に多様であり、ベアラトークンバリデーシ trusted party so that it can perform validation for you (online validation). --> -《機械翻訳》バリデータは、まず保証に対して、提示されたトークンが実際にクライアント認証で使用するための有効な無記名トークンであることを示す必要があります。 +バリデータは、まず保証に対して、提示されたトークンが実際にクライアント認証で使用するための有効な無記名トークンであることを示す必要があります。 これを行う正しい方法はプロバイダに依存しますが、通常は、トークンがトラステッドパーティ(オフラインバリデーション)によって作成されたことを証明するための暗号化操作、またはバリデーションを実行できるようにそのトラステッドパーティ(オンラインバリデーション)にトークンを提示することが含まれます。 @@ -93,7 +93,7 @@ OAuthの実装は非常に多様であり、ベアラトークンバリデーシ Additionally, your provider may not provide introspection endpoints for use by external resource servers. --> -《機械翻訳》オンラインバリデーション(通常はOAuthトークンイントロスペクションを介して実装される)では、バリデータモジュールの手順が少なくて済み、盗難または誤発行されたイベントのトークンを一元的に失効させることができます。 +オンラインバリデーション(通常はOAuthトークンイントロスペクションを介して実装される)では、バリデータモジュールの手順が少なくて済み、盗難または誤発行されたイベントのトークンを一元的に失効させることができます。 ただし、モジュールは、認証の試行ごとに少なくとも1つのネットワーク呼び出しをmakeする必要があります(これらはすべて、構成された内で完了する必要があります)。 また、プロバイダは、外部リソースサーバが使用するイントロスペクションエンドポイントを提供しない場合があります。 @@ -111,7 +111,7 @@ OAuthの実装は非常に多様であり、ベアラトークンバリデーシ offline validator implementations may wish to place restrictions on the maximum length of a token's validity period. --> -《機械翻訳》オフラインバリデーションははるかに複雑であり、通常、バリデータはプロバイダのトラステッド署名キーのリストを維持し、チェックはトークンの暗号シグネチャとその内容を維持する必要があります。 +オフラインバリデーションははるかに複雑であり、通常、バリデータはプロバイダのトラステッド署名キーのリストを維持し、チェックはトークンの暗号シグネチャとその内容を維持する必要があります。 実装は、発行者(「このトークンはどこから来たのか?」)、オーディエンス(「このトークンは誰のためのものか?」)、有効性ピリオド(「このトークンはいつ使用できるのか?」)の検証を含む、プロバイダの指示に従わなければなりません。 モジュールとプロバイダの間には通信がないため、このメソッドを使用してトークンを一元的に取り消すことはできません。 オフラインバリデータの実装では、トークンの有効性ピリオドの最大長さに制限を設けることができます。 @@ -122,7 +122,7 @@ OAuthの実装は非常に多様であり、ベアラトークンバリデーシ Further authentication/authorization is pointless if the bearer token wasn't issued by a trusted party. --> -《機械翻訳》トークンが検証できない場合、モジュールは直ちに失敗します。 +トークンが検証できない場合、モジュールは直ちに失敗します。 無記名認証がトークン当事者によって発行されていない場合、それ以上のトラステッド/承認は無意味です。 @@ -137,7 +137,7 @@ OAuthの実装は非常に多様であり、ベアラトークンバリデーシ checking the scopes that have been assigned to the token, to make sure that they cover database access for the current HBA parameters. --> -《機械翻訳》次に、バリデータは保証を実行する必要があります。 +次に、バリデータは保証を実行する必要があります。 これは、エンドユーザがクライアントパーミッションをアクセスに提供したことを意味します。 サーバはに代わります。 これには通常、トークンにアサインされたスコープをチェックすることが含まれます。 @@ -152,7 +152,7 @@ makeは現在HBAパラメータのカバーデータベースアクセスを確 opportunity to reject the request if the client isn't supposed to be using their credentials to connect to databases. --> -《機械翻訳》このステップの目的は、OAuthクライアントが偽のふりをしてトークンを取得するのを防ぐことです。 +このステップの目的は、OAuthクライアントが偽のふりをしてトークンを取得するのを防ぐことです。 バリデータがすべてのトークンにカバーデータベースアクセスのスコープを運ぶことを要求する場合、プロバイダはフローの間にそのアクセスを許可するためにユーザをプロンプトする必要があります。 これにより、クライアントが資格情報を使用してデータベースに接続することになっていない場合に、リクエストを拒否する機会が与えられます。 @@ -172,7 +172,7 @@ makeは現在HBAパラメータのカバーデータベースアクセスを確 libpq does not usually meet this bar, since it's designed for use by public/untrusted clients. --> -《機械翻訳》つまり、OAuthトラステッドとPostgreSQLクライアントが同じサーバによって制御されているという意味での「エンティティ」です。 +つまり、OAuthトラステッドとPostgreSQLクライアントが同じサーバによって制御されているという意味での「エンティティ」です。 特に、libpqによってサポートされているデバイス認証クライアントフローは、パブリック/信頼できないクライアントによって使用されるように設計されているため、通常はこのバーを満たしません。 @@ -184,7 +184,7 @@ makeは現在HBAパラメータのカバーデータベースアクセスを確 authentication information from the token for use in auditing and debugging. --> -《機械翻訳》認可が失敗した場合でも、モジュールは、監査およびデバッグで使用するために、認証からトークン情報をプルし続けることを選択できます。 +認可が失敗した場合でも、モジュールは、監査およびデバッグで使用するために、認証からトークン情報をプルし続けることを選択できます。 @@ -202,7 +202,7 @@ makeは現在HBAパラメータのカバーデータベースアクセスを確 and recorded in the server logs if is enabled. --> -《機械翻訳》最後に、バリデータは、プロバイダにこの情報を要求するか、ユーザ識別子から情報を抽出することによって、トークンのトークン自分自身を決定し、その識別子をサーバに結果します(はHBA設定を使用して最終的な許可決定をmakeします)。 +最後に、バリデータは、プロバイダにこの情報を要求するか、ユーザ識別子から情報を抽出することによって、トークンのトークン自分自身を決定し、その識別子をサーバに結果します(はHBA設定を使用して最終的な許可決定をmakeします)。 が有効になっている場合、この識別子はsystem_userを介してセッション内で使用可能になり、サーバログに記録されます。 @@ -217,7 +217,7 @@ makeは現在HBAパラメータのカバーデータベースアクセスを確 Ultimately, the choice of which claim (or combination of claims) to use comes down to the provider implementation and application requirements. --> -《機械翻訳》様々なプロバイダが、あるエンドユーザの様々な認証情報を要求する場合があります。 +様々なプロバイダが、あるエンドユーザの様々な認証情報を要求する場合があります。 通常は要求と呼ばれます。 プロバイダは通常、これらの要求のうち、許可決定に使用できるほど信頼できるものと信頼できないものをレコードします(インスタンスの場合、エンドユーザのフルネームを認証の識別子として使用することは賢明ではありません。 多くのプロバイダでは、ユーザがディスプレイ名を任意に変更できます)。 @@ -230,7 +230,7 @@ makeは現在HBAパラメータのカバーデータベースアクセスを確 usermap delegation; see . --> -《機械翻訳》ノートの委任を有効にすることで、匿名/仮名のログインも可能です。 +ノートの委任を有効にすることで、匿名/仮名のログインも可能です。 を参照してください。 ユーザマップ @@ -246,7 +246,7 @@ makeは現在HBAパラメータのカバーデータベースアクセスを確 Developers should keep the following in mind when implementing token validation: --> -《機械翻訳》開発者は、トークンバリデーションを実装する際に、次の点に留意する必要があります。 +開発者は、トークンバリデーションを実装する際に、次の点に留意する必要があります。 @@ -260,7 +260,7 @@ makeは現在HBAパラメータのカバーデータベースアクセスを確 should not be able to retrieve that (otherwise valid) token from the disk. --> -《機械翻訳》モジュールは、サーバログにトークンまたはトークンの断片を書き込むべきではありません。 +モジュールは、サーバログにトークンまたはトークンの断片を書き込むべきではありません。 モジュールが真を無効と見なしたとしても、これはトークンです。 クライアントを混乱させて間違いプロバイダと通信させた攻撃者は、ディスクから(そうでなければ有効な)トークンを取得できないはずです。 @@ -270,7 +270,7 @@ makeは現在HBAパラメータのカバーデータベースアクセスを確 perform online token validation with a provider) must authenticate the peer and ensure that strong transport security is in use. --> -《機械翻訳》ネットワークを越えてトークンを送る実装(例に対して、プロバイダとオンライントークンバリデーションを行うために)は、強いトランスポートセキュリティが使われている同等なと保証を認証しなくてはなりません。 +ネットワークを越えてトークンを送る実装(例に対して、プロバイダとオンライントークンバリデーションを行うために)は、強いトランスポートセキュリティが使われている同等なと保証を認証しなくてはなりません。 @@ -288,7 +288,7 @@ makeは現在HBAパラメータのカバーデータベースアクセスを確 to unwind the stack, to avoid leaking information to unauthenticated clients. --> -《機械翻訳》モジュールは、標準拡張として同じロギングファシリティを使用する場合があります。 +モジュールは、標準拡張として同じロギングファシリティを使用する場合があります。 ただし、クライアントへのログエントリを発行するためのルールは、コネクションの認証フェーズ中に微妙に異なります。 一般的に、モジュールは通常、COMMERRORレベルと結果で問題を検証する必要があります。 代わりはERROR/FATALスタックを巻き戻すためにを使用して、認証されていないクライアントへの情報の漏洩を回避します。 @@ -311,7 +311,7 @@ makeは現在HBAパラメータのカバーデータベースアクセスを確 Failure to follow this guidance may result in unresponsive backend sessions. --> -《機械翻訳》モジュールは、サーバが正しくハンドル認証タイムアウトとpg_ctlからのシャットダウンシグナルを処理できるように、シグナルによる割り込みが可能でなければなりません。 +モジュールは、サーバが正しくハンドル認証タイムアウトとpg_ctlからのシャットダウンシグナルを処理できるように、シグナルによる割り込みが可能でなければなりません。 例では、ソケット上のブロッキング呼び出しは、一般的にソケットイベントと競合のない割り込みの両方を処理するコードに置き換えるべきです。 WaitLatchOrSocket()WaitEventSetWait()、などを参照してください。 また、長時間実行されるループは定期的に呼び出しする必要があります。 @@ -330,7 +330,7 @@ makeは現在HBAパラメータのカバーデータベースアクセスを確 mandatory. It's trivial to design a module that lets authorized users in; the whole point of the system is to keep unauthorized users out. --> -《機械翻訳》OAuthシステムのテストの幅は、このスコープの文書をはるかに超えていますが、少なくともネガティブテストは必須であると考えるべきです。 +OAuthシステムのテストの幅は、このスコープの文書をはるかに超えていますが、少なくともネガティブテストは必須であると考えるべきです。 デザインにとって、許可されたユーザを許可するモジュールは簡単です。 システムのポイント全体は、許可されていないユーザを締め出すことです。 @@ -349,7 +349,7 @@ makeは現在HBAパラメータのカバーデータベースアクセスを確 delegate_ident_mapping=1 mode, and what additional configuration is required in order to do so. --> -《機械翻訳》DBAはpg_identマップをバリデータするためにこの情報を使用する必要があるかもしれないので、ドキュメント実装は認証されたIDの内容とフォーマットをサーバする必要があります。 +DBAはpg_identマップをバリデータするためにこの情報を使用する必要があるかもしれないので、ドキュメント実装は認証されたIDの内容とフォーマットをサーバする必要があります。 (インスタンスの場合、メールアドレスですか?組織ID番号ですか?UUIDですか?また、モジュールをdelegate_ident_mapping=1モードで使用するのがセーフかどうか、そしてそうするためにオーダーで必要な追加の設定は何かをドキュメントする必要があります。 エンドユーザコンストラクト @@ -372,7 +372,7 @@ makeは現在HBAパラメータのカバーデータベースアクセスを確 that a user may assume, and duplicating that knowledge into local usermaps for every server may not be desirable. --> -《機械翻訳》バリデーションモジュールの標準的な成果物はユーザ識別子であり、サーバは設定されたpg_ident.confマッピングと比較して、エンドユーザが接続を認可されているかどうかを判断します。 +バリデーションモジュールの標準的な成果物はユーザ識別子であり、サーバは設定されたpg_ident.confマッピングと比較して、エンドユーザが接続を認可されているかどうかを判断します。 ただし、OAuthは自分自身で認可フレームワークであり、トークンはユーザ特権に関する情報を運ぶ場合があります。 例の場合、トークンはユーザが属する組織グループに関連付けられたり、ユーザが引き受ける役割をリストに関連付けられたりすることがあり、その情報をすべてのサーバのローカルユーザマップに複製することは望ましくない場合があります。 @@ -386,7 +386,7 @@ makeは現在HBAパラメータのカバーデータベースアクセスを確 identifier will still be recorded by the server, but it plays no part in determining whether to continue the connection. --> -《機械翻訳》バイパスでマッピング全体のユーザ名を使用し、バリデータモジュールにユーザ接続を許可する追加の責任を負わせるには、HBAをで構成します。 +バイパスでマッピング全体のユーザ名を使用し、バリデータモジュールにユーザ接続を許可する追加の責任を負わせるには、HBAをで構成します。 モジュールは、トークンスコープまたは同等のメソッドを使用して、ユーザが目的のロールの下で接続できるかどうかを決定します。 ユーザ識別子はサーバによって記録されますが、コネクションを継続するかどうかを決定する際にパートは使用されません。 @@ -400,7 +400,7 @@ makeは現在HBAパラメータのカバーデータベースアクセスを確 user-identifying information to the server. (Some providers may create an anonymized ID number that can be recorded instead, for later auditing.) --> -《機械翻訳》この方式を使用すると、認証自分自身はオプショナルになります。 +この方式を使用すると、認証自分自身はオプショナルになります。 モジュールがコネクションが許可されていることを報告する限り、ユーザ識別子がまったく記録されていなくてもログインは続行されます。 これにより、データベースに匿名または仮名のアクセスを実装することが可能になります。 この場合、サードパーティ・プロバイダは必要な認証をすべて実行しますが、ユーザを識別する情報をサーバに提供しません(プロバイダによっては、後で監査するために、代わりに記録できる匿名化されたID番号を作成する場合があります)。 @@ -411,7 +411,7 @@ makeは現在HBAパラメータのカバーデータベースアクセスを確 the validator module into a single point of failure for connection authorization. Use with caution. --> -《機械翻訳》ユーザマップ委任は、最も柔軟なアーキテクチャを提供しますが、バリデータモジュールをコネクション認可の単一障害点にしてしまいます。 +ユーザマップ委任は、最も柔軟なアーキテクチャを提供しますが、バリデータモジュールをコネクション認可の単一障害点にしてしまいます。 注意して使用してください。 @@ -437,7 +437,7 @@ makeは現在HBAパラメータのカバーデータベースアクセスを確 pointer must be of server lifetime, which is typically achieved by defining it as a static const variable in global scope. --> -《機械翻訳》OAuthバリデータモジュールは、にリストされている共有ライブラリから動的にロードされます。 +OAuthバリデータモジュールは、にリストされている共有ライブラリから動的にロードされます。 モジュールは、進行中のログインからリクエストされたときにオンデマンドでロードされます。 通常のライブラリ検索パスは、ライブラリの位置を特定するために使用されます。 バリデータコールバックを提供し、ライブラリがOAuthバリデータモジュールであることを示すには、関数記名的を指定する必要があります_PG_OAuth_validator_module_init指定する必要があります。 @@ -462,7 +462,7 @@ typedef const OAuthValidatorCallbacks *(*OAuthValidatorModuleInit) (void); Only the validate_cb callback is required, the others are optional. --> -《機械翻訳》validate_cbコールバックのみ必須、他はオプショナルです。 +validate_cbコールバックのみ必須、他はオプショナルです。 @@ -474,7 +474,7 @@ typedef const OAuthValidatorCallbacks *(*OAuthValidatorModuleInit) (void); callbacks. The server will call them as required to process the authentication request from the user. --> -《機械翻訳》OAuthバリデータモジュールは、一連のコールバックを定義することでその機能を実装する。 +OAuthバリデータモジュールは、一連のコールバックを定義することでその機能を実装する。 サーバは、ユーザからプロセス認証リクエストまで、必要に応じてそれらを呼び出しする。 @@ -488,7 +488,7 @@ typedef const OAuthValidatorCallbacks *(*OAuthValidatorModuleInit) (void); has state it can use state->private_data to store it. --> -《機械翻訳》startup_cbコールバックは、モジュールのロードの直後に実行されます。 +startup_cbコールバックは、モジュールのロードの直後に実行されます。 このコールバックは、ローカルの状態を設定し、必要に応じて追加の初期設定を実行するために使用できます。 バリデータモジュールに状態がある場合は、state->private_dataそれを格納するために使用できます。 @@ -506,7 +506,7 @@ typedef void (*ValidatorStartupCB) (ValidatorModuleState *state); exchange when a user attempts to authenticate using OAuth. Any state set in previous calls will be available in state->private_data. --> -《機械翻訳》validate_cbコールバックは、ユーザがOAuthを使用して認証しようとするときに、OAuth交換中に実行される。 +validate_cbコールバックは、ユーザがOAuthを使用して認証しようとするときに、OAuth交換中に実行される。 以前の呼び出しで設定された状態は、state->private_dataで使用できる。 @@ -523,7 +523,7 @@ typedef bool (*ValidatorValidateCB) (const ValidatorModuleState *state, set output parameters in the result struct, which is defined as below: --> -《機械翻訳》トークンには、検証対象のベアラトークンが含まれます。 +トークンには、検証対象のベアラトークンが含まれます。 PostgreSQLでは、トークンが構文的に整形式であることが確認されましたが、他のバリデーションは実行されていません。 ロールには、ユーザがログに要求したロールがとして含まれます。 コールバックはresult構造体に出力パラメータを設定する必要があります。 @@ -546,7 +546,7 @@ typedef struct ValidatorModuleResult NULL if the token is valid but the associated user identity cannot be determined. --> -《機械翻訳》モジュールがtrue result->認証済に設定された場合のみ、コネクションが続行されます。 +モジュールがtrue result->認証済に設定された場合のみ、コネクションが続行されます。 ユーザを認証するために、認証されたユーザ名前はresult->authn_idトークンを使用して決定されたようにpallocされ、フィールドで返される必要があります。 または、result->authn_idトークンが有効であるが、関連付けられたユーザIDを決定できない場合は、NULLに設定される場合があります。 @@ -558,7 +558,7 @@ typedef struct ValidatorModuleResult Otherwise the validator should return true to indicate that it has processed the token and made an authorization decision. --> -《機械翻訳》バリデータは、内部エラーを結果falseシグナルに対してすることができます。 +バリデータは、内部エラーを結果falseシグナルに対してすることができます。 この場合、ケースではすべての結果パラメータが無視され、コネクションは失敗します。 そうでない場合、バリデータは結果trueトークンを処理し、許可決定を行ったことを示すする必要があります。 @@ -574,7 +574,7 @@ typedef struct ValidatorModuleResult validator to ensure that the token carries enough privileges for the user to log in under the indicated role. --> -《機械翻訳》validate_cb returnsの後の動作は、特定のHBAセットアップによって異なります。 +validate_cb returnsの後の動作は、特定のHBAセットアップによって異なります。 通常、result->authn_idユーザ名前は、ユーザがロギングとしているロールを正確にマッチする必要があります。 (この動作はユーザマップで変更できます。) しかし、delegate_ident_mappingオンでHBAルールに対して認証する場合、PostgreSQLresult->authn_idの値をまったくチェックしません。 @@ -590,7 +590,7 @@ typedef struct ValidatorModuleResult process associated with the connection exits. If the validator module has any allocated state, this callback should free it to avoid resource leaks. --> -《機械翻訳》shutdown_cbコールバックは、コネクションに関連付けられたバックエンドプロセスが終了するときに実行されます。 +shutdown_cbコールバックは、コネクションに関連付けられたバックエンドプロセスが終了するときに実行されます。 バリデータモジュールに割り当てられた状態がある場合、このコールバックはリソースリークを回避するためにフリーする必要があります。 typedef void (*ValidatorShutdownCB) (ValidatorModuleState *state); From 68d5ebd3fc765dfaf820c67893969d006b8a041d Mon Sep 17 00:00:00 2001 From: Tatsuo Ishii Date: Sat, 10 Jan 2026 16:50:01 +0900 Subject: [PATCH 2/2] =?UTF-8?q?AI=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E3=81=A8=E8=87=AA=E5=B7=B1=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E3=82=92=E8=A1=8C=E3=81=84=E3=81=BE=E3=81=97=E3=81=9F=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit client-auth.sgmlに合わせて、 Validation -> 検証 Validator -> 検証器 と翻訳しました。 --- doc/src/sgml/oauth-validators.sgml | 218 +++++++++++++++++------------ 1 file changed, 129 insertions(+), 89 deletions(-) diff --git a/doc/src/sgml/oauth-validators.sgml b/doc/src/sgml/oauth-validators.sgml index e6ea62b28f5..c35feb82281 100644 --- a/doc/src/sgml/oauth-validators.sgml +++ b/doc/src/sgml/oauth-validators.sgml @@ -1,10 +1,16 @@ + + OAuth検証器モジュール OAuth Validators + + OAuth検証器 + -PostgreSQLは、インフラストラクチャモジュールを作成してOAuthベアラトークンのカスタム側バリデーションを実行するためのサーバを提供します。 -OAuthの実装は非常に多様であり、ベアラトークンバリデーションは発行側に大きく依存しているため、サーバはトークン自分自身をチェックすることができません。 -バリデータモジュールはサーバと使用中のOAuthプロバイダ間の統合レイヤを提供します。 +PostgreSQLは、カスタムモジュールを作成してサーバ側のOAuthベアラトークン検証を実行するためのインフラストラクチャを提供します。 +OAuthの実装は非常に多様であり、ベアラトークン検証は発行側に大きく依存しているため、サーバはトークン自身をチェックすることができません。検証器モジュールはサーバと使用するOAuthプロバイダ間の統合レイヤを提供します。 -OAuthバリデータモジュールは、少なくとも初期関数(を参照)と、バリデーションを実行するために必要なコールバック(を参照)で構成されている必要があります。 +OAuth検証器モジュールは、少なくとも初期関数(を参照)と、バリデーションを実行するために必要なコールバック(を参照)で構成されている必要があります。 @@ -33,13 +38,16 @@ OAuthバリデータモジュールは、少なくとも初期関数( for design considerations. --> -不正な動作をするバリデータは、許可されていないユーザをデータベースに入れる可能性があるため、正しい実装はサーバの安全にとって非常に重要です。 -デザインの考慮事項については、を参照してください。 +不正な動作をする検証器は、許可されていないユーザをデータベースに入れる可能性があるため、正しい実装はサーバの安全にとって非常に重要です。 +設計の考慮事項については、を参照してください。 + + 検証器モジュールを安全に設計する -前モジュールを実装しているこのセクションバリデータの全体を読んで理解してください。 -機能不全のバリデータは、認証が提供する偽の感覚と、OAuthエコシステムの他の部分に対する攻撃に寄与する可能性があるため、全くセキュリティがないよりも潜在的に悪いです。 +検証器モジュールを実装する前にこのセクション全体を読んで理解してください +機能不全の検証器は、それが提供する誤った安全感と、OAuthエコシステムの他の部分に対する攻撃に寄与する可能性があるため、全くセキュリティがないよりも潜在的に悪いです。 + + 検証器の役割 -異なるモジュールは、トークンバリデーションに対して非常に異なるアプローチをとることがあるが、実装は一般に、3つの別個のアクションを実行する必要がある。 +異なるモジュールは、トークンバリデーションに対して非常に異なるアプローチをとることがありますが、実装は一般に、3つの別個のアクションを実行する必要があります。 + + トークンを検証する -バリデータは、まず保証に対して、提示されたトークンが実際にクライアント認証で使用するための有効な無記名トークンであることを示す必要があります。 -これを行う正しい方法はプロバイダに依存しますが、通常は、トークンがトラステッドパーティ(オフラインバリデーション)によって作成されたことを証明するための暗号化操作、またはバリデーションを実行できるようにそのトラステッドパーティ(オンラインバリデーション)にトークンを提示することが含まれます。 +検証器は、まず、提示されたトークンが実際にクライアント認証で使用するための有効なベアラトークンであることを確認する必要があります。 +これを行う正しい方法はプロバイダに依存しますが、通常は、トークンが信頼できる組織によって作成されたことを証明するための暗号処理(オフラインバリデーション)、またはバリデーションを実行できるようにその信頼できる組織にトークンを提示する(オンラインバリデーション)ことが含まれます。 -オンラインバリデーション(通常はOAuthトークンイントロスペクションを介して実装される)では、バリデータモジュールの手順が少なくて済み、盗難または誤発行されたイベントのトークンを一元的に失効させることができます。 -ただし、モジュールは、認証の試行ごとに少なくとも1つのネットワーク呼び出しをmakeする必要があります(これらはすべて、構成された内で完了する必要があります)。 +オンライン検証(通常はOAuthトークンイントロスペクションを介して実装される)では、検証器モジュールの手順が少なくて済み、盗難または誤用されたイベントのトークンを一元的に失効させることができます。 +ただし、モジュールは、認証の試行ごとに少なくとも1つのネットワーク呼び出しを行う必要があります(これらはすべて、設定された内で完了する必要があります)。 また、プロバイダは、外部リソースサーバが使用するイントロスペクションエンドポイントを提供しない場合があります。 - -オフラインバリデーションははるかに複雑であり、通常、バリデータはプロバイダのトラステッド署名キーのリストを維持し、チェックはトークンの暗号シグネチャとその内容を維持する必要があります。 +オフライン検証ははるかに複雑であり、通常検証器はプロバイダのトラステッド署名キーのリストを維持し、チェックはトークンの暗号シグネチャとその内容を維持する必要があります。 実装は、発行者(「このトークンはどこから来たのか?」)、オーディエンス(「このトークンは誰のためのものか?」)、有効性ピリオド(「このトークンはいつ使用できるのか?」)の検証を含む、プロバイダの指示に従わなければなりません。 モジュールとプロバイダの間には通信がないため、このメソッドを使用してトークンを一元的に取り消すことはできません。 -オフラインバリデータの実装では、トークンの有効性ピリオドの最大長さに制限を設けることができます。 +オフライン検証器の実装では、トークンの有効性ピリオドの最大長さに制限を設けることができます。 トークンが検証できない場合、モジュールは直ちに失敗します。 -無記名認証がトークン当事者によって発行されていない場合、それ以上のトラステッド/承認は無意味です。 +ベアラトークンが信頼できる組織によって発行されていない場合、それ以上の認証/認可は無意味です。 + + クライアントの認可 -次に、バリデータは保証を実行する必要があります。 -これは、エンドユーザがクライアントパーミッションをアクセスに提供したことを意味します。 -サーバはに代わります。 -これには通常、トークンにアサインされたスコープをチェックすることが含まれます。 -makeは現在HBAパラメータのカバーデータベースアクセスを確認します。 +次に検証器は、エンドユーザが、彼らに代わってサーバによるクライアントアクセスの許可を与えていることを確認しなければなりません。 +これには通常、現在のHBAパラメータによるデータベースアクセスをカバーしていることを確認するために、トークンにアサインされたスコープをチェックすることが含まれます。 -このステップの目的は、OAuthクライアントが偽のふりをしてトークンを取得するのを防ぐことです。 -バリデータがすべてのトークンにカバーデータベースアクセスのスコープを運ぶことを要求する場合、プロバイダはフローの間にそのアクセスを許可するためにユーザをプロンプトする必要があります。 +このステップの目的は、OAuthクライアントが虚偽の理由でトークンを取得するのを防ぐことです。 +検証器がすべてのトークンにデータベースアクセスを可能にする内容を伴うことを要求する場合、処理中にプロバイダはユーザにアクセス許可を声高に求める必要があります。 これにより、クライアントが資格情報を使用してデータベースに接続することになっていない場合に、リクエストを拒否する機会が与えられます。 + +構築された機構に対する帯域外の明示的な知識を使わずにクライアント認証を確立することは可能ですが、そうするとユーザを処理の中から排除し、設定の誤りに気が付かなくなることになり、その誤りが気が付かないうちに悪用されることになります。 +もしユーザが追加のスコープの入力を求められないのであれば、データベースへのアクセスは信頼できるユーザにのみしっかりと制限されなければなりません。 -つまり、OAuthトラステッドとPostgreSQLクライアントが同じサーバによって制御されているという意味での「エンティティ」です。 -特に、libpqによってサポートされているデバイス認証クライアントフローは、パブリック/信頼できないクライアントによって使用されるように設計されているため、通常はこのバーを満たしません。 +つまり、OAuthクライアントとPostgreSQLサーバが同じエンティティによって制御されているという意味での「信頼できる」です。 +特に、libpqによってサポートされているデバイス認証クライアントフローは、パブリック/信頼できないクライアントによって使用されるように設計されているため、通常はこの基準を満たしません。 + -認可が失敗した場合でも、モジュールは、監査およびデバッグで使用するために、認証からトークン情報をプルし続けることを選択できます。 +認可が失敗した場合でも、モジュールは、監査およびデバッグで使用するために、トークンから認証情報を引き続き取得し続けることを選択できます。 + + エンドユーザを認証する -最後に、バリデータは、プロバイダにこの情報を要求するか、ユーザ識別子から情報を抽出することによって、トークンのトークン自分自身を決定し、その識別子をサーバに結果します(はHBA設定を使用して最終的な許可決定をmakeします)。 +最後に、検証器は、プロバイダにこの情報を要求するか、トークン自身からこの情報を抽出することによって、識別子をサーバに返します(サーバはHBA設定を使用して最終的な認可を決定します)。 が有効になっている場合、この識別子はsystem_userを介してセッション内で使用可能になり、サーバログに記録されます。 @@ -217,12 +239,10 @@ makeは現在HBAパラメータのカバーデータベースアクセスを確 Ultimately, the choice of which claim (or combination of claims) to use comes down to the provider implementation and application requirements. --> -様々なプロバイダが、あるエンドユーザの様々な認証情報を要求する場合があります。 -通常は要求と呼ばれます。 -プロバイダは通常、これらの要求のうち、許可決定に使用できるほど信頼できるものと信頼できないものをレコードします(インスタンスの場合、エンドユーザのフルネームを認証の識別子として使用することは賢明ではありません。 -多くのプロバイダでは、ユーザがディスプレイ名を任意に変更できます)。 +様々なプロバイダが、あるエンドユーザの様々な認証情報を記録する場合があります、通常は要求(claims)と呼ばれます。 +プロバイダは通常、これらの要求のうち、許可決定に使用できるほど信頼できるものと信頼できないものを記録します。 +(たとえば、多くのプロバイダでは、ユーザがディスプレイ名を任意に変更できるので、エンドユーザのフルネームを認証の識別子として使用することは賢明ではありません。) 結局のところ、どの要求(または要求の組合せ)を使用するかの選択は、プロバイダの実装とアプリケーションの要件に依存します。 -ダウンドキュメント -ノートの委任を有効にすることで、匿名/仮名のログインも可能です。 -を参照してください。 -ユーザマップ +ユーザマップ委任を有効にすることで、匿名/仮名のログインも可能であることに注意してください。を参照してください。 @@ -240,7 +258,10 @@ makeは現在HBAパラメータのカバーデータベースアクセスを確 + + 一般的なコーディングガイドライン + トークンの機密性 モジュールは、サーバログにトークンまたはトークンの断片を書き込むべきではありません。 -モジュールが真を無効と見なしたとしても、これはトークンです。 -クライアントを混乱させて間違いプロバイダと通信させた攻撃者は、ディスクから(そうでなければ有効な)トークンを取得できないはずです。 +モジュールがトークンを無効だと見なしたとしても、これは該当します。クライアントを混乱させて間違ったプロバイダと通信させようとする攻撃者が、ディスクから(そうでなければ有効な)トークンを取得できるべきではありません。 -ネットワークを越えてトークンを送る実装(例に対して、プロバイダとオンライントークンバリデーションを行うために)は、強いトランスポートセキュリティが使われている同等なと保証を認証しなくてはなりません。 +(例えば、プロバイダとオンライントークンバリデーションを行うために)ネットワークを介してトークンを送信する実装は、ピアを認証し、強力なトランスポートセキュリティが使用されていることを確認する必要があります + + ログ書き込み -モジュールは、標準拡張として同じロギングファシリティを使用する場合があります。 -ただし、クライアントへのログエントリを発行するためのルールは、コネクションの認証フェーズ中に微妙に異なります。 -一般的に、モジュールは通常、COMMERRORレベルと結果で問題を検証する必要があります。 -代わりはERROR/FATALスタックを巻き戻すためにを使用して、認証されていないクライアントへの情報の漏洩を回避します。 -ログ +モジュールは、標準拡張として同じロギングファシリティを使用する場合があります。ただし、クライアントへのログエントリを発行するためのルールは、コネクションの認証フェーズ中は微妙に異なります。 +一般的に、ERROR/FATALを使用してスタックを巻き戻すのではなく、認証されていないクライアントへの情報の漏洩を回避するために、COMMERRORレベルで検証上の問題をログして、正常終了する方が良いです。 @@ -311,17 +334,17 @@ makeは現在HBAパラメータのカバーデータベースアクセスを確 Failure to follow this guidance may result in unresponsive backend sessions. --> -モジュールは、サーバが正しくハンドル認証タイムアウトとpg_ctlからのシャットダウンシグナルを処理できるように、シグナルによる割り込みが可能でなければなりません。 -例では、ソケット上のブロッキング呼び出しは、一般的にソケットイベントと競合のない割り込みの両方を処理するコードに置き換えるべきです。 -WaitLatchOrSocket()WaitEventSetWait()、などを参照してください。 -また、長時間実行されるループは定期的に呼び出しする必要があります。 +モジュールは、サーバが正しく認証タイムアウトとpg_ctlからのシャットダウンシグナルを処理できるように、シグナルによる割り込みが可能でなければなりません。 +たとえば、ソケット上のブロッキング呼び出しは、一般的にソケットイベントと割り込みの両方を競合せずに処理するコードに置き換えるべきで(WaitLatchOrSocket()WaitEventSetWait()、などを参照してください)、長時間実行されるループはCHECK_FOR_INTERRUPTS()定期的に呼び出しする必要があります。 このガイダンスに従わないと、バックエンドセッションが応答しなくなる可能性があります。 -CHECK_FOR_INTERRUPTS() + + テスト -OAuthシステムのテストの幅は、このスコープの文書をはるかに超えていますが、少なくともネガティブテストは必須であると考えるべきです。 +OAuthシステムのテストの幅は、この文書のスコープをはるかに超えていますが、少なくともネガティブテストは必須であると考えるべきです。 デザインにとって、許可されたユーザを許可するモジュールは簡単です。 -システムのポイント全体は、許可されていないユーザを締め出すことです。 +システムの全体的なポイントは、許可されていないユーザを締め出すことです。 + + 文書化 -DBAはpg_identマップをバリデータするためにこの情報を使用する必要があるかもしれないので、ドキュメント実装は認証されたIDの内容とフォーマットをサーバする必要があります。 -(インスタンスの場合、メールアドレスですか?組織ID番号ですか?UUIDですか?また、モジュールをdelegate_ident_mapping=1モードで使用するのがセーフかどうか、そしてそうするためにオーダーで必要な追加の設定は何かをドキュメントする必要があります。 -エンドユーザコンストラクト +DBAがpg_identマップを作成するためにこの情報を使用する必要があるかもしれないので、実装はサーバに報告される各ユーザの認証されたIDの内容と形式を文書化する必要があります。 +(たとえば、それはメールアドレスか?組織ID番号か?UUIDか?) +また、モジュールをdelegate_ident_mapping=1モードで使用するのが安全かどうか、そしてそうするための追加の設定は何かも文書化するのが良いでしょう。 @@ -359,7 +385,10 @@ DBAはpg_identマップをバリデータするためにこの情報を使用す + + ユーザの認可(ユーザマップ移譲) -バリデーションモジュールの標準的な成果物はユーザ識別子であり、サーバは設定されたpg_ident.confマッピングと比較して、エンドユーザが接続を認可されているかどうかを判断します。 +検証モジュールの標準的な成果物はユーザ識別子であり、サーバは設定されたpg_ident.confマッピングと比較して、エンドユーザが接続を認可されているかどうかを判断します。 ただし、OAuthは自分自身で認可フレームワークであり、トークンはユーザ特権に関する情報を運ぶ場合があります。 -例の場合、トークンはユーザが属する組織グループに関連付けられたり、ユーザが引き受ける役割をリストに関連付けられたりすることがあり、その情報をすべてのサーバのローカルユーザマップに複製することは望ましくない場合があります。 +たとえば、トークンはユーザが属する組織グループに関連付けられたり、ユーザが引き受ける役割をリストに関連付けられたりすることがあり、その情報をすべてのサーバのローカルユーザマップに複製することは望ましくない場合があります。 -バイパスでマッピング全体のユーザ名を使用し、バリデータモジュールにユーザ接続を許可する追加の責任を負わせるには、HBAをで構成します。 +ユーザ名マッピングをバイパスし、検証器モジュールにユーザ接続を許可する追加の責任を負わせるには、HBAをで構成します。 モジュールは、トークンスコープまたは同等のメソッドを使用して、ユーザが目的のロールの下で接続できるかどうかを決定します。 ユーザ識別子はサーバによって記録されますが、コネクションを継続するかどうかを決定する際にパートは使用されません。 @@ -400,10 +429,11 @@ DBAはpg_identマップをバリデータするためにこの情報を使用す user-identifying information to the server. (Some providers may create an anonymized ID number that can be recorded instead, for later auditing.) --> -この方式を使用すると、認証自分自身はオプショナルになります。 -モジュールがコネクションが許可されていることを報告する限り、ユーザ識別子がまったく記録されていなくてもログインは続行されます。 +この方式を使用すると、認証自体はオプショナルになります。 +モジュールがコネクションを許可されていることを報告する限り、ユーザ識別子がまったく記録されていなくてもログインは続行されます。 これにより、データベースに匿名または仮名のアクセスを実装することが可能になります。 -この場合、サードパーティ・プロバイダは必要な認証をすべて実行しますが、ユーザを識別する情報をサーバに提供しません(プロバイダによっては、後で監査するために、代わりに記録できる匿名化されたID番号を作成する場合があります)。 +この場合、サードパーティプロバイダは必要な認証をすべて実行しますが、ユーザを識別する情報をサーバに提供しません。 +(プロバイダによっては、後で監査するために、代わりに記録できる匿名化されたID番号を作成する場合があります。) -ユーザマップ委任は、最も柔軟なアーキテクチャを提供しますが、バリデータモジュールをコネクション認可の単一障害点にしてしまいます。 +ユーザマップ委任は、最も柔軟なアーキテクチャを提供しますが、検証器モジュールをコネクション認可の単一障害点にしてしまいます。 注意して使用してください。 + + 初期化関数 _PG_oauth_validator_module_init @@ -437,14 +470,12 @@ DBAはpg_identマップをバリデータするためにこの情報を使用す pointer must be of server lifetime, which is typically achieved by defining it as a static const variable in global scope. --> -OAuthバリデータモジュールは、にリストされている共有ライブラリから動的にロードされます。 +OAuth検証器モジュールは、にリストされている共有ライブラリから動的にロードされます。 モジュールは、進行中のログインからリクエストされたときにオンデマンドでロードされます。 通常のライブラリ検索パスは、ライブラリの位置を特定するために使用されます。 -バリデータコールバックを提供し、ライブラリがOAuthバリデータモジュールであることを示すには、関数記名的を指定する必要があります_PG_OAuth_validator_module_init指定する必要があります。 -関数の戻り値は、タイプの構造体OAuthValidatorCallbacksへのポインタである必要があります。 -の構造体は包含マジックナンバーであり、モジュールのトークンバリデーション関数へのポインタです。 -戻されるポインタの存続期間はサーバである必要があります。 -これは通常、グローバル・スコープのstatic const変数として定義することで実現されます。 +検証器コールバックを提供し、ライブラリがOAuth検証器モジュールであることを示すには、_PG_oauth_validator_module_initという名前の関数を提供する必要があります。 +関数の戻り値は、OAuthValidatorCallbacks型の構造体へのポインタである必要があり、構造体はマジックナンバーとモジュールのトークン検証関数へのポインタを含みます。 +戻されるポインタの存続期間はサーバの生存期間である必要があり、これは通常、グローバルスコープのstatic const変数として定義することで実現されます。 typedef struct OAuthValidatorCallbacks { @@ -467,19 +498,25 @@ typedef const OAuthValidatorCallbacks *(*OAuthValidatorModuleInit) (void); + + OAuth検証器コールバック -OAuthバリデータモジュールは、一連のコールバックを定義することでその機能を実装する。 -サーバは、ユーザからプロセス認証リクエストまで、必要に応じてそれらを呼び出しする。 +OAuth検証器モジュールは、一連のコールバックを定義することでその機能を実装します。 +サーバは、ユーザからのプロセス認証リクエストを処理するために、必要に応じてそれらを呼び出します。 + + スタートアップコールバック -startup_cbコールバックは、モジュールのロードの直後に実行されます。 +startup_cbコールバックは、モジュールのロード直後に実行されます。 このコールバックは、ローカルの状態を設定し、必要に応じて追加の初期設定を実行するために使用できます。 -バリデータモジュールに状態がある場合は、state->private_dataそれを格納するために使用できます。 +検証器モジュールに状態がある場合は、state->private_dataを使用してそれを格納できます。 typedef void (*ValidatorStartupCB) (ValidatorModuleState *state); @@ -499,15 +536,18 @@ typedef void (*ValidatorStartupCB) (ValidatorModuleState *state); + + 検証コールバック -validate_cbコールバックは、ユーザがOAuthを使用して認証しようとするときに、OAuth交換中に実行される。 -以前の呼び出しで設定された状態は、state->private_dataで使用できる。 +validate_cbコールバックは、ユーザがOAuthを使用して認証しようとするときに、OAuth交換中に実行されます。 +以前の呼び出しで設定された状態は、state->private_dataで使用できます。 typedef bool (*ValidatorValidateCB) (const ValidatorModuleState *state, @@ -524,10 +564,9 @@ typedef bool (*ValidatorValidateCB) (const ValidatorModuleState *state, defined as below: --> トークンには、検証対象のベアラトークンが含まれます。 -PostgreSQLでは、トークンが構文的に整形式であることが確認されましたが、他のバリデーションは実行されていません。 -ロールには、ユーザがログに要求したロールがとして含まれます。 -コールバックはresult構造体に出力パラメータを設定する必要があります。 -これは次のように定義されます。 +PostgreSQLは、トークンが構文的に整形式であることを確認していますが、他のバリデーションは実行されていません。 +ロールには、ユーザがログインとして要求したロールが含まれます。 +コールバックはresult構造体に出力パラメータを設定する必要があり、これは次のように定義されます。 typedef struct ValidatorModuleResult @@ -546,8 +585,8 @@ typedef struct ValidatorModuleResult NULL if the token is valid but the associated user identity cannot be determined. --> -モジュールがtrue result->認証済に設定された場合のみ、コネクションが続行されます。 -ユーザを認証するために、認証されたユーザ名前はresult->authn_idトークンを使用して決定されたようにpallocされ、フィールドで返される必要があります。 +モジュールがresult->authorizedtrueに設定した場合のみ、コネクションが続行されます。 +ユーザを認証するために、認証されたユーザ名(トークンを使用して決定されたもの)はpallocされ、result->authn_idフィールドで返される必要があります。 または、result->authn_idトークンが有効であるが、関連付けられたユーザIDを決定できない場合は、NULLに設定される場合があります。 @@ -558,9 +597,8 @@ typedef struct ValidatorModuleResult Otherwise the validator should return true to indicate that it has processed the token and made an authorization decision. --> -バリデータは、内部エラーを結果falseシグナルに対してすることができます。 -この場合、ケースではすべての結果パラメータが無視され、コネクションは失敗します。 -そうでない場合、バリデータは結果trueトークンを処理し、許可決定を行ったことを示すする必要があります。 +検証器は、内部エラーを示すためにfalseを返すことができ、この場合、すべての結果パラメータが無視され、接続は失敗します。 +そうでない場合、検証器はtrueを返して、トークンを処理し、認可決定を行ったことを示す必要があります。 -validate_cb returnsの後の動作は、特定のHBAセットアップによって異なります。 -通常、result->authn_idユーザ名前は、ユーザがロギングとしているロールを正確にマッチする必要があります。 -(この動作はユーザマップで変更できます。) -しかし、delegate_ident_mappingオンでHBAルールに対して認証する場合、PostgreSQLresult->authn_idの値をまったくチェックしません。 -このケースでは、トークンが指示されたroleの下でユーザがログに対して十分な権限を持つかどうかは、バリデータから保証に委ねられます。 +validate_cb returnsの後の動作は、特定のHBA設定によって異なります。 +通常、result->authn_idユーザ名は、ユーザがログインしようとしているロールと正確に一致する必要があります。 +(この振る舞いはユーザマップで変更できます。) +しかし、delegate_ident_mappingが有効でHBAルールに対して認証する場合、PostgreSQLresult->authn_idの値をまったくチェックしません。この場合、トークンが指示されたroleの下でユーザがログインするのに十分な権限を持つかどうかは、検証器に委ねられます。 + + シャットダウンコールバック -shutdown_cbコールバックは、コネクションに関連付けられたバックエンドプロセスが終了するときに実行されます。 -バリデータモジュールに割り当てられた状態がある場合、このコールバックはリソースリークを回避するためにフリーする必要があります。 +shutdown_cbコールバックは、接続に関連付けられたバックエンドプロセスが終了するときに実行されます。 +検証器モジュールにメモリを割り当てられた状態がある場合、このコールバックはリソースリークを回避するためにフリーする必要があります。 typedef void (*ValidatorShutdownCB) (ValidatorModuleState *state);