Доброго времени суток.
Возникла необходимость сделать не доступным отображение кода функции для всех ролей кроме postgres, с возможностью их вызова.
Пытаюсь сделать так
REVOKE ALL PRIVILEGES (prosrc) ON TABLE pg_catalog.pg_proc FROM PUBLIC;
не получается, команда выполняться, но пользователь все равно видит код функции.
Нашел тему http://postgresql.ru.net/node/29872 и http://www.sql.ru/forum/610157/kak-zapretit-polzovatelu-smotret-telo-fun...
но возникает проблема после выполнения
REVOKE ALL PRIVILEGES ON pg_catalog.pg_proc, information_schema.routines FROM public;
при подключении пользователь не видит не функций, не таблиц и возникает ошибка что нет доступа к pg_proc.
Попробуйте отобрать все
Попробуйте отобрать все превилегии на функцию у других ролей, а потом для функции дать GRANT EXECUTE
Правильно я понял, надо
Правильно я понял, надо выполнить команды:
REVOKE ALL PRIVILEGES ON FUNCTION <функции(arg_type)> FROM PUBLIC;
GRANT EXECUTE ON FUNCTION <функции(arg_type)> TO PUBLIC;
Не помогло.
Я не уверен, что прямо вот
Я не уверен, что прямо вот ТОЧНО эти команды в таком виде, но во всяком случае выглядит похоже на правду.
Может есть еще какие -нибудь
Может есть еще какие -нибудь варианты?
Так вы попробовали? Какой
Так вы попробовали? Какой результат?
Проверял так:REVOKE ALL
Проверял так:
REVOKE ALL PRIVILEGES (prosrc) ON TABLE pg_catalog.pg_proc FROM PUBLIC;
REVOKE ALL PRIVILEGES (prosrc) ON TABLE pg_catalog.pg_proc FROM ;
REVOKE SELECT (prosrc) ON TABLE pg_catalog.pg_proc FROM PUBLIC;
REVOKE SELECT (prosrc) ON TABLE pg_catalog.pg_proc FROM ;
REVOKE ALL PRIVILEGES ON FUNCTION <функции(arg_type)> FROM PUBLIC;
REVOKE ALL PRIVILEGES ON FUNCTION <функции(arg_type)> ;
GRANT EXECUTE ON FUNCTION <функции(arg_type)> TO PUBLIC;
GRANT EXECUTE ON FUNCTION <функции(arg_type)> TO ;
Результат один, пользователь имеющий стандартные права, не супер пользователь, может видеть код функции.
Наверно это фишка PostgreSQL 9.2 (на других версиях не пробовал), а не баг.