Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql创建授权-限制对服务器上其他数据库的访问?_Postgresql_Roles_Privileges_Grant - Fatal编程技术网

Postgresql创建授权-限制对服务器上其他数据库的访问?

Postgresql创建授权-限制对服务器上其他数据库的访问?,postgresql,roles,privileges,grant,Postgresql,Roles,Privileges,Grant,我有两个Postgresql数据库,称为abc和xyz。我想为每个网站创建一个用户,以便在网站中使用,因此我使用如下命令创建了一个用户: CREATE ROLE abc LOGIN PASSWORD 'abc'; 然后我这样做是为了给他们访问数据库的权限: GRANT ALL PRIVILEGES ON DATABASE abc TO abc; GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO abc; GRANT ALL PRIVI

我有两个Postgresql数据库,称为abc和xyz。我想为每个网站创建一个用户,以便在网站中使用,因此我使用如下命令创建了一个用户:

CREATE ROLE abc LOGIN PASSWORD 'abc';
然后我这样做是为了给他们访问数据库的权限:

GRANT ALL PRIVILEGES ON DATABASE abc TO abc;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO abc;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO abc;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL on TABLES TO abc;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL on SEQUENCES TO abc;
在这一点上,abc用户可以访问这些表,我相信任何未来创建的表

我注意到abc用户可以看到xyz数据库存在,并实际进入其中,在pgAdmin中可以看到模式、表,甚至表的结构

我想防止这种情况发生,并锁定abc用户,使其尽可能只了解abc数据库

我在这个配置中哪里出错了?锁定它的最佳方法是什么


谢谢

您必须禁止用户连接到其他数据库

有两种可能性:

  • 通过数据库权限:

    -- by default, everybody can connect
    REVOKE CONNECT ON DATABASE other FROM PUBLIC;
    -- now you have to grant access to the legitimate users specifically
    GRANT CONNECT ON DATABASE other TO other_users;
    
  • 通过
    pg_hba.conf

    不要向文件中添加允许
    abc
    连接到
    other
    的条目

    所以,与其说

    托管所有0.0.0.0/0紧急停堆-sha-256
    
    有这样的条目

    主机其他+其他用户0.0.0.0/0紧急停堆-sha-256
    主机abc abc 0.0.0.0/0紧急停堆-sha-256
    

  • 谢谢,撤销/授予非常有意义,而且效果很好。我没有想到pg_hba.conf是一个解决方案,但我也喜欢这个想法。