2017-12-05 16 views
0

今後のWebアプリケーションのユーザーが、Webサイトのユーザー名とパスワードを使用してpostgresデータベースにログインできるようにします。ウェブサイト認証にpostgresの役割とパスワードを使用するにはどうすればいいですか?

ウェブサイトはウェブサイトのユーザー名として利用できない特別なユーザー名(例:「web」)でポストグルに接続します。 (「ポストグル」などと同様)

まだユーザーやパスワードは存在しないため、移行の問題はありません。すべてのウェブサイトユーザーはpostgresユーザーになります。ウェブサイトはパスワードをハッシュすることができますが、postgresはパスワードをハッシュします

データの重複を最小限にしてこれを達成する最も賢明な方法は何ですか?

ユーザ名/パスワード認証の一般的なソースとして、postgresの内部ロールテーブルを使用/拡張できますか?つまり、与えられたユーザー名とパスワードの組み合わせが有効かどうかを私に知らせるクエリを実行できる必要があります。

または、ウェブサイトのユーザー名とパスワードを別々に保存して、これを使用するには何とかポストグルが必要ですか?

答えて

2

あなたは確かに選択

t=# select 'md5'||md5('somePass'||usename) = passwd from pg_shadow where usename = 'web'; 
?column? 
---------- 
t 
(1 row) 

で認証を確認することができますが、あなたは代わりにSQL文を使用して、直接pg_authidを操作することはできません、のような:

t=# create user web password 'somePass'; 
CREATE ROLE 

または

t=# alter user web password 'anotherP'; 
ALTER ROLE 
t=# select 'md5'||md5('somePass'||usename) = passwd from pg_shadow where usename = 'web'; 
?column? 
---------- 
f 
(1 row) 

t=# select 'md5'||md5('anotherP'||usename) = passwd from pg_shadow where usename = 'web'; 
?column? 
---------- 
t 
(1 row) 

と:

t=# drop user web; 
DROP ROLE 
t=# select 'md5'||md5('anotherP'||usename) = passwd from pg_shadow where usename = 'web'; 
?column? 
---------- 
(0 rows) 

のように、単に、アカウントの操作のためのwrapupsを作成し、アプリケーションとSUの役割を回避するために:セキュリティ定義は、新しい役割を作成するために、アプリのユーザーをALOWます

t=# create or replace function adduser(_u text,_p text) returns boolean as $$ 
begin 
execute format('create user %I password %L',_u,_p); 
return true; 
end; 
$$ language plpgsql security definer; 
CREATE FUNCTION 

t=# select adduser('web','newP'); 
adduser 
--------- 
t 
(1 row) 

t=# select 'md5'||md5('newP'||usename) = passwd from pg_shadow where usename = 'web'; 
?column? 
---------- 
t 
(1 row) 

は忘れてはいけませんいくつかのロジックと例外を追加するため、アプリケーションは既存のSUロール(パスワードを変更しないdropppingではない)と相互作用しません。

最後に、このような考えは危険だと思います。実装する前に計画してください。

0

https://www.postgresql.org/docs/9.6/static/catalog-pg-authid.html私は、ユーザ名とのmd5ハッシュを含むpg_authidテーブルについて書いています。

このテーブルを更新できるユーザーを作成したときに、このテーブルをWebサイトのログインに使用できるようにしたいと考えています。それは理想的ではないmd5の使用に私を制約します。

関連する問題