PostgreSQL 9.6:授权用户访问数据库

5

这应该很简单,但我无法解决。我正在使用Postgres 9.6,我有一个Postgres用户和一个数据库。我想让该用户仅在给定的数据库上拥有执行任何操作的权限。我尝试了以下命令,但它们都不起作用:

GRANT ALL PRIVILEGES ON DATABASE mydatabase TO myuser;
ALTER DATABASE mydatabase OWNER TO myuser;

文档似乎非常明确,即“ALL PRIVILEGES”应该包括更新、插入等权限,但是当我登录用户时,实际上用户无法执行任何操作。 我也看到了一些例子,比如:
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO user_name;

但我不确定如何将其限制在一个数据库中?任何帮助都将不胜感激。


你想限制到一个模式(schema)还是一个数据库? - tadman
GRANT语句看起来正确。你能添加一个错误信息吗? - rollstuhlfahrer
@tadman 最好只用一个数据库。这可行吗? - noone392
@rollstuhlfahrer 没有错误,它回应 GRANT,意味着成功。 - noone392
2
这方面在DBA Stack Exchange上有一个不错的问题(https://dba.stackexchange.com/questions/33943/granting-access-to-all-tables-for-a-user),其中可能包含一些有用的知识,可以帮助你。 - e_i_pi
显示剩余2条评论
1个回答

15
在PostgreSQL中,让用户通过单个语句访问数据库中的所有对象的唯一方法是授予他们超级用户权限。但你不应该那样做。
逐步进行:
1.访问数据库:
默认情况下,每个人都可以访问所有数据库,并且可以在pg_hba.conf中进行配置。如果你已经移除了数据库上PUBLIC的权限,请使用:
GRANT ALL ON DATABASE ... TO ...;
  • 访问模式:

    对于所有模式,请运行

  • GRANT ALL ON SCHEMA ... TO ...;
    
  • 访问表格:

    对于所有模式,请运行

  • GRANT ALL ON ALL TABLES IN SCHEMA ... TO ...;
    
  • 获取序列:

    对于所有模式,tun

  • GRANT ALL ON ALL SEQUENCES IN SCHEMA ... TO ...;
    
  • 访问函数:

    默认情况下,函数将创建为对PUBLIC拥有EXECUTE权限。如果已删除该权限,请使用以下命令授予访问权限:

  • GRANT ALL ON ALL FUNCTIONS IN SCHEMA ... TO ...;
    

    还有其他不太常用的东西,比如大对象或外部服务器。您也需要为这些授予权限。详细信息请参阅GRANT文档。


    我想要用户列表以及他们被分配的访问权限。 我该如何获得?你能帮帮我吗?https://dev59.com/h7joa4cB1Zd3GeqPEsua - Jayesh

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接