#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 Некоторые привилегии могут быть ужесточены, если вы используете базу данных в общей среде.