今回は、Silverの「運用管理 - 設定ファイル(pg_hba.conf)」からの出題です。
マシンcl1からユーザu2でデータベースdb1に接続するとき
マシンcl2からユーザu2でデータベースdb1に接続するとき
マシンcl2からユーザu2でデータベースdb2に接続するとき
マシンcl2からユーザu1でデータベースdb2に接続するとき
※この例題は実際のOSS-DB技術者認定試験とは異なります。
例題公開日:2021年11月2日
PostgreSQLではクライアント認証について、pg_hba.confというファイルで管理しています。hbaはHost-Based Authenticationの略で、ホストごとにどういう認証方式で接続を許可するか(あるいは接続を拒絶するか)を記述します。
TCP/IP経由での接続については、先頭にhost、それに続いてデータベース名、ユーザ名、クライアントのIPアドレス、認証方式をスペースで区切って1行に記述します。データベース名、ユーザ名、IPアドレスでマッチした行があれば(複数ある時は上の行が優先します)その行の認証方式が利用され、マッチする行がなければ接続は拒否されます。
データベース名、ユーザ名とも個別の名前を記述する、複数の名前をカンマで区切って記述する、あるいはすべてを意味するallと記述することができます。IPアドレスはIPv4の単一ホストは /32、複数のホストなら /24 などネットワークを指定します。あるいはホスト名を記述することもできます。
認証方式は、trustならパスワードなどの要求なしに接続許可します。パスワードで認証する場合はmd5と指定します。それ以外の認証方式もいろいろありますが、詳しくはマニュアルを参照してください。
次に例題のpg_hba.confの各設定行を見てみましょう。1行目は、ユーザu1がマシンcl1からデータベースdb1に接続するときは、パスワードなしに接続を許可するものです。2行目はユーザu2がマシンcl2からデータベースdb2に接続するときにパスワードを利用する、というものです。3行目はすべてのユーザについて、マシンcl1とcl2が含まれるネットワークからデータベースdb1に接続するときにパスワードを利用する、というものです。4行目はすべてのユーザについてマシンcl1とcl2が含まれるネットワークからデータベースdb2に接続するときに、パスワードなしに接続を許可するものです。
では、個々の選択肢を見てみましょう。Aは1行目そのものなので、パスワードは不要です。Bは4行目がマッチしますので、これもパスワードは不要です。Cは3行目がマッチするのでパスワードを要求します。Dも3行目がマッチするのでパスワードを要求します。Eは2行目と4行目の両方がマッチしますが、2行目が優先されるのでパスワードを要求します。Fは4行目がマッチするのでパスワードは不要です。
したがって正解はC、D、Eです。
本問は設定方法の理解について確認する問題なので、認証方式にtrustを使っていますが、現実のデータベース運用では、テスト用のデータベースに、特定の環境から接続する場合を除いて、trustを使うことはほとんどないでしょう。セキュリティの設計において重要なポイントとなる可能性があるので、どのような制限ができるのか、正しく理解しておいてください。
今回の解説について、理解できないポイントがあればどんどん質問をお寄せ下さい。
採用になった方にはLPI-Japanオリジナルの記念品を贈呈します。
※試験問題に関わるお問い合わせにつきましては、LPI-Japan事務局ではお応えできませんのでご了解ください。
© EDUCO All Rights Reserved.