私はpostgresql 8.4を使用していますが、ビューがデータベース機能のいずれかを使用しているときに別のユーザーが使用しているデータベースからのビューに対する選択権限を与えています。機能を使用するビューで選択を許可する
新しいユーザーとして、実行しようとすると、たとえばselect * from users_pwd;私は次のエラーを取得する
CREATE OR REPLACE FUNCTION get_pwd(p_id integer)
RETURNS text AS
$BODY$
declare u record;
BEGIN
select into u * from users where id = p_id;
return u.password;
END;
$BODY$
LANGUAGE plpgsql;
:
ERROR: permission denied for relation users
CONTEXT: SQL statement "select * from users where id = $1 "
PL/pgSQL function "get_pwd" line 3 at SQL statement
ビューがにあるユーザーのクエリを持っているための唯一の方法
create view users_pwd as
select *, get_pwd(id)
from users;
としてget_pwd:users_pwdは次のように定義されて私がしたくないテーブルユーザーに明示的にselectを与えます。
ビューで関数を使用するのではなく、新しいユーザーが明示的にアクセスできない他のテーブルだけであれば、完全に正常に動作します。