2010-07-28 3 views
14

Je veux créer un utilisateur postgres qui ne peut accéder à aucune base de données sur le serveur postgres.Comment empêcher un utilisateur de voir d'autres bases de données et les tables d'autres bases de données?

Actuellement, mon flux est:

create database database1; 
create user user1 with password 'pass'; 
grant all privileges on database database1 to user1; 

mais user1 peut encore voir une liste des utilisateurs, dbs, tables, etc. Y at-il un moyen d'empêcher l'utilisateur de voir cette information? L'utilisateur doit pouvoir écrire et lire à partir de cette base de données.

Merci beaucoup.

Répondre

7

Chaque utilisateur peut voir d'autres bases de données et rôles listés, mais ne devrait jamais voir les tables d'autres bases de données.

Si vous révoquez le privilège CONNECT sur toutes les bases de données sauf celle allouée, l'utilisateur ne pourra pas accéder au contenu des autres bases de données.

Les noms de base de données et les noms sont globaux et difficilement blo- quables. Vous pouvez essayer la suggestion de Frank Heikens de révocations sélectives sur les tables système, mais vous prenez des risques pour le faire. Les développeurs PostgreSQL sur les listes de diffusion usenet ont découragé la falsification de l'accès aux catalogues système. Psql, entre autres outils, suppose qu'ils seront disponibles et fonctionne mal sans eux. Pourquoi connaître les noms d'autres bases de données et des rôles si mauvais?

+3

les utilisateurs créeront des dbs de notre côté. Nous ne voulons pas que l'utilisateur puisse voir les bases de données des autres, les noms de tables, etc. comme mesure de confidentialité/sécurité des données. – Dan

+2

C'est une mauvaise chose quand les utilisateurs peuvent lister les tables dans les bases de données, qui ne sont pas les leurs. – harmv

+1

Il donne des données ce qui n'est pas sûrement voulu. Par exemple, une base de données nommée * "cicallc" * peut indiquer que "Cica Llc" est votre client. Une base de données nommée "cicaalfresco" peut indiquer ce que vous faites. Le nombre de bases de données peut montrer à partir de votre système combien d'utilisateurs (= clients) sont présents. Etc. C'est une erreur conceptuelle de la part des développeurs postgresql. Un utilisateur ordinaire devrait se trouver dans un environnement, où il a accès à * seulement * tout ce dont il a besoin, et pas plus. – peterh

1

Par défaut, tous les objets que vous créez sont créés dans le schéma public. En outre, tous les utilisateurs que vous créez possèdent des privilèges CREATE et USAGE sur le schéma public. Vous devez révoquer CREATE et USAGE au schéma public pour cet utilisateur, ou vous devez modifier le niveau d'accès par défaut. Vous devrez également déplacer la base de données à laquelle cet utilisateur a accès dans le schéma de l'utilisateur, ou un schéma accessible à l'utilisateur. Voir DDL Schemas dans le manuel de Postgres.

Questions connexes