Привилегии на INSERT в PostGIS / QGIS

12

Я пытаюсь установить привилегии в своей базе данных для пользователей, чтобы они могли только ОБНОВИТЬ, ВСТАВИТЬ, УДАЛИТЬ и, конечно, ВЫБРАТЬ для географических таблиц.

Поскольку я использую некоторые типы SERIAL для своих идентификаторов, я бы предпочел даже не давать пользователям возможность вручную редактировать это поле. Поэтому я определяю привилегии по столбцам. Он отлично работает в части ОБНОВЛЕНИЕ, но кнопка в QGIS, позволяющая создать новый объект, остается серой. Единственный способ, которым это работает, - это когда я не указываю никаких полей в определении привилегий. Даже когда я выбираю все поля, это не работает (хотя я бы подумал, что не указав ни одного столбца и указав все из них, будет то же самое).

Кажется, это что-то, чего я не понимаю, или в определении привилегий есть ограничение для правильного взаимодействия между БД и QGIS. Есть ли у кого-нибудь какая-либо информация или совет, который мог бы помочь мне понять, что происходит, и / или (даже лучше) помочь мне достичь моей цели?

Я всегда могу с этим справиться, установив поле как нередактируемое в определении стиля, но, поскольку любой может установить его по своему усмотрению, я бы предпочел более безопасную альтернативу.

Запуск QGIS 2.14, PostGIS 2.3 для PostgreSQL 9.5.

GuiOm Clair
источник
Используете ли вы команду GRANT SQL для установки прав (привилегий) пользователя? Вы ДЕЙСТВИТЕЛЬНО ВСТАВИЛИ на своем столе?
Золтан
@Zoltan Да, мой запрос выглядит какGRANT INSERT (col2, col3, col4) ON table TO users
GuiOm Clair
5
Пользователь, который должен иметь права INSERT, должен иметь полные права на столбец первичного ключа. В противном случае она не сможет сделать вставку. Я не думаю, что есть способ обойти это. Вы можете только ограничить видимость этого столбца в QGIS, как вы уже упоминали.
Мика
1
@Micha Ладно, действительно, в общем-то это имеет смысл сказать вот так ... Я думаю, у меня есть еще один обходной путь - триггер, специфичный для столбца: ON INSERT DO Ничего и ON UPDATE Ничего не делать для первичного ключа, что предотвратит любое ручное редактирование первичный ключ. Благодарю.
GuiOm Clair
3
Или вы создаете представление своей таблицы, исключая столбец SERIAL, и предоставляете доступ только к этому представлению.
JoeBe

Ответы:

0

Пользователь, который должен иметь права INSERT, должен иметь полные права на столбец первичного ключа. В противном случае она не сможет сделать вставку. Я не думаю, что есть способ обойти это. Вы можете только ограничить видимость этого столбца в QGIS, как вы уже упоминали.

Что касается вашего комментария: column-specific trigger ON INSERT DO NOTHING and ON UPDATE DO NOTHING for the primary keyя не уверен, что это сработает. При вставке новой строки , очевидно, должен быть создан новый первичный ключ . Вы не хотите обойти это.

Миха
источник