PostgreSQL
La base de données la plus sophistiquée au monde.

Ouverture de session

Navigation

Contactez-nous

Administration du site :
"equipe chez postgresqlfr point org"

Contact presse :
"fr chez postgresql point org"

Contact association :
"bureau chez postgresqlfr point org"

Questions PostgreSQL :
 IRC :
  serveur irc.freenode.net
  canal #postgresqlfr

Recherche

Accéder aux archives

« Octobre 2008  
Lun Mar Mer Jeu Ven Sam Dim
  2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31  

Syndication

Flux XML

Sondage

Quelle est la version de PostgreSQL la plus répandue sur vos serveurs ?
8.3
10%
8.2
42%
8.1
40%
8.0
2%
7.4
6%
7.3 ou antérieure
0%
Nombre de votes: 48

Filtrer les données en fonction du login

Technique - général | Filtrer les données en fonction du login

Par cbredel le 22/11/2006 - 21:41

Bonjour,
Voici une question que j'ai du mal Ă  formuler.

J'ai plusieurs service qui doivent accéder à des données ayant la même structure mais chaque service ne doit pas avoir accès aux données des autres.

En gros : que lorsqu'un utilisateur du service A fait un select sur la table cela lui retourne que les données dont la contenu de la colonne service soit A

Est-ce que quelqu'un a une idée ?

Merci
Christophe

Options d'affichage des commentaires

Sélectionnez la méthode d'affichage des commentaires que vous préférez, puis cliquez sur "Sauvegarder les paramètres" pour activer vos changements.

Il faut en fait passer par de

sparky/ = 24 Novembre, 2006 - 13:06

Il faut en fait passer par des vues filtrantes, exemple simple

Création d'une table bidon avec un champs col1
create table toto (col1 text);
insert into toto (col1) values ('A');
insert into toto (col1) values ('B');
insert into toto (col1) values ('C');
insert into toto (col1) values ('D');
insert into toto (col1) values ('E');

-- pour ajouter une condition sur l'utilisateur courant j'ajoute une colonne pour les utilisateurs qui peuvent, je mets à jour et je crée une vue
alter table toto add column t_user text;
update toto set t_user='postgres';
insert into toto (col1,t_user) values ('F','user1');

-- je crée l'utilisateur user1 qui ne peut voir que F
create user user1;
create view v_all as select * from toto where t_user=user;
revoke select on toto from user1;
grant select on v_all to user1;

-- connection en tant que postgresql je vois tout sauf F
\c postgres postgres
select * from v_all ;

\c postgres user1
select * from v_all ;
==> montre uniqt F

select * from toto;
==> permission denied

Bon pour peaufiner, on pourrait créer une rule, je n'ai pas essayer


En effet, c'est la solution s

cbredel/ = 25 Novembre, 2006 - 12:43

En effet, c'est la solution simple... Mon problème est que je vais avoir presque 120 services différents ( avec plusieurs user par service)
Du coup, cela me gene un peu d'avoir 120 vue par table ...


Hm... Un tit script pour cré

sparky/ = 27 Novembre, 2006 - 10:51

Hm... Un tit script pour créer les vues, adapter les tables et tu les mets dans un autre schéma, histoire de ne pas polluer ? Je suis persuadé que toutes les tables ne devront pas être filtrées.

Pense à faire des group au fait, cela sera plus facile à gérer


© PostgreSQLFr, tous droits rĂ©servĂ©s.
Site déclaré à la CNIL sous le numéro 1074678, conformément à la Loi en vigueur.