質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Q&A

0回答

1544閲覧

postgresサーバーへのcrypt認証接続の方法

keeeen99

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

0グッド

0クリップ

投稿2020/06/19 11:01

編集2020/06/21 05:05

前提・実現したいこと

visual studio 2019でC#のwindowsフォームアプリケーションを作成しています。
postgresサーバーへの接続をフォームから行いたいのですが、うまくいきません。

npgsqlを使用して接続を試みているのですが、認証がうまくいかずエラーが帰ってきていしまいます。
⇒ crypt認証がサポートされていない?認証方法を選択できない?
⇒npgsqlではcrypt認証による接続はサポートされていないようでした。
そのため、他の方法でpostgres接続を実現する方法を探しています。

postgresサーバーの認証方法はcryptに設定されているのですが、こちらの変更はできない状況です。

postgresサーバーのpg_hba.confファイル
TYPE DATABASE USER ADDRESS METHOD
host all all xxx.xxx.xxx.xxx crypt

C#,vb,c++等でpostgresサーバーへのcrypt認証接続を実現する方法はないでしょうか?

発生している問題・エラーメッセージ

型 'System.NotSupportedException' のハンドルされていない例外が mscorlib.dll で発生しました Authentication method not supported (Received: AuthenticationCryptPassword)

該当のソースコード

C#

1var con = new NpgsqlConnection(sb.ConnectionString)

試したこと

npgsqlを使用したpostgres接続

補足情報(FW/ツールのバージョンなど)

postgresのバージョン ⇒ 8.3

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sazi

2020/06/21 01:08

> postgresサーバーの認証方法はcryptに設定 どのような設定内容ですか?
keeeen99

2020/06/21 04:14

postgresサーバーのpg_hba.confファイルの記述が TYPE DATABASE USER ADDRESS METHOD host all all xxx.xxx.xxx.xxx crypt となっています。 こちらを変更すれば接続可能だとは思うのですが、 他の機器からの接続の兼ね合いで変更できないようです。
sazi

2020/06/21 04:21 編集

暗号化の拡張を行っているなら、それで有効になるのかもしれませんが、 pg_hba.confにcryptの設定が可能という根拠資料はありますか?
sazi

2020/06/21 04:29 編集

pgcrypto を使用されているという事でしたら、暗号鍵によってopenしないと駄目ですけど。
keeeen99

2020/06/21 04:30

こちらが根拠資料となるかは不安ですが、、 https://www.postgresql.jp/document/8.2/html/auth-pg-hba-conf.html 上記にもcryptの設定に関しては記載がありました。 postgresのバージョンは8.3です。 古いですが、こちらも他機器接続都合の為となっています。 現在作成しているのは接続確認を行うためのテストツールになります。
sazi

2020/06/21 04:42 編集

8.3ですか。そんなに古いのなら、情報として特記しておくべきです。 使った事が無いので分かりませんけど、エラーはどんなものですか? リファレンスには、 > 注意: This option is recommended only for communicating with pre-7.2 clients. とあります。ここは大丈夫ですか?
keeeen99

2020/06/21 04:44

C#のアプリケーションから var con = new NpgsqlConnection(sb.ConnectionString) として接続を試みると、 型 'System.NotSupportedException' のハンドルされていない例外が mscorlib.dll で発生しました Authentication method not supported (Received: AuthenticationCryptPassword) となり接続に失敗してしまいます。
sazi

2020/06/21 04:52

npgsqlがCryptにサポートしていないというエラーにみえますけど。 その8.3に対して現行システムではどのようにアクセスしているのでしょう? npgsqlの実績があるのですか?
sazi

2020/06/21 04:56

npgsqlではpg_hba.confを参照しているようですけど、パスワード要求の場合は (plain or MD5)みたいですので、cryptには対応していないのだと思います。 https://www.npgsql.org/doc/security.html
keeeen99

2020/06/21 04:59

ご指摘の通りnpgsqlでは対応していないとのエラーかと思います。 ですのでnpgsql以外の方法でpostgres接続を実現する方法(もしくはnpgsqlでのcrypt接続方法)はないでしょうか?という趣旨の質問でした。質問内容がわかりづらく申し訳ありません。 現行システムは開発プラットフォームも全く違うのですが、念のため確認してみようと思います。
sazi

2020/06/21 05:13 編集

もう一度書きますけど、 リファレンスには、 > 注意: This option is recommended only for communicating with pre-7.2 clients. とあります。ここは大丈夫ですか? 既存システムの環境を確認するのは、何時でも必須です。 場合によっては古い環境でしかできない事もあったりしますので。
keeeen99

2020/06/21 05:15

申し訳ありません。こちらのコメントを見落としておりました。 こちらの設定値の是非に関しては別途検討する必要があるかと思います。ご指摘ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問