2017-08-07 4 views
1

Une façon possible d'isoler les locataires consiste à ajouter tenant_id à chaque table et à étendre chaque requête à ce champ.Est-il possible de limiter toutes les requêtes avec locataire_id dans PostgreSQL?

Mais vous devez être très prudent et mettre cela dans chaque requête SQL.

Je me demande s'il existe un moyen de dire à PostgreSQL de le faire automatiquement? Quelque chose comme

scope tenant_id = 'foo' 

select * from my_table -- tenant_id = 'foo' should be added automatically 

Répondre

3

Vous pouvez utiliser des vues conjointement avec des paramètres de configuration personnalisés, par exemple:

create table customers_table(id serial primary key, tenant_id int, name text); 
insert into customers_table (tenant_id, name) values 
(1, 'a'), 
(2, 'b'), 
(1, 'c'), 
(2, 'd'); 

create view customers as 
select * 
from customers_table 
where tenant_id = current_setting('glb.tenant_id')::int; 

Utilisez la vue au lieu de la table dans vos requêtes de sélection. Vous devez définir le paramètre de configuration personnalisé pour que les requêtes soient exécutées:

select * from customers; 

ERROR: unrecognized configuration parameter "glb.tenant_id" 

set glb.tenant_id to 1; 
select * from customers; 

id | tenant_id | name 
----+-----------+------ 
    1 |   1 | a 
    3 |   1 | c 
(2 rows)