Estoy tratando de establecer privilegios en mi base de datos para los usuarios para que solo puedan ACTUALIZAR, INSERTAR, ELIMINAR y, por supuesto, SELECCIONAR en tablas geográficas.
Como estoy usando algunos tipos de SERIE para mis ID, preferiría ni siquiera dar a los usuarios la posibilidad de editar manualmente este campo. Así que estoy definiendo los privilegios de columnas. Funciona bien en la parte ACTUALIZAR, pero el botón en QGIS que permite la creación de un nuevo objeto permanece en gris. La única forma en que parece estar funcionando es cuando no especifico ningún campo en la definición de privilegios. Incluso cuando elijo todos los campos, no funciona (aunque hubiera pensado que no especificar ninguna columna y especificarlas todas sería lo mismo).
Parece ser algo que no entiendo, o hay una limitación en la definición de privilegios para una interacción adecuada entre el DB y QGIS. ¿Alguien tiene alguna información o consejo que pueda ayudarme a comprender lo que está sucediendo y / o (aún mejor) ayudarme a lograr mi objetivo?
Siempre puedo lidiar con eso configurando el campo como no editable en la definición de estilo, pero como cualquiera puede configurarlo como quiera, preferiría una alternativa más segura.
Ejecutando QGIS 2.14, PostGIS 2.3 para PostgreSQL 9.5.
GRANT INSERT (col2, col3, col4) ON table TO users
Respuestas:
El usuario que debe tener derechos de INSERTAR debe tener todos los derechos sobre la columna de clave principal. De lo contrario, no podrá hacer la inserción. No creo que haya alguna forma de evitar eso. Solo puede limitar la visibilidad de esa columna en QGIS, como ya mencionó.
Con respecto a su comentario:
column-specific trigger ON INSERT DO NOTHING and ON UPDATE DO NOTHING for the primary key
no estoy seguro de que funcione. Al insertar una nueva fila, se debe crear una nueva clave primaria , obviamente. No quieres eludir eso.fuente