I 読み取り 暗号化を行うデータ型があるため、パスワードはデータベースで保護されます。
現時点では、varchar
を使用してパスワードを保存しています。パスワードにSHA-512関数を何らかの方法で適用し、プレーンテキストパスワードが削除されるようにそのデータをどこかに配置する必要があるという考えがありました。
ただし、Perlのデータ型から、PostgreSQLにはvarcharよりも優れた方法があることが示唆されています。
PostgreSQLのパスワードのデータ型は何ですか?
Jeffには おそらくパスワードを誤って保存している というタイトルの良い記事があります。この記事では、パスワードをデータベースに保存するさまざまな方法と、遭遇する可能性のある一般的な落とし穴について説明します。特に、ハッシングアルゴリズム、レインボーテーブル、および「ソルト」を使用して、パスワードファイルが侵害されるリスクを軽減する方法について説明します。
varchar
データ型の使用は、適切にハッシュされたパスワードを保存するのに最適です。たとえば、本番データベースからの実際のアカウントレコードの一部を次に示します。
=> account_id、email、salt、passhashを選択します。email= '[email protected]'; account_id |メール|塩|パスハッシュ ------------ + ------------------ + ------------ ------ + ------------------------------------------ 1 | [email protected] | GFR9uT4N4Tzl3vnK | 2c2bf00079a6d49a8f7fb17cefb52fdb41a4b043 (1行)
この場合、passhash
は、パスワードと連結されたソルトのSHA-1の16進表現です。
「chkpassモジュール」をインストールする
このモジュールは、暗号化されたパスワードを保存するために設計されたデータ型chkpassを実装します。 postgresql contribパッケージをインストールし、CREATE EXTENSIONコマンドを実行してインストールする必要があります。
Ubuntu 12.04では、次のようになります。
Sudo apt-get install postgresql-contrib
Postgresqlサーバーを再起動します。
Sudo /etc/init.d/postgresql restart
利用可能なすべての拡張機能は次のとおりです。
/opt/PostgreSQL/9.5/share/postgresql/extension/
これで、CREATE EXTENSIONコマンドを実行できます。
例:
CREATE EXTENSION chkpass;
CREATE TABLE accounts (username varchar(100), password chkpass);
INSERT INTO accounts(username, "password") VALUES ('user1', 'pass1');
INSERT INTO accounts(username, "password") VALUES ('user2', 'pass2');
select * from accounts where password='pass2';
返品
username | password
---------------------------
"user2" | ":Sy8pO3795PW/k"
Postgresバージョン9.4以降では、pgcrypto拡張機能を使用して、よりスマートで安全な方法でこれを行うことができます: http://www.meetspaceapp.com/2016/04/12/passwords-postgresql-pgcrypto.html =