vendredi 27 novembre 2009

Propriétaire d'une table PostgreSQL

Je vais partager avec vous un petit truc qui m'a été utile aujourd'hui car j'ai passé une partie de la journée à faire du débogage à distance et comme je n'avais pas accès à psql, j'ai dû me débrouiller avec ce que j'avais sous la main.

Le client avait un problème de droits d'accès sur certains objects de sa base de données PostgreSQL. J'ai suspecté qu'il avait dû créer des nouveaux objets avec le user postgres plutôt qu'avec l'utilisateur de son projet (l'utilisateur connecté qui crée les objets possède automatiquement les droits sur ceux-ci, donc pas besoin d'attribuer des droits manuellement).

L'objectif : comment savoir quels objets sont problématiques à l'aide d'une requête SQL qui interroge les tables systèmes ?

Pour savoir qui est le propriétaire d'une table en particulier :
SELECT tableowner
FROM pg_catalog.pg_tables
WHERE tablename = 'nom_de_la_table'
Pour voir la liste des tables et le propriétaire de chacune :
SELECT tablename, tableowner
FROM pg_catalog.pg_tables
ORDER BY tablename
Pour modifier le propriétaire d'une table :
ALTER TABLE tablename OWNER TO username
Connecté en tant que l'utilisateur postgres, on peut obtenir la liste des bases de données et leurs propriétaires respectifs :
SELECT datname, rolname
FROM pg_database as d
INNER JOIN pg_authid as a ON d.datdba = a.oid
ORDER BY datname
On peut changer le propriétaire de la base de données :
ALTER DATABASE dbname OWNER TO username
Cependant, il faut savoir que les objects conservent le propriétaire original. Si on veut changer tous les objets de propriétaire, il faudra les changer un par un. Mieux vaut faire un script qui boucle sur l'ensemble des objets.

Aucun commentaire:

Publier un commentaire