私はpostgresql8.4を使用していますが、ビューがデータベース機能のいずれかを使用している場合に、別のユーザーがデータベースからのビューに選択権限を付与する際に少し問題があります。
新しいユーザーとして、実行しようとすると、たとえばselect * from users_pwd; ここで、users_pwdは次のように定義されます。
create view users_pwd as
select *, get_pwd(id)
from users;
およびget_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
ユーザーにビューをクエリさせる唯一の方法は、私がしたくないテーブルユーザーにselectを明示的に許可することです。
ビューが関数を使用せず、新しいユーザーが明示的にアクセスできない他のテーブルだけを使用する場合は、完全に正常に機能します。