Я использую postgresql 8.4, и у меня возникла небольшая проблема с предоставлением привилегий выбора для представления из базы данных, добавленной другим пользователем, когда представление использует какую-либо из функций базы данных.
Как новый пользователь, когда я пытаюсь запустить, например, , выберите * из 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 , которую яне хочу делать.
Если представление не использует какую-либо функцию, а просто другие таблицы, к которым у нового пользователя нет явного доступа, оно прекрасно работает.