Ограничение схемы Doctrine2 PostgreSQL

#php #symfony #doctrine-orm #postgis #postgresql-9.2

#php #symfony #doctrine-orm #postgis #postgresql-9.2

Вопрос:

У меня установлена база данных PostgreSQL с расширением PostGIS. У него есть 3 другие схемы (tiger, tiger_data, topology) и общедоступные. Мои таблицы должны быть в общедоступной схеме, но прямо сейчас я не могу запустить doctrine:schema:update из-за этой ошибки:

 [PDOException]
SQLSTATE[42501]: Insufficient privilege: 7 ERROR:  permission denied for schema topology
LINE 1: SELECT min_value, increment_by FROM "topology"."topology_id_...
  

Поэтому я не могу генерировать свои таблицы из своих сущностей (или просто сбрасывать DDL sql).

Могу ли я как-то ограничить доктрину, чтобы анализировать только общедоступную схему и пропускать остальные?

Комментарии:

1. Вы установили PostGIS как Postgres пользователь?

2. ДА. Должен ли я был сделать это с обычным пользователем? я имею в виду команды расширения create.

3. Удалите это расширение и установите его как пользователя Symfony2

4. Я только что попробовал, но, похоже, привилегии владельца недостаточно. Пользователь должен быть суперпользователем. ОШИБКА: отказано в разрешении на создание расширения «postgis» ПОДСКАЗКА: для создания этого расширения должен быть суперпользователь.

Ответ №1:

После создания расширения суперпользователем вы можете предоставить привилегии для требуемых схем вашему пользователю по умолчанию.

 -- tables and views
GRANT SELECT ON ALL TABLES IN SCHEMA topology TO some_username;
ALTER DEFAULT PRIVILEGES
IN SCHEMA topology
GRANT SELECT
ON TABLES
TO some_username;

-- sequences
GRANT SELECT, USAGE ON ALL SEQUENCES IN SCHEMA topology TO some_username;
ALTER DEFAULT PRIVILEGES
IN SCHEMA topology
GRANT SELECT, USAGE
ON SEQUENCES
TO some_username;

-- usage
GRANT USAGE ON SCHEMA topology TO PUBLIC;
  

Вот мой шаблон для Ansible для подготовки базы данных для использования с PostGIS: https://gist.github.com/leafnode/5b416efe87ed152b12bb24b1dc4f5f14 Некоторые привилегии могут быть ужесточены, если вы используете базу данных в общей среде.