Table des matières
Ce genre de spécifité fait partie du travail qui pourrait attendre un administrateur PostGIS dans un cadre bien particulier. Exposons donc ce dernier. Supposons que vous êtes administrateur. A chaqe utilisateur de la base correspond une base de données. Vous devez respecter les consigne suivantes que l'on vous demande
A chaque utilisateur correspond une base de données et réciproquement une base de données est propre à un unique utilisateur (un peu comme la philosophie à là "Oracle")
Chacune des bases de données doit contenir les fonctionnalités de PostGIS qu'il doit pouvoir utiliser sans souci
Un utilisateur est propriétaire de sa propre base de données à laquelle il peut se connecter, mais il ne peut n'y créer de base de données, ni de rôles supplémentaires, il a un mot de passe pour sa connexion
Voyons pour celà les diverses commandes à effectuer
Ici nous appelerons le modèle template_gis. Celà commence donc par la création d'une base de données PostGIS. Connectez-vous donc en tant qu'administrateur (que nous appellerons ici postgres)
su postgres
Une fois connecté, nous créons notre base template_gis
createdb template_gis createlang plpgsql template_gis psql -d template_gis -f [chemin_d_acces_vers_lwpostgis.sql] psql -d template_gis -f [chemin_d_acces_vers_spatial_ref_sys.sql]
Je fais exprès ici d'employyer [chemin_d_acces] afin d'éviter à distinguer Windows de GNU/Linux. On se connecte maintenant à la base en question pour prévenir PostgreSQL que la base que nous venons de créer est et sera à l'avenir un modèle de base de données (comme template1 par défaut)
psql template_gis
La requête est
UPDATE pg_database SET datistemplate='true' WHERE datname='template_gis';
Nous allons ici appelé l'utilisateur jean et sa base meriim
Pour créer l'utilisateur jean selon le cahier des charges attendu (droit de se connecter à une base de données, aura un mot de passe, simple utilisateur avec impossibilité de créer d'autre bases de données,impossibilité de créer d'autre rôles), nous ferons
#createuser -PRelSED jean Entrez le mot de passe pour le nouvel rôle : Entrez-le de nouveau : CREATE ROLE jean ENCRYPTED PASSWORD 'jean' NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT LOGIN; CREATE ROLE
Pour créer la base de données, il suffira de faire
#createdb -O jean -T template_gis meriim
Pour restreindre les droits sur ces tables à l'utilisateur jean, nous ferons depuis psql, les requêtes SQL suivantes
GRANT ALL ON geometry_columns TO jean; GRANT SELECT ON spatial_ref_sys TO jean;
Connectons-nous en tant que jean sur la base meriim
postgres@bremko:/root$ psql -U jean meriim Bienvenue dans psql 8.1.5, l'interface interactive de PostgreSQL. Tapez: \copyright pour les termes de distribution \h pour l'aide-mémoire sur les commandes SQL \? pour l'aide-mémoire sur les commandes psql \g ou terminez avec un point-virgule pour exécuter une requête \q pour quitter meriim=> select * from geometry_columns ; f_table_catalog | f_table_schema | f_table_name | f_geometry_column | coord_dimension | srid | type -----------------+----------------+--------------+-------------------+-----------------+------+------ (0 lignes) meriim=> \dt Liste des relations Schéma | Nom | Type | Propriétaire --------+------------------+-------+-------------- public | geometry_columns | table | postgres public | spatial_ref_sys | table | postgres public | test | table | jean (3 lignes)
Ok si j'essais maintenant sur une autre base existante igo
meriim=> \c igo Vous êtes maintenant connecté à la base de données «igo». igo=> \dt Liste des relations Schéma | Nom | Type | Propriétaire ---------+------------------------+-------+--------------- public | 31_com_plus_hors_agglo | table | postgres public | com_plus_hors_agglo | table | postgres public | geometry_columns | table | postgres public | ligne_tram_3 | table | postgres public | spatial_ref_sys | table | postgres (5 lignes) igo=>
Je peux donc me connecter à cette base (option -l de createuser que nous avons utilisié). Maintenant si j'essais de listé le contenu de la table
igo=> SELECT * FROM "31_com_plus_hors_agglo"; ERREUR: droit refusé pour la relation 31_com_plus_hors_agglo igo=>
Mais puis-je créer au moins des tables. Je vais essayer en important des Shapefiles
postgres@bremko:~/igo$ shp2pgsql -DI l3.shp ligne |psql -U jean meriim Shapefile type: Arc Postgis type: MULTILINESTRING[2] BEGIN INFO: CREATE TABLE créera des séquences implicites «ligne_gid_seq» pour la colonne «serial» «ligne.gid» INFO: CREATE TABLE / PRIMARY KEY créera un index implicite «ligne_pkey» pour la table «ligne» CREATE TABLE addgeometrycolumn ----------------------------------------------------------- public.ligne.the_geom SRID:-1 TYPE:MULTILINESTRING DIMS:2 (1 ligne) CREATE INDEX COMMIT
Ok! Mais puis-je au moins comme attendu utiliser les fonctionnalités de PostGIS en tant qu'utilisateur jean?
meriim=> select geometrytype(the_geom),length(the_geom) from ligne; geometrytype | length -----------------+------------------ MULTILINESTRING | 19578.4949845822 (1 ligne) meriim=> select postgis_full_version(); postgis_full_version ---------------------------------------------------------------------------------- POSTGIS="1.1.6" GEOS="2.2.3-CAPI-1.1.1" PROJ="Rel. 4.5.0, 22 Oct 2006" USE_STATS (1 ligne)
Ok donc tout est Ok!