RAW
ハッシュされたパスワードがの列に格納されていると仮定すると、SQLステートメントをuser_login_table
呼び出すだけで済みます。dbms_crypto.hash
最初のハッシュをどのように行っているか(特に、プレーンテキストのパスワードをどのように変換しているRAW
か、どのアルゴリズムとオプションを使用しているか)に応じて、このようなものが機能します
select *
from user_login_table
where password = dbms_crypto.hash( utl_i18n.string_to_raw( 'MYPassword', 'AL32UTF8' ),
<<whatever hash algorithm you want to use>> );
もちろん、優れたコーディング慣行の一般的な問題として、パスワードをハッシュする独自の関数を定義して、文字列をaに変換しRAW
、ハッシュアルゴリズムを1か所で指定する方法のロジックを埋め込むことができるようにする必要があります。次に、SQLステートメントからその新しい関数を呼び出します。これは、おそらく適切な塩も追加する関数です。次に、その関数を使用して、テーブル内のハッシュデータの初期シードを実行し、将来的にパスワードハッシュを検証します。
また、実際のクエリには、username
パスワードに加えて述語が含まれていると思います
select *
from user_login_table
where password = new_function_name( 'MYPassword' )
and username = 'YourUserName'
それ以外の場合、投稿したクエリは、パスワードがログインしようとした特定の人ではなく、データベース内の誰かのパスワードと一致することを検証するだけです。さらに、2人が同じパスワードハッシュを持っている場合、複数の行が返されます。
したがって、あなたの特定のケースでは、新しい関数を作成したいと思うでしょうhash_password
CREATE OR REPLACE function MUNGAI.hash_password(par_username in varchar2,
par_password in varchar2,
par_work in varchar2
)
return raw
is
l_hash raw(2000);
begin
l_hash :=
dbms_crypto.hash
(utl_i18n.string_to_raw (par_password || par_work || upper(par_username),
'AL32UTF8'
),
dbms_crypto.hash_sh1
);
return l_hash;
end;
次に、挿入プロシージャからこの関数を呼び出します
CREATE OR REPLACE procedure MUNGAI.p_auth_insert_user (par_username in varchar2,
par_password in varchar2,
par_work in varchar2
)
is
l_hash raw(2000);
begin
l_hash := hash_password( par_username, par_password, par_work );
insert into user_login_table
(user_name, p_word, work_class)
values
(par_username, l_hash, par_work);
end p_auth_insert_user;
/
クエリは次のようになります
select *
from user_login_table
where password = new_function_name( username,
'MYPassword',
<<whatever `par_work` is supposed to be>> )
and username = 'YourUserName'