Предоставить EXECUTE для многих функций PostGIS - PullRequest
1 голос
/ 07 октября 2010

У меня есть веб-приложение, основанное на MapServer, которое использует PostGIS в качестве основного расширения базы данных. Теперь я хочу иметь выделенную роль базы данных, которая используется для MapServer, потому что я не хочу получать доступ к базе данных через суперпользователя postgres. Эта роль должна иметь только разрешение SELECT для общедоступных таблиц (что легко сделать) и разрешение EXECUTE для общедоступных функций PostGIS.

Возникает несколько вопросов: ВСЕ ли соответствующие функции PostGIS хранятся в общедоступной схеме базы данных или есть что-то еще для рассмотрения?

Как я могу извлечь всю информацию о функциях - то есть имя функции, номер и имена аргументов - из information_schema или pg_catalog базы данных ?! Мне нужна эта информация для GRANT EXECUTE для функции (args) в операторах MapServerUser!

Заранее спасибо !!!

1 Ответ

1 голос
/ 07 октября 2010

В PostgreSQL 8.4.x:

SELECT n.nspname as "Schema",
  p.proname as "Name",
  pg_catalog.pg_get_function_result(p.oid) as "Result data type",
  pg_catalog.pg_get_function_arguments(p.oid) as "Argument data types",
CASE
  WHEN p.proisagg THEN 'agg'
  WHEN p.proiswindow THEN 'window'
  WHEN p.prorettype = 'pg_catalog.trigger'::pg_catalog.regtype THEN 'trigger'
  ELSE 'normal'
END as "Type"
FROM pg_catalog.pg_proc p
    LEFT JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace
WHERE pg_catalog.pg_function_is_visible(p.oid)
     AND n.nspname <> 'pg_catalog'
  AND n.nspname <> 'information_schema'
ORDER BY 1, 2, 4;

Находит, запустив psql с параметром -E (показать скрытые запросы), а затем выполнив команду \ df.

Также "публичная "схема в PostgreSQL просто названа таким образом.Это не имеет особого значения.Это плохое имя.То, на что вы должны обращать внимание, это роль «PUBLIC» (все заглавные буквы).Хотя для таблиц автоматически не назначается роль PUBLIC, мой опыт показывает, что PUBLIC автоматически получает разрешение на выполнение функций, определенных с помощью SECURITY INVOKER.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...