0

定義済みの関数 (login(pass, login)、get_users_you_are_in_charge_off(login, pass) など) を使用するデータベース ユーザーを作成したいと考えています。

これは誰にでも開かれている必要があるため、そのユーザーのみが事前定義された機能を実行できるようにする db ユーザー/グループ ロールを作成したいと考えています。

問題は、これらの関数が SELECT、UPDATE、INSERT を使用していることです。そして、関数を実行する権限のみを与えると、それを行う権限がないというエラーがスローされます。

何か案は?(たぶん、関数内の役割を静的に変更できますか?)

// コメントのいくつかに答えるには 1 番目のコメントへ: わかりました。ありがとう。OK、あなたの答えをありがとう、それはまさに私が必要としているものです. ユーザー「plundra」に感謝します!

2番目のコメントへ:すでにテーブルまたはユーザー(ログイン付き)があります。しかし、関数 checkLogin(name, pass) を作成すると、その関数はテーブル users から選択する必要があります。また、ユーザーに SELECTS を実行する権利を与えないと、機能しません。私が権利を与えた場合、ユーザーは SELECT * from users; を実行できます。パスワードが何であるかを確認します。

OK、回答ありがとうございます。最初のコメントはまさに私が必要としているものです。ユーザー「plundra」に感謝します!

4

2 に答える 2

1

答えは、パスワードをデータベースに保存しないことです。

代わりに、ソルトとパスワード ハッシュ (両方のテキスト フィールド) を保存します。

新しいユーザーを作成するときは、ソルトをランダムに作成し、選択したパスワードをそれでハッシュして、ハッシュを保存します。

誰かを認証するには、入力したパスワード、ユーザー レコードに保存されているソルトを取得し、ハッシュ アルゴリズム (SHA1 など) を実行して、保存されているハッシュと比較します。

概念は簡単ですが、詳細はあなたを悩ませる可能性があるため、これには他の誰かのコードを使用する価値があります。

于 2010-11-10T18:48:27.297 に答える
0

postgresql.org/docs/current/static/sql-createfunction.html で「SECURITY DEFINER」を確認してください。

ユーザー plundra によって回答されました。それが私が必要としていたものです、ありがとう:)

于 2010-11-10T19:00:30.963 に答える