我正在使用 postgresql 8.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
让用户查询视图的唯一方法是显式授予对我不想执行的表users的选择。
如果一个视图不使用任何函数,而只是新用户没有显式访问它的其他表,那么它工作得很好。