Я пытаюсь установить привилегии в своей базе данных для пользователей, чтобы они могли только ОБНОВИТЬ, ВСТАВИТЬ, УДАЛИТЬ и, конечно, ВЫБРАТЬ для географических таблиц.
Поскольку я использую некоторые типы SERIAL для своих идентификаторов, я бы предпочел даже не давать пользователям возможность вручную редактировать это поле. Поэтому я определяю привилегии по столбцам. Он отлично работает в части ОБНОВЛЕНИЕ, но кнопка в QGIS, позволяющая создать новый объект, остается серой. Единственный способ, которым это работает, - это когда я не указываю никаких полей в определении привилегий. Даже когда я выбираю все поля, это не работает (хотя я бы подумал, что не указав ни одного столбца и указав все из них, будет то же самое).
Кажется, это что-то, чего я не понимаю, или в определении привилегий есть ограничение для правильного взаимодействия между БД и QGIS. Есть ли у кого-нибудь какая-либо информация или совет, который мог бы помочь мне понять, что происходит, и / или (даже лучше) помочь мне достичь моей цели?
Я всегда могу с этим справиться, установив поле как нередактируемое в определении стиля, но, поскольку любой может установить его по своему усмотрению, я бы предпочел более безопасную альтернативу.
Запуск QGIS 2.14, PostGIS 2.3 для PostgreSQL 9.5.
GRANT INSERT (col2, col3, col4) ON table TO users
Ответы:
Пользователь, который должен иметь права INSERT, должен иметь полные права на столбец первичного ключа. В противном случае она не сможет сделать вставку. Я не думаю, что есть способ обойти это. Вы можете только ограничить видимость этого столбца в QGIS, как вы уже упоминали.
Что касается вашего комментария:
column-specific trigger ON INSERT DO NOTHING and ON UPDATE DO NOTHING for the primary key
я не уверен, что это сработает. При вставке новой строки , очевидно, должен быть создан новый первичный ключ . Вы не хотите обойти это.источник