Configuración de esquemas PostgreSQL visibles para Scan¶
Al escanear un punto final de base de datos, el usuario configurado determina qué tablas y vistas se escanearán en la instancia especificada (para Oracle) o base de datos (para PostgreSQL y MS SQL Server).
Por defecto en PostgreSQL y por tanto en PostGIS, el esquema público se crea en cada nueva base de datos y cualquier usuario que pueda conectarse a ella ve este esquema. La mejor práctica dicta que los datos no deben almacenarse en este esquema, sino que deben crearse varios esquemas, cada uno con sus propios derechos de usuario o grupo de usuarios, lo que garantiza una mayor granularidad de uso y aislamiento de la seguridad.
FME se basa en los derechos y elsearch_path para establecer su conexión con una base de datos PostGIS. A veces, la base de datos no está configurada correctamente.
Para que Scan FME pueda analizar las tablas de un esquema, :
- el usuario configurado tiene derechos de lectura en las tablas ;
- la ruta del usuario contiene los esquemas que contienen las tablas.
Demostración y pedidos¶
Tomemos el ejemplo de una base de datos PostgreSQL 9.3 con una base de datos PostGIS 2.1.3 llamada geofla, que almacena los límites administrativos del producto lIGN Francia y está estructurada en 9 esquemas, 6 de los cuales corresponden a Francia continental y a cada DOM, uno(global) es el conjunto fusionado y los 2 últimos son los esquemas inherentes al SGBD y sus extensiones(público y topología).
El objetivo es escanear las tablas de los 6 esquemas de datos con el usuario isogeo_demo perteneciente al grupo isogeo_editor.
1. Configuración del punto de entrada¶
Siga las instrucciones dadas aquí, para obtener algo similar a esto:
2. Observe que no se muestra nada¶
Si ejecutamos el escaneo, vemos que la única tabla devuelta es public.raster_columns, que es una tabla de sistema con la extensión PostGIS. Da error porque no contiene ningún elemento geográfico.
3. Comprobar que el usuario accede a las tablas¶
Primero necesita comprobar lo que el usuario "ve", usando su consola psql (o una interfaz gráfica como pgAdmin):
GRANT USAGE ON SCHEMA guadeloupe, guyane, lareunion TO isogeo_editor;
GRANT USAGE ON SCHEMA guadeloupe, guyane, lareunion TO isogeo_demo;
GRANT SELECT ON ALL TABLES IN SCHEMA guadeloupe, guyane, lareunion to isogeo_demo;
Utilizando QGIS, podemos ver que el usuario isogeo_demo tiene acceso a las tablas de los esquemas de guadeloupe, guyane y lareunion. Tenga en cuenta que no todo el software se conecta a una base de datos PostgreSQL de la misma manera. Por ejemplo, QGIS no requiere la configuración de search_path. FME sí.
4. Cambiar la ruta del usuario¶
Para cambiar la ruta de búsqueda, ejecute :
ALTER ROLE isogeo_demo IN DATABASE geofla SET search_path TO $user, public, guadeloupe;
Si ejecuta de nuevo la exploración, verá que se exploran las tablas del esquema de Guadalupe, y sólo el esquema de Guadalupe:
5. Consecuencias e ilustraciones¶
Tener en cuenta la delicadeza de la configuración de la base de datos nos permite afinar el proceso de catalogación eligiendo la granularidad adecuada para los puntos de entrada en el momento de la exploración.<br > También podemos ver que variaciones en el search_path en el mismo punto de entrada no cambian nada en la "memoria" del escaneo de FME:
Sólo el plan de Guyana:
ALTER ROLE isogeo_demo IN DATABASE geofla SET search_path TO $user, public, guyane;
Sólo el esquema de lareunión:
ALTER ROLE isogeo_demo IN DATABASE geofla SET search_path TO $user, public, lareunion;
Los 3 regímenes :
ALTER ROLE isogeo_demo IN DATABASE geofla SET search_path TO $user, public, guadeloupe, guyane, lareunion;
Resumen de los pedidos¶
Si hubiéramos querido escanear los 6 esquemas en los que se almacenan los datos, habríamos hecho :
/* Granting access to role and rolegroup to wanted schemas*/
GRANT USAGE ON SCHEMA guadeloupe, guyane, lareunion, martinique, mayotte, metropole TO isogeo_editor;
GRANT USAGE ON SCHEMA guadeloupe, guyane, lareunion, martinique, mayotte, metropole TO isogeo_demo;
GRANT SELECT ON ALL TABLES IN SCHEMA guadeloupe, guyane, lareunion, martinique, mayotte, metropole to isogeo_demo;
/* Setting the search_path with the wanted schemas */
ALTER ROLE isogeo_demo IN DATABASE geofla SET search_path TO $user, public, guadeloupe, guyane, lareunion, martinique, mayotte, metropole;
Para más información¶
- la ruta de usuario debe contener public, de lo contrario FME no podrá encontrarlo;
- el $usuario corresponde a la tabla del usuario. Opcional ;
-
es posible restablecer el search_path de un usuario a la configuración por defecto del SGBD:
ALTER USER isogeo_demo RESET search_path;
-
para ver el search_path de un usuario, conéctese a una base de datos con ese usuario y ejecute :
show search_path;
Recursos¶
- En la documentación oficial de PostgreSQL (versión 9.3) : Ruta de esquema;
- En los foros de FME :