pgcrypto
を使用してpostgreテーブルの列を暗号化しています。 postgreのバージョンは9.5.1です。 pgp_sym_encrypt()
を使用して暗号化し、pgp_sym_decrypt()
を使用して復号化する方法を理解しました。私の問題は、キーを非表示にしておく方法を理解することです。
返されたデータをアプリケーションで復号化しないようにしています。このテーブルのデータは、誰かがテーブル全体(450,000行)を表示してデータをまとめることができる場合にのみ機密性が高いため、復号化されたアプリケーションにデータを返すことができます。
PgAdminでは、クエリにこれがあります
SELECT pgp_sym_decrypt(column1,'password')
当然のことながら、アプリケーションが使用するクエリテンプレートにパスワードを格納し、クエリが実行されるたびに渡すようにしたくありません。何かアイデアをいただければ幸いです。
サーバーでの対称暗号化の欠点を回避する方法はありません。
「アプリケーションの復号化を回避する」には、PostgreSQLが鍵と暗号化されたデータにアクセスして復号化する必要があります。それを実行できるソースは2つしかありません。
もちろん、ウェブサーバーなどのデータへのアクセスポイントが1つしかない場合は、そこでも暗号化を解除して、キーをサーバーから切り離すことができます。
それで、私は好奇心が強いです、あなたは結局何をしましたか?
上記の好奇心を満たすためにコメントを回答に変換しています... :)
Iiが誤解しない限り:
アプリケーションがそのテーブルに対する行レベルの特権を持っていると仮定すると、使用できます
_SELECT pgp_sym_decrypt( column1, get_pswd(pkey) )
_
ここで、get_pswd(pkey)
は、特定のpkey行のパスワードを選択します。
また、各行のpkeyとパスワードを、アプリケーションが選択権限を持たない別のテーブルに保存できます。