Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.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
Database Postgres:授予不同用户对未来表的访问权限_Database_Postgresql_Permissions_Privileges_Grant - Fatal编程技术网

Database Postgres:授予不同用户对未来表的访问权限

Database Postgres:授予不同用户对未来表的访问权限,database,postgresql,permissions,privileges,grant,Database,Postgresql,Permissions,Privileges,Grant,在这个主题上已经有几个线程。然而,我无法完成它,并且不断地出现“权限被拒绝”的错误。我一定是做错了什么事 我的目标:在我的postgres数据库“mydatabase”中,我希望 属于角色“group_x”的一大组用户 角色“group_x”的每个成员都应该有权访问特定的模式“schema_x” 在该模式中,所有组成员都应该能够创建新表并编辑彼此(未来)的表 我是如何尝试的(大致): psql-h/var/run/postgresql-p5433-U postgres 创建角色组; 创建角色用户

在这个主题上已经有几个线程。然而,我无法完成它,并且不断地出现“权限被拒绝”的错误。我一定是做错了什么事

我的目标:在我的postgres数据库“mydatabase”中,我希望

  • 属于角色“group_x”的一大组用户
  • 角色“group_x”的每个成员都应该有权访问特定的模式“schema_x”
  • 在该模式中,所有组成员都应该能够创建新表并编辑彼此(未来)的表
  • 我是如何尝试的(大致):

    psql-h/var/run/postgresql-p5433-U postgres
    创建角色组;
    创建角色用户\登录名并继承密码;
    创建角色用户\ b登录继承密码;
    将组_x授予用户_a;
    将组_x授予用户_b;
    \连接我的数据库;
    将模式_x上的所有内容授予组_x;
    将模式_x中所有表上的all授予组_x;
    将schema_x中所有序列上的all授予组_x;
    将schema_x中所有函数的all-on-all授予组_x;
    设置角色组_x;
    更改架构\u x中角色组\u x的默认权限
    将表上的所有内容授予组x;
    更改架构\u x中角色组\u x的默认权限
    将所有on序列授予组x;
    更改架构\u x中角色组\u x的默认权限
    将所有on功能授予组x;
    

    谢谢你指出我的错误

    如果您
    更改角色组x的默认权限
    ,则意味着仅对用户
    组x
    创建的未来对象授予权限


    因此,您需要在
    FOR ROLE
    子句中指定创建表的用户。

    hmm,因此这对我来说很困难,因为我事先不知道哪个用户将创建哪些表。我希望能够创建一个用户组来协调权限,并向该组的所有用户授予访问权限。还有其他选择吗?向所有现实生活中的用户分发相同的用户名和密码?但是我想象如果几个人同时使用相同的用户角色访问数据库会遇到麻烦?您可以运行几个
    alterdefaultprivileges
    语句,每个用户一个。您还可以仅将架构上的
    CREATE
    授予所有用户通用的角色,并且在创建表之前,他们必须
    SET role
    。您的说明非常有用。我将尝试您的第一次建议(为创建的每个新用户运行语句)。第二个建议不适用于我的用例,因为这些表很可能是通过QGIS软件界面创建的,没有实现角色更改的设置(我知道)。我在业余时间做这个项目,所以我可能需要几天的时间来报告它的进展情况,但非常感谢您的帮助。通过更改上述从
    alter default privileges for role group\x的授予顺序
    更改角色用户a的默认权限…并对所有用户重复此操作,我获得了所需的功能,正如@laurenz albe所建议的那样。非常感谢。(缺点是,我必须为每个新模式重复一遍——因为我们希望为每个项目以及每个新用户使用新模式)。
    psql -h /var/run/postgresql -p5433 -U postgres
    
    create role group_x;
    
    create role user_a LOGIN INHERIT PASSWORD <password>;
    create role user_b LOGIN INHERIT PASSWORD <password>;
    
    grant group_x to user_a;
    grant group_x to user_b;
    
    \connect mydatabase;
    
    grant all on schema schema_x to group_x;
    grant all on all tables in schema schema_x to group_x;
    grant all on all sequences in schema schema_x to group_x;
    grant all on all functions in schema schema_x to group_x;
    
    set role group_x;
    
    alter default privileges for role group_x in schema schema_x
        grant all on tables to group_x;
    alter default privileges for role group_x in schema schema_x
        grant all on sequences to group_x;
    alter default privileges for role group_x in schema schema_x
        grant all on functions to group_x;