<!-- $Header: /usr/prj/pg/cvsroot/doc/doc/src/sgml/client-auth.sgml,v 1.9 2001/09/17 02:17:56 i-kaori Exp $ -->

<chapter id="client-authentication">
<!--  <title>Client Authentication</title> -->
 <title>クライアント認証</title>
<indexterm><primary sortas="くらいあんとにんしょう">クライアント認証</primary></indexterm>
<indexterm><primary>PostgreSQL</primary><secondary sortas="くらいあんとにんしょう">クライアント認証</secondary></indexterm>
 <para>
  <!-- 
  When a client application connects to the database server, it specifies which
  <productname>Postgres</productname> user name it wants to connect as,
  much the same way one logs into a Unix computer as a particular user.
  Within the SQL environment the active
  database user name determines access privileges to database
  objects __ see <xref linkend="user-manag"> for more information
  about that. It is therefore obviously essential to restrict which
  database user name(s) a given client can connect as. -->

  クライアントアプリケーションがデータベースサーバーに接続すると、Unixコンピュータに特定のユーザーとしてログインするときと同じように、どの<productname>Postgres</productname>ユーザー名で接続したいかを指定します。SQL環境の中では有効なデータベースユーザー名がデータベースのオブジェクトへのアクセス権限を決めます。それに関する詳しい情報は<xref linkend="user-manag">を参照してください。したがって、どのデータベースユーザー名で指定されたクライアントが接続できるかを制限することは明らかに重要なのです。

 </para>

 <para>
  <!--  
  <firstterm>Authentication</firstterm> is the process by which the
  database server establishes the identity of the client, and by
  extension determines whether the client application (or the user
  who runs the client application) is permitted to connect with the
  user name that was requested. -->

  <firstterm>認証</firstterm>は、データベースサーバーがクライアントの識別情報を確立し、クライアントアプリケーション（もしくはクライアントアプリケーションを実行するユーザー）が要求されたユーザー名で接続することができるかを決定するプロセスです。
 </para>

 <para>
   <!-- 
  <productname>Postgres</productname> offers client authentication by
  (client) host and by database, with a number of different
  authentication methods available. -->

  <productname>Postgres</productname>は（クライアントの）ホストとデータベースにより、いくつかの異なる有効な認証メソッドでクライアント認証を提供します。
 </para>

 <para>
  <!-- 
  <productname>Postgres</productname> database user names are logically
  separate from user names of the operating system in which the server
  runs.  If all the users of a particular server also have accounts on
  the server's machine, it makes sense to assign database user names
  that match their Unix user ids.  However, a server that accepts remote
  connections may have many users who have no local account, and in such
  cases there need be no connection between database usernames and Unix
  usernames. -->

  <productname>Postgres</productname>データベースユーザー名はデータベースサーバーが走っているオペレーティングシステムのユーザー名とは論理的に異なります。もし特定のサーバーのすべてのユーザーがサーバーマシン上にもアカウントを持っている場合、彼らのUnixユーザーIDと同じデータベースユーザー名を割り当てることは理にかなっています。しかし、リモート接続を受け入れるサーバーは、ローカルアカウントを持たない多くのユーザーをかかえるかもしれず、そのような場合にはデータベースユーザー名とUnixユーザー名との間の関連性は必要ありません。
 </para>

 <sect1 id="pg-hba.conf">
  <!-- <title>The <filename>pg_hba.conf</filename> file</title> -->
  <title><filename>pg_hba.conf</filename>ファイル</title>
<indexterm><primary>pg_hba.conf</primary></indexterm>
<indexterm><primary>PostgreSQL</primary><secondary>pg_hba.conf</secondary></indexterm>
  <para>
   <!-- Client authentication is controlled by the file
   <filename>pg_hba.conf</filename> in the $PGDATA directory, e.g.,
   <filename>/usr/local/pgsql/data/pg_hba.conf</filename>. (HBA stands
   for host-based authentication.) A default <filename>pg_hba.conf</filename>
   file is installed when the
   data area is initialized by <application>initdb</application>.
   -->

   クライアント認証は、$PGDATAディレクトリの中のファイル<filename>pg_hba.conf</filename>で管理されています。たとえば、<filename>/usr/local/pgsql/data/pg_hba.conf</filename>です（「HBA」とは、ホストベースの認証――host-based authenticationの略です）。デフォルトの<filename>pg_hba.conf</filename>ファイルはデータ領域が<application>initdb</application>で初期化されるときにインストールされます。

  </para>

  <para>
   <!-- 
   The general format of the <filename>pg_hba.conf</filename> file is
   of a set of records, one per line. Blank lines and lines beginning
   with a hash character (<quote>#</quote>) are ignored. A record is
   made up of a number of fields which are separated by spaces and/or
   tabs.  Records cannot be continued across lines. -->

   <filename>pg_hba.conf</filename>の一般的なフォーマットは1行につき1レコードからなるレコードの集まりです。空行とシャープ記号（<quote>#</quote>）で始まる行は無視されます。レコードはスペースもしくはタブで区切られたいくつかのフィールドで校正されます。レコードは行をまたいで続けることはできません。
  </para>

  <para>
   <!-- A record may have one of the three formats -->
   レコードのフォーマットは次の3つのうちのどれかになります。
</para>

<synopsis>
local   <replaceable>database</replaceable> <replaceable>authentication-method</replaceable> [ <replaceable>authentication-option</replaceable> ]
host    <replaceable>database</replaceable> <replaceable>IP-address</replaceable> <replaceable>IP-mask</replaceable> <replaceable>authentication-method</replaceable> [ <replaceable>authentication-option</replaceable> ]
hostssl <replaceable>database</replaceable> <replaceable>IP-address</replaceable> <replaceable>IP-mask</replaceable> <replaceable>authentication-method</replaceable> [ <replaceable>authentication-option</replaceable> ]
</synopsis>

<para>
   <!-- The meaning of the fields is as follows: -->
   これらのフィールドの意味を以下に示します。
</para>

   <variablelist>
    <varlistentry>
     <term><literal>local</literal></term>
     <listitem>
      <para>
       <!-- 
       This record pertains to connection attempts over Unix domain
       sockets. -->
       このレコードはUnixドメインソケット越しの接続に対応します。
      </para>
     </listitem>
    </varlistentry>

    <varlistentry>
     <term><literal>host</literal></term>
     <listitem>
      <para>
       <!-- 
       This record pertains to connection attempts over TCP/IP
       networks. Note that TCP/IP connections are completely disabled
       unless the server is started with the <option>-i</option> switch or
       the equivalent configuration parameter is set. -->

       このレコードはTCP/IPネットワーク越しの接続に対応します。ただし、サーバーが<option>-i</option>オプションで起動されているか同等のパラメータが設定されていない限り、TCP/IP接続はまったくできないので注意してください。
      </para>
     </listitem>
    </varlistentry>

    <varlistentry>
     <term><literal>hostssl</literal></term>
     <listitem>
      <para>
       <!-- 
       This record pertains to connection attempts with SSL over
       TCP/IP. To make use of this option the server must be
       built with SSL support enabled. Furthermore, SSL must be
       enabled with the <option>-l</> option or equivalent configuration
       setting when the server is started. -->

       このレコードはTCP/IP越しのSSLを使った接続に対応します。このオプションを使うためには、サーバーはSSLサポートができるよう構築されていなければいけません。さらに、SSLはサーバー起動時に<option>-l</>オプションもしくは同等の設定がされていなければいけません。
      </para>
     </listitem>
    </varlistentry>

    <varlistentry>
     <term><replaceable>database</replaceable></term>
     <listitem>
      <para>
       <!--  
       Specifies the database that this record applies to. The value
       <literal>all</literal> specifies that it applies to all
       databases, while the value <literal>sameuser</> identifies the
       database with the same name as the connecting user.  Otherwise,
       this is the name of a specific <productname>Postgres</productname>
       database. -->

       このレコードが適用されるデータベースを指定します。<literal>all</literal>値はそれがすべてのデータベースに適用されることを指定し、<literal>sameuser</>は接続ユーザーと同じ名前を持つデータベースとして識別します。それら以外は、特定の<productname>Postgres</productname>データベースの名前になります。

      </para>
     </listitem>
    </varlistentry>

    <varlistentry>
     <term><replaceable>IP address</replaceable></term>
     <term><replaceable>IP mask</replaceable></term>
     <listitem>
      <para>
       <!-- These two fields control to which hosts a
       <literal>host</literal> record applies, based on their IP
       address. (Of course IP addresses can be spoofed but this
       consideration is beyond the scope of
       <productname>Postgres</productname>.) The precise logic is that
       -->
       これらの2つのフィールドは、IPアドレスに基づいて、どのホストに<literal>host</literal>レコードが適用されるかを制御します（もちろんIPアドレスは偽ることができますが、その吟味は<productname>Postgres</productname>の守備範囲外です）。詳細な論理は、以下のとおりです。</para>
           
<!--       <blockquote>-->
<!--        <informalfigure>-->
<programlisting>(<replaceable>actual-IP-address</replaceable> xor <replaceable>IP-address-field</replaceable>) and <replaceable>IP-mask-field</replaceable></programlisting>
<!--        </informalfigure>-->
<!--       </blockquote>-->
       <!-- must be zero for the record to match. -->
<para>この計算が0でなければレコードとマッチしません。
      </para>
     </listitem>
    </varlistentry>

    <varlistentry>
     <term><replaceable>authentication method</replaceable></term>
     <listitem>
      <para>
       <!-- 
       Specifies the method that users must use to authenticate themselves
       when connecting to that database. The possible choices follow,
       details are in <xref linkend="auth-methods">. -->
       ユーザーがそのデータベースに接続する際に自分を認証するために使わなければいけないメソッドを指定します。可能な選択肢は下記のとおりですが、詳しくは<xref linkend="auth-methods">を参照してください。</para>

       <variablelist>
        <varlistentry>
         <term>trust</>
         <listitem>
         <para>
          <!-- 
          The connection is allowed unconditionally. This method allows
          any user that has login access to the client host to connect as
          any <productname>Postgres</productname> user whatsoever. -->

          接続は無条件で許可されます。このメソッドは、クライアントホストにログインできるすべてのユーザーに対して、<productname>Postgres</productname>のどのユーザーを使っても接続することを許可します。

         </para>
        </listitem>
       </varlistentry>

       <varlistentry>
        <term>reject</>
        <listitem>
         <para>
          <!-- 
          The connection is rejected unconditionally. This is mostly
          useful to <quote>filter out</> certain hosts from a group. -->

         接続は無条件に拒否されます。これは、特定のホストをグループから<quote>除外</>するためには、おおむね役に立ちます。

         </para>
        </listitem>
       </varlistentry>

       <varlistentry>
        <term>password</>
        <listitem>
         <para>
          <!-- 
          The client is required to supply a password with the connection
          attempt which is required to match the password that was set up
          for the user. -->
          接続を試みる際にクライアントは、そのユーザー用に設定されたパスワードと一致するパスワードを要求されます。
         </para>

         <para>
          <!-- An optional file name may be specified after the
          <literal>password</literal> keyword. This file is expected to
          contain a list of users that this record pertains to, and
          optionally alternative passwords. -->

          <literal>password</literal>キーワードの後に、オプションのファイル名を指定できます。指定されたファイルは、このレコードで対応するユーザーのリストを含むはずで、オプションで代替パスワードも含みます。
         </para>

         <para>
          <!-- 
          The password is sent over the wire in clear text. For better
          protection, use the <literal>crypt</literal> method. -->

          パスワードはクリアテキストのまま送られます。よりよい防御のためには<literal>crypt</literal>メソッドを使ってください。

         </para>
        </listitem>
       </varlistentry>

       <varlistentry>
        <term>crypt</>
        <listitem>
         <para>
          <!-- 
          Like the <literal>password</literal> method, but the password
          is sent over the wire encrypted using a simple
          challenge-response protocol. This is still not
          cryptographically secure but it protects against incidental
          wire-sniffing. The name of a file may follow the
          <literal>crypt</literal> keyword that contains a list of users
          that this record pertains to. -->

          <literal>password</literal>メソッドと同様ですが、パスワードは、簡単なチャレンジレスポンスプロトコルを使って暗号化されて送られます。これは暗号手法的には安全ではありませんが、偶発的な盗聴の問題には対応できます。<literal>crypt</literal>キーワードに続く名前のファイルには、このレコードが対応するユーザーのリストが含まれます。
         </para>
        </listitem>
       </varlistentry>

       <varlistentry>
        <term>krb4</>
        <listitem>
         <para>
          <!-- 
          Kerberos V4 is used to authenticate the user. This is only
          available for TCP/IP connections. -->

          ユーザーを認証するためにKerberos V4が使われます。これはTCP/IP接続のみに有効です。
         </para>
        </listitem>
       </varlistentry>

       <varlistentry>
        <term>krb5</term>
        <listitem>
         <para>
          <!-- Kerberos V5 is used to authenticate the user. This is only
          available for TCP/IP connections. -->

          ユーザーを認証するためにKerberos V5が使われます。これはTCP/IP接続のみに有効です。
         </para>
        </listitem>
       </varlistentry>

       <varlistentry>
        <term>ident</term>
        <listitem>
         <para>
          <!-- 
          The ident server on the client host is asked for the identity
          of the connecting user. <productname>Postgres</productname>
          then verifies whether the so identified operating system user
          is allowed to connect as the database user that is requested.
	  This is only available for TCP/IP connections.
          The <replaceable>authentication option</replaceable> following
          the <literal>ident</> keyword specifies the name of an
          <firstterm>ident map</firstterm> that specifies which operating
          system users equate with which database users. See below for
          details. -->

          接続しようとするユーザーの身元を、クライアントホスト上のidentサーバーに尋ねます。それから、<productname>Postgres</productname>は、身元確認されたそのオペレーティングシステムのユーザーが、要求されたデータベースユーザーとして接続することが許可されるかどうかを確認します。これはTCP/IP接続のみに有効です。<literal>ident</>キーワードの後の<replaceable>認証オプション</replaceable>は、どのオペレーティングシステムユーザーがどのデータベースユーザーに等しくなるかを指定する<firstterm>ident map</firstterm>の名前を指定します。詳しい情報は下記も参照してください。
         </para>
        </listitem>
       </varlistentry>
      </variablelist>

     </listitem>
    </varlistentry>

    <varlistentry>
     <term><replaceable>authentication option</replaceable></term>
     <listitem>
      <para>
       <!-- This field is interpreted differently depending on the
       authentication method, as described there. -->
       このフィールドは、次に説明するように、認証メソッドによって異なった解釈をされます。
      </para>
     </listitem>
    </varlistentry>
   </variablelist>

<para>
   <!-- 
   The first record that matches a connection attempt's client IP address
   and requested database name is used to do the authentication step.
   There is no <quote>fall-through</> or <quote>backup</>: if
   one record is chosen and the
   authentication fails, the following records are not considered. If
   no record matches, the access will be denied. -->

   接続を試みるクライアントIPアドレスと要求されるデータベース名に一致する最初のレコードが認証過程に使われます。<quote>通過</>や<quote>バックアップ</>はありません。もし1つのレコードが選ばれ認証が失敗すれば、次のレコードは検討されません。もし、一致するレコードがなければ、アクセスは拒否されます。

  </para>

  <para>
   <!-- 
   The <filename>pg_hba.conf</filename> file is re-read during each
   connection attempt. It is therefore trivial to modify access
   permissions while the server is running: just edit the file. -->

   <filename>pg_hba.conf</filename>ファイルは、接続の試みのたびに再読み込まれます。つまり、サーバーが動いている間にアクセス許可を変えることは簡単で、ファイルを編集するだけでできます。

  </para>

  <para>
   <!-- 
   An example of a <filename>pg_hba.conf</filename> file is shown in
   <xref linkend="example-pg-hba.conf">. See below for details on the
   different authentication methods. -->

   <filename>pg_hba.conf</filename>ファイルの一例を<xref linkend="example-pg-hba.conf">に示します。異なる認証メソッドの詳細についてはその後で解説します。</para>

   <example id="example-pg-hba.conf">
    <title><!--An example <filename>pg_hba.conf</filename> file-->
          <filename>pg_hba.conf</filename>ファイルの例<indexterm><primary>pg_hba.conf</primary></indexterm>
    </title>

<programlisting>
# TYPE       DATABASE    IP_ADDRESS    MASK               AUTHTYPE  MAP
<!-- # Allow any user on the local system to connect to any
# database under any username, but only via an IP connection: -->
# ローカルシステム上のすべてのユーザーが、どのデータベースにどのユーザー名
# でも接続することを許可しますが、IP接続を通してのみです。

host         all         127.0.0.1     255.255.255.255    trust

<!-- # The same, over Unix-socket connections: -->
#  Unix-socket接続で、同上。

local        all                                          trust

<!-- # Allow any user from any host with IP address 192.168.93.x to
# connect to database "template1" as the same username that ident on that
# host identifies him as (typically his Unix username): -->
# IPアドレス192.168.93.xを持つすべてのホストのすべてのユーザーから
# データベース「template1」へ、そのホストのidentが身元確認したのと
# 同じユーザー名（典型的にはUnixユーザー名）で接続することを許可します。
 
host         template1   192.168.93.0  255.255.255.0      ident     sameuser

<!-- 
# Allow a user from host 192.168.12.10 to connect to database "template1"
# if the user's password in pg_shadow is correctly supplied: -->
# pg_shadowの中のユーザーのパスワードが正しく与えられると、
# ホスト192.168.12.10のユーザーからデータベース「template1」
# へ接続することを許可します。

host         template1   192.168.12.10 255.255.255.255    crypt

<!-- # In the absence of preceding "host" lines, these two lines will reject
# all connection attempts from 192.168.54.1 (since that entry will be
# matched first), but allow Kerberos V5-validated connections from anywhere
# else on the Internet. The zero mask means that no bits of the host IP
# address are considered, so it matches any host: -->
# 先行する「host」行がなければ、これらの2行は192.168.54.1
# （この項目が最初に合うためです）からの接続の試みをすべて拒否しますが、
# それ以外のインターネットのどこからでもKerberos V5で検証された
# 接続は許可します。0マスクは、ホストIPアドレスのビットが 
# 検討されず、どのホストにも一致することを意味します。

host         all        192.168.54.1   255.255.255.255    reject
host         all        0.0.0.0        0.0.0.0            krb5

<!-- # Allow users from 192.168.x.x hosts to connect to any database, if they
# pass the ident check.  If, for example, ident says the user is "bryanh"
# and he requests to connect as PostgreSQL user "guest1", the connection
# is allowed if there is an entry in pg_ident.conf for map "omicron" that
# says "bryanh" is allowed to connect as "guest1": -->
# 192.168.x.xホストからのユーザーが、もし、identチェックに通れば、
# どのデータベースにでも接続できるよう許可します。たとえばもし、「bryanh」が
# 「guest1」として接続することを許すとういう記載「omicron」がマップ
# pg_ident.confにあって、identがユーザーは確かに「bryanh」だというと、
# 彼がPostgreSQLユーザー「guest1」として接続を要求すればその接続は
# 許可されます。


host         all        192.168.0.0    255.255.0.0        ident     omicron
</programlisting>
   </example>
 </sect1>

 <sect1 id="auth-methods">
  <!-- <title>Authentication methods</title> -->
  <title>認証メソッド</title>
<indexterm><primary sortas="にんしょう">認証</primary><secondary sortas="めそっど">メソッド</secondary></indexterm>
<indexterm><primary>PostgreSQL</primary><secondary sortas="にんしょうめそっど">認証メソッド</secondary></indexterm>
  <para>
   <!-- The following describes the authentication methods in detail. -->
   以下では、認証メソッドについて詳細に説明します。
  </para>

  <sect2>
   <!-- <title>Password authentication</title> -->
   <title>パスワード認証</title>
<indexterm><primary sortas="ぱすわーどにんしょう">パスワード認証</primary></indexterm>
<indexterm><primary>PostgreSQL</primary><secondary sortas="にんしょうめそっど">認証メソッド</secondary><tertiary sortas="ぱすわーどにんしょう">パスワード認証</tertiary></indexterm>
   <para>
    <!-- 
    <productname>Postgres</> database passwords are separate from any
    operating system user passwords. Ordinarily, the password for each
    database user is stored in the pg_shadow system catalog table.
    Passwords can be managed with the query language commands
    <command>CREATE USER</command> and <command>ALTER USER</command>,
    e.g., <userinput>CREATE USER foo WITH PASSWORD
    'secret';</userinput>. By default, that is, if no password has
    been set up, the stored password is <literal>NULL</literal>
    and password authentication will always fail for that user. -->

    <productname>Postgres</>データベースパスワードはどのオペレーティングシステムのユーザーパスワードとも別のものです。通常、それぞれのデータベースユーザーのパスワードはpg_shadowシステムカタログテーブルの中に格納されます。パスワードは問い合わせ言語のコマンド<command>CREATE USER</command>と<command>ALTER USER</command>を使って管理できます（たとえば<userinput>CREATE USER foo WITH PASSWORD 'secret';</userinput>）。デフォルトではもしパスワードが設定されない場合、格納されるパスワードは<literal>NULL</literal>になり、そのユーザーのパスワード認証は常に失敗します。
   </para>

   <para>
    <!--  
    To restrict the set of users that are allowed to connect to
    certain databases, list the set of users in a separate file (one
    user name per line) in the same directory that
    <filename>pg_hba.conf</> is in, and mention the (base) name of the
    file after the <literal>password</> or <literal>crypt</> keyword,
    respectively, in <filename>pg_hba.conf</>. If you do not use this
    feature, then any user that is known to the database system can
    connect to any database (so long as he passes password
    authentication, of course). -->

    特定のデータベースに接続することを許可するユーザーの集合を制限するために、<filename>pg_hba.conf</>がある場所と同じディレクトリに、別のファイルとしてユーザーの集合をリストアップし（1行に1ユーザー）、<filename>pg_hba.conf</>の中の<literal>password</>もしくは<literal>crypt</>キーワードのいずれかの後ろに（基本）ファイル名を挙げます。もしこの機能を使わなければ、データベースシステムに認識されるすべてのユーザーはすべてのデータベースに接続することができます（もちろん、そのユーザーがパスワード認証を通る限りは）。
   </para>

   <para>
    <!-- 
    These files can also be used to apply a different set of passwords
    to a particular database or set thereof. In that case, the files
    have a format similar to the standard Unix password file
    <filename>/etc/passwd</filename>, that is, -->

    これらのファイルは、異なるパスワードの集合を特定のデータベースもしくはその集合に適用するために使われます。その場合、ファイルは標準Unixパスワードファイル<filename>/etc/passwd</filename>に似たフォーマットを持ち、下記のようになります。
</para>

<synopsis>
<replaceable>username</replaceable>:<replaceable>password</replaceable>
</synopsis>


<para>
    <!-- 
    Any extra colon separated fields following the password are
    ignored. The password is expected to be encrypted using the
    system's <function>crypt()</function> function. The utility
    program <application>pg_passwd</application> that is installed
    with <productname>Postgres</productname> can be used to manage
    these password files. -->

    パスワードの後にコロンで区切られたフィールドがあってもすべて無視されます。パスワードはシステムの<function>crypt()</function>関数を使って暗号化されることになっています。<productname>Postgres</productname>と一緒にインストールされるユーティリティプログラム<application>pg_passwd</application>を、これらのパスワードファイルを管理するために使うことができます。

   </para>

   <para>
    <!-- 
    Lines with and without passwords can be mixed in secondary
    password files. Lines without password indicate use of the main
    password in <literal>pg_shadow</> that is managed by
    <command>CREATE USER</> and <command>ALTER USER</>. Lines with
    passwords will cause that password to be used. A password entry of
    <quote>+</quote> also means using the pg_shadow password. -->

    パスワードがある行とない行は、二次のパスワードファイルの中で混在させることができます。パスワードがない行は、<command>CREATE USER</>と<command>ALTER USER</>によって管理される<literal>pg_shadow</>の中のメインパスワードを使用することを示します。パスワードがある行はそのパスワードが使われるようになります。<quote>+</quote>というパスワード入力もやはりpg_shadowのパスワードが使われることを意味します。

   </para>

   <para>
    <!-- Alternative passwords cannot be used when using the
    <literal>crypt</> method. The file will still be evaluated as
    usual but the password field will simply be ignored and the
    <literal>pg_shadow</> password will be used. -->

    <literal>crypt</>メソッドを使う場合、代替パスワードを使うことはできません。ファイルは通常どおり評価されますが、パスワードフィールドは単に無視され<literal>pg_shadow</>のパスワードが使われます。
   </para>

   <para>
    <!--  
    Note that using alternative passwords like this means that one can
    no longer use <command>ALTER USER</command> to change one's
    password. It will still appear to work but the password one is
    actually changing is not the password that the system will end up
    using. -->

    このように代替パスワードを使うことは、パスワードを変更するために<command>ALTER USER</command>を使うことができなくなることを意味します。一見できているように見えますが、変えられたパスワードはシステムが最終的に使うことになるパスワードではありません。
   </para>

  </sect2>

  <sect2 id="kerberos-auth">
   <!-- <title>Kerberos authentication</title> -->
   <title>Kerberos認証</title>
<indexterm><primary sortas="Kerberosにんしょう">Kerberos認証</primary></indexterm>
<indexterm><primary>PostgreSQL</primary><secondary sortas="にんしょうめそっど">認証メソッド</secondary><tertiary sortas="Kerberosにんしょう">Kerberos認証</tertiary></indexterm>
   <para>
    <!-- 
    <productname>Kerberos</productname> is an industry-standard secure
    authentication system suitable for distributed computing over a
    public network. A description of the
    <productname>Kerberos</productname> system is far beyond the scope
    of this document; in all generality it can be quite complex (yet
    powerful). The <ulink
    url="http://www.nrl.navy.mil/CCS/people/kenh/kerberos-faq.html">Kerberos
    <acronym>FAQ</></ulink> or <ulink
    url="ftp://athena-dist.mit.edu">MIT Project Athena</ulink> can be
    a good starting point for exploration. Several sources for
    <productname>Kerberos</> distributions exist. -->

    <productname>Kerberos</productname>は業界標準の安全な認証システムで、公開ネットワークを越えた分散計算システムに適しています。<productname>Kerberos</productname>システムの説明はこの文書の範囲外で、全般的にとても複雑（しかし強力な）ものになり得ます。<ulink url="http://www.nrl.navy.mil/CCS/people/kenh/kerberos-faq.html">Kerberos <acronym>FAQ</></ulink><![%book-publish;[（http://www.nrl.navy.mil/CCS/people/kenh/kerberos-faq.html）]]>もしくは<ulink url="ftp://athena-dist.mit.edu">MITアテネプロジェクト</ulink><![%book-publish;[（ftp://athena-dist.mit.edu/）]]>は探策を始めるのによい場所となるでしょう。<productname>Kerberos</>いくつか配布版のソースが存在します。
   </para>

   <para>
    <!-- 
    In order to use <productname>Kerberos</>, support for it must be
    enabled at build time. Both Kerberos 4 and 5 are supported
    (<literal>./configure __with-krb4</> or <literal>./configure
    __with-krb5</> respectively). -->

    <productname>Kerberos</>を使うためには、構築時にそのサポートが使用可能になっていなければいけません。Kerberos 4と5の両方ともサポートされています（<literal>./configure --with-krb4</>もしくは<literal>./configure --with-krb5</>のどちらかです）。
   </para>

   <para>
    <!-- 
    <productname>Postgres</> should operate like a normal Kerberos
    service. The name of the service principal is normally
    <literal>postgres</literal>, unless it was changed during the
    build. Make sure that your server key file is readable (and
    preferably only readable) by the Postgres server account (see
    <xref linkend="postgres-user">). The location of the key file
    is specified with the <varname>krb_server_keyfile</> run time
    configuration parameter. (See also <xref linkend="runtime-config">.)
    The default is <filename>/etc/srvtab</> if you are using Kerberos 4
    and <filename>FILE:/usr/local/pgsql/etc/krb5.keytab</> (or whichever
    directory was specified as <varname>sysconfdir</> at build time)
    with Kerberos 5. -->

    <productname>Postgres</>は通常のKerberosサービスと同じように動作するはずです。ビルド時に変えなければ、サービスプリンシパルの名前は普通<literal>postgres</literal>です。サーバーキーファイルがPostgresサーバーアカウントから読み込み可能（読み込みのみ可能なのが好ましい）であることを確認してください（<xref linkend="postgres-user">を参照）。キーファイルの場所は<varname>krb_server_keyfile</>実行時設定パラメータで指定されます（<xref linkend="runtime-config">も参照してください）。デフォルトでは、Kerberos 4を使っている場合は<filename>/etc/srvtab</>で、Kerberos 5を使う場合は<filename>FILE:/usr/local/pgsql/etc/krb5.keytab</>（もしくはビルド時に<varname>sysconfdir</>が指定したディレクトリ）です。

   </para>

   <para>
    <!-- To generate the keytab file, use for example (with version 5)
    -->
    keytabファイルを作成するためには、たとえば（version 5では）以下のようにします。</para>

<screen>
<prompt>kadmin% </><userinput>ank -randkey postgres/server.my.domain.org</>
<prompt>kadmin% </><userinput>ktadd -k krb5.keytab postgres/server.my.domain.org</>
</screen>
    <!-- Read the <productname>Kerberos</> documentation for defails.
    -->
<para>詳細は<productname>Kerberos</>のドキュメントを参照してください。</para>

   <para>
    <!-- 
    In the <productname>Kerberos</> 5 hooks, the following assumptions
    are made about user and service naming: -->

    <productname>Kerberos</> 5のフックの中では、ユーザーとサービスの名前について以下が仮定されます。</para>

    <itemizedlist>
     <listitem>
      <para>
       <!-- 
       User principal names (anames) are assumed to contain the actual
       Unix/<productname>Postgres</> user name in the first component.
       -->
       ユーザーのプリンシパル名（anames）は、実際のUnix/<productname>Postgres</>ユーザー名を第1要素として含むと仮定されます。

      </para>
     </listitem>
     <listitem>
      <para>
       <!-- 
       The <productname>Postgres</> service is assumed to be have two
       components, the service name and a hostname, canonicalized as
       in Version 4 (i.e., with all domain suffixes removed). -->

      <productname>Postgres</>サービスは、Version 4で正規化されたように2つの要素（サービス名とホスト名）を持つことが仮定されます（つまり、すべてのドメイン接尾辞が削除された状態）。
      </para>
     </listitem>
    </itemizedlist>

    <informaltable>
<!--<title>ユーザー名/サービス名の例</title>-->
     <tgroup cols="2">
      <thead>
       <row>
        <!-- <entry>Parameter</>
	<entry>Example</> -->
        <entry>パラメータ</>
	<entry>例</>
       </row>
      </thead>
      <tbody>
       <row>
	<entry>user</>
	<entry>frew@S2K.ORG</>
       </row>
       <row>
	<entry>user</>
	<entry>aoki/HOST=miyu.S2K.Berkeley.EDU@S2K.ORG</>
       </row>
       <row>
	<entry>host</>
	<entry>postgres_dbms/ucbvax@S2K.ORG</>
       </row>
      </tbody>
     </tgroup>
    </informaltable>

   <para>
    <!-- If you use mod_auth_krb and mod_perl on your Apache web server,
    you can use AuthType KerberosV5SaveCredentials with a mod_perl
    script. This gives secure database access over the web, no extra
    passwords required. -->

    もしApache Webサーバー上でmod_auth_krbとmod_perlを使う場合、mod_perlスクリプトでAuthType KerberosV5SaveCredentialsを使うことができます。これは、Web上で安全なデータベースアクセスを保証し、余計なパスワードは要求されません。
   </para>

  </sect2>

  <sect2>
   <!-- <title>Ident-based authentication</title> -->
   <title>Identベースの認証</title>
<indexterm><primary sortas="Identべーすのにんしょう">Identベースの認証</primary></indexterm>
<indexterm><primary>PostgreSQL</primary><secondary sortas="にんしょうめそっど">認証メソッド</secondary><tertiary sortas="Identべーすのにんしょう">Identベースの認証</tertiary></indexterm>
   <para>
    <!-- 
    The <quote>Identification Protocol</quote> is described in
    <citetitle>RFC 1413</citetitle>. Virtually every Unix-like
    operating system ships with an ident server that listens on TCP
    port 113 by default. The basic functionality of an ident server
    is to answer questions like <quote>What user initiated the
    connection that goes out of your port <replaceable>X</replaceable>
    and connects to my port <replaceable>Y</replaceable>?</quote>.
    Since <productname>Postgres</> knows both <replaceable>X</> and
    <replaceable>Y</> when a physical connection is established, it
    can interrogate the ident server on the host of the connecting
    client and could theoretically determine the operating system user
    for any given connection this way. -->

    <quote>身元確認（Identification）プロトコル</quote>については<citetitle>RFC 1413</citetitle>で説明されています。事実上すべてのUnixライクなオペレーティングシステムの配布にはidentサーバーが付属していて、デフォルトでTCPポート113を監視しています。identサーバーの基本的な機能性は<quote>どのユーザーがポート<replaceable>X</replaceable>からの接続を開始し、自分のポート<replaceable>Y</replaceable>に接続するのか？</quote>というような質問に答えることです。<productname>Postgres</>は物理的な接続が確立されたときに<replaceable>X</>と<replaceable>Y</>の両方を認識するので、接続するクライアントのホスト上のidentサーバーに応答指令信号を送ることができ、理論的には、この方法で与えられたどの接続にもオペレーティングシステムユーザーを決定できます。

   </para>

   <para>
    <!-- 
    The drawback of this procedure is that it depends on the integrity
    of the client: if the client machine is untrusted or compromised
    an attacker could run just about any program on port 113 and
    return any user name he chooses. This authentication method is
    therefore only appropriate for closed networks where each client
    machine is under tight control and where the database and system
    administrators operate in close contact. Heed the warning: -->

    このプロシージャの欠点は、クライアントの正直さに頼るところが大きいということです。もしクライアントマシンが信用されない、もしくは信用を失った場合、襲撃者はポート113上でほぼどんなプログラムでも実行することができ、どのユーザー名でも好きに選んで返すことができるのです。したがってこの認証メソッドは、各々のクライアントマシンが厳格な管理下にあり、データベースとシステム管理者が密接に連絡をとりあって動作している、外界から閉ざされたネットワークにのみ適しているといえます。次の警告に注意してください。</para>


    <blockquote>
     <attribution>RFC 1413</attribution>
     <para>
       
      The Identification Protocol is not intended as an authorization
      or access control protocol.</para>
     <para>
      ――身元確認プロトコルは、認証、あるいはアクセス管理プロトコルにすることは意図されていません――
     </para>
    </blockquote>

   <para>
    <!-- 
    When using ident-based authentication, after having determined the
    operating system user that initiated the connection,
    <productname>Postgres</productname> determines as what database
    system user he may connect. This is controlled by the ident map
    argument that follows the <literal>ident</> keyword in the
    <filename>pg_hba.conf</filename> file. The simplest ident map is
    <literal>sameuser</literal>, which allows any operating system
    user to connect as the database user of the same name (if the
    latter exists). Other maps must be created manually. -->

    identベースの認証を使う場合、接続を開始したオペレーティングシステムユーザーを決定すると、<productname>Postgres</productname>はどのデータベースシステムユーザーに接続してよいかを決定します。これは<filename>pg_hba.conf</filename>ファイルの中の<literal>ident</>キーワードの後にくるidentマップ引数によって制御されます。最も単純なidentマップは<literal>sameuser</literal>で、これはどのオペレーティングシステムユーザーでも、同じ名前を持つデータベースユーザーとして接続できるように許可するものです。その他のマップは手動で作らなければいけません。
   </para>

   <para>
    <!--  
    Ident maps are held in the file <filename>pg_ident.conf</filename>
    in the data directory, which contains lines of the general form:
    -->
    identマップは、一般的なフォームの行を含むデータディレクトリの中のファイル<filename>pg_ident.conf</filename>の中にあります。</para>


<synopsis>
<replaceable>map-name</> <replaceable>ident-username</> <replaceable>database-username</>
</synopsis>


<para>
    <!-- Comments and whitespace are handled in the usual way.
    The <replaceable>map-name</> is an arbitrary name that will be
    used to refer to this mapping in <filename>pg_hba.conf</filename>.
    The other two fields specify which operating system user is
    allowed to connect as which database user. The same
    <replaceable>map-name</> can be used repeatedly to specify more
    user-mappings. There is also no restriction regarding how many
    database users a given operating system may correspond to and vice
    versa. -->

    コメントと空白は通常の方法で扱われます。<replaceable>map-name</>は<filename>pg_hba.conf</filename>の中でこのマッピングを参照するために使われる任意の名前です。他の2つのフィールドはどのオペレーティングシステムユーザーがどのデータベースユーザーで接続することが許可されるかを指定します。同じ<replaceable>map-name</>を、別のユーザーマッピングを指定するためにくり返し使うことができます。さらに、与えられたオペレーティングシステムが何人のデータベースユーザーに対応できるか、またはその逆、に関する制限はありません。
   </para>

   <para>
    <!-- 
    A <filename>pg_ident.conf</filename> file that could be used in
    conjunction with the <filename>pg_hba.conf</> file in <xref
    linkend="example-pg-hba.conf"> is shown in <xref
    linkend="example-pg-ident.conf">. In this example setup, anyone
    logged in to a machine on the 192.168 network that does not have
    the Unix user name bryanh, ann, or robert would not be granted access.
    Unix user robert would only be allowed access when he tries to
    connect as Postgres user <quote>bob</quote>, not as <quote>robert</quote>
    or anyone else. <quote>ann</quote> would only be allowed to connect as
    <quote>ann</>. User bryanh would be allowed to connect as either
    <quote>bryanh</> himself or as <quote>guest1</>. -->

    <xref linkend="example-pg-hba.conf">の中で<filename>pg_hba.conf</>と結合して使うことができる<filename>pg_ident.conf</filename>は<xref linkend="example-pg-ident.conf">で示されています。この設定の例では、192.168ネットワーク上のマシンにログインしたUnixユーザー名bryanh、ann、robertという名前を持たない人はアクセス権限が認められません。Unixユーザーrobertは、<quote>robert</quote>やその他ではなくPostgresユーザー<quote>bob</quote>として接続するときのみ許可されます。<quote>ann</quote>は<quote>ann</quote>としてのみ接続が許可されます。ユーザーbryanhは、<quote>bryanh</>自身もしくは<quote>guest1</>として接続が許可されます。

   </para>

   <example id="example-pg-ident.conf">
    <!-- <title>An example <filename>pg_ident.conf</> file</title> -->
    <title><filename>pg_ident.conf</>ファイルの例</title><indexterm><primary>pg_ident.conf</primary></indexterm>
<programlisting>
#MAP           IDENT-NAME   POSTGRESQL-NAME

omicron        bryanh       bryanh
omicron        ann          ann
<!--# bob has username robert on these machines-->
# bobはこのマシン場でユーザー名robertを持ちます
omicron        robert       bob
<!--# bryanh can also connect as guest1-->
# bryanhはguest1としても接続できます
omicron        bryanh       guest1
</programlisting>
   </example>
  </sect2>
 </sect1>

  <sect1 id="client-authentication-problems">
   <!-- <title>Authentication problems</title> -->
   <title>認証の問題</title>
<indexterm><primary sortas="にんしょう">認証</primary></indexterm>

   <para>
    <!-- 
    Genuine authentication failures and related problems generally
    manifest themselves through error messages like the following.
    -->

    本当の認証エラーとそれに関連する問題は、一般的に以下のようなエラーメッセージを通して明示されます。
   </para>

<programlisting>
No pg_hba.conf entry for host 123.123.123.123, user joeblow, database testdb
</programlisting>
    <!-- This is what you are most likely to get if you succeed in
    contacting the server, but it doesn't want to talk to you. As the
    message suggests, the server refused the connection request
    because it found no authorizing entry in its <filename>pg_hba.conf</filename>
    configuration file. -->

<para>これは、サーバーとの連絡に成功はしたものの接続を拒否された場合に表示される可能性があるものです。メッセージが暗示するようにサーバーは接続要求を拒否しました。なぜなら<filename>pg_hba.conf</filename>に認定する記載を見つけることができなかったからです。

   </para>

<programlisting>
Password authentication failed for user 'joeblow'
</programlisting>
    <!-- 
    Messages like this indicate that you contacted the server, and
    it's willing to talk to you, but not until you pass the
    authorization method specified in the
    <filename>pg_hba.conf</filename> file. Check the password you're
    providing, or check your Kerberos or IDENT software if the
    complaint mentions one of those authentication types. -->

<para>このようなメッセージは、サーバーと連絡し接続することは可能だが、<filename>pg_hba.conf</filename>ファイルの中で指定される認定メソッドを通らなくてはいけないことを表します。提供したパスワードを確認するか、もしエラーが下記の認証型のどれかだった場合はKerberosあるいはIDENTソフトウェアを確認してください。
   </para>

<programlisting>
FATAL 1:  user "joeblow" does not exist
</programlisting>
    <!-- The indicated user name was not found in pg_shadow. -->
<para>表示されたユーザー名はpg_shadowでは見つかりませんでした。
   </para>

<programlisting>
FATAL 1:  Database "testdb" does not exist in the system catalog.
</programlisting>
    <!-- 
    The database you're trying to connect to doesn't exist. Note that
    if you don't specify a database name, it defaults to the database
    user name, which may or may not be the right thing. -->

<para>接続しようとしているデータベースは存在しません。データベース名を指定しなければ、それが望む望まざるにかかわらず、データベースユーザー名がデフォルトとなることに注意してください。
   </para>
  </sect1>

 </chapter>
