Avec PostgreSQL en version 10 ou supérieure et le traqueur en version 2.04.00 ou supérieure, il n'est plus nécessaire d'utiliser un rôle possédant l'attribut SUPERUSER pour effectuer une session de traque en interactif.
Une unique session de traque en tant que superuser est nécessaire afin de créer les extensions dans la base de travail (par défaut traqueur).
La solution consiste ensuite à créer un utilisateur tirant parti du rôle pg_monitor avec l'option -q role puis à toujours se connecter avec cet utilisateur via l'option -c.
Seule restriction : cet utilisateur ne peut pas utiliser l'option -p qui exécute du code en plpythonu (untrusted).
Exemple :
-- creation d'une base de travail avec un superuser (postgres)
psql
select version();
version
--------------------------------------------------------------------------------------------------------------------------------------------
PostgreSQL 10.3 (Ubuntu 10.3-1.pgdg16.04+1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609, 64-bit
(1 ligne)
create database traqueur;
CREATE DATABASE
REVOKE ALL PRIVILEGES ON DATABASE traqueur FROM public;
REVOKE
\q
-- premiere utilisation du traqueur avec un superuser (postgres)
./traqueur.sh -d 0
traqueur 2.04.00 - outil de diagnostic performance pour PostgreSQL 9.3 => 11
INFORMATION, pas d'options de connexions indiquees, utilisation de la base dediee detectee ...
INFORMATION, connecte a la base traqueur
INFORMATION, version de PostgreSQL detectee : 100003
INFORMATION, preparation de la collecte ...
INFORMATION, execution de la collecte et presentation des resultats ...
busy_pc | distinct_exe | db | pid | pg_user | client_ip | application | query | wait_event_type | blockers
---------+--------------+----------+-------+----------+-----------+-------------+--------------------------+-----------------+----------
100 | 1 / 1 | postgres | 12115 | postgres | | psql | select pg_sleep(100000); | Timeout |
(1 ligne)
-- creation d'un utilisateur traqueur_interactif avec un superuser (postgres)
./traqueur.sh -q traqueur_interactif
traqueur 2.04.00 - outil de diagnostic performance pour PostgreSQL 9.3 => 11
INFORMATION, pas d'options de connexions indiquees, utilisation de la base dediee detectee ...
INFORMATION, connecte a la base traqueur
INFORMATION, version de PostgreSQL detectee : 100003
INFORMATION, creation de l'utilisateur interactif de monitoring ...
-- changement du mot de passe par defaut de l'utilisateur traqueur_interactif avec un superuser (postgres)
psql
alter role traqueur_interactif password 'ara465e4r444';
ALTER ROLE
-- utilisation du traqueur avec le role traqueur_interactif
-- (pour eviter de saisir N fois le mot de passe, renseigner prealablement un .pgpass (droits 600) avec une ligne d'informations serveur:port:base:utilisateur:mot_de_passe)
./t -c "-p 5432 -d traqueur -U traqueur_interactif -h localhost"
traqueur 2.04.00 - outil de diagnostic performance pour PostgreSQL 9.3 => 11
INFORMATION, connecte a la base traqueur
INFORMATION, version de PostgreSQL detectee : 100003
INFORMATION, preparation de la collecte ...
INFORMATION, execution de la collecte et presentation des resultats ...
busy_pc | distinct_exe | db | pid | pg_user | client_ip | application | query | wait_event_type | blockers
---------+--------------+----------+-------+----------+-----------+-------------+--------------------------+-----------------+----------
100 | 1 / 50 | postgres | 12115 | postgres | | psql | select pg_sleep(100000); | Timeout |
(1 ligne)
L'utilisation de plpython rend complexe et même dangereux d'autoriser l'exécution de la collecte des informations en mode batch par des utilisateurs non superuser.
La collecte doit être exécutée localement sur le serveur par un superuser. Il convient de manière générale d'interdire (ou au moins de restreindre au strict nécessaire) TOUS les accès superuser distants.
Dans ces conditions, "postgres" qui est à la fois un utilisateur Unix et un superuser PostgreSQL peut être utilisé pour faire tourner le traqueur localement.
Analyser l'activité avec le traqueur tournant en mode batch ne nécessite ni accès SUPERUSER distant, ni rôle pg_monitor ni accès aux tables du catalogue. Les seuls privilèges requis sont ceux permettant de lire les tables du traqueur. Il faut noter que ces tables peuvent être stockées dans une base d'un cluster distinct du cluster à analyser si l'option -b F a été utilisée. Exemple :
-- connecte postgres
psql -d traqueur
create user traqueur_dashboard password 'trqd01300';
CREATE ROLE
grant connect on database traqueur to traqueur_dashboard;
GRANT
grant usage on schema traqueur to traqueur_dashboard;
GRANT
grant select on all tables in schema traqueur to traqueur_dashboard;
GRANT
alter default privileges in schema traqueur grant select on tables to traqueur_dashboard;
ALTER DEFAULT PRIVILEGES
alter role traqueur_dashboard set search_path=traqueur;
ALTER ROLE
-- l'utilisateur traqueur_dashboard peut ensuite etre utilisé pour afficher et analyser l'activité en mode graphique avec grafana, en mode texte avec l'option -r du traqueur etc.
-- il est possible de creer des vues etc. afin de restreindre davantage l'acces aux informations
-- les requetes stockees dans la colonne query de traqueur_sessions_actives peuvent notamment contenir des donnees utilisateur