GreenPlum系列-5-角色和权限

GP数据库使用角色管理数据库权限。角色包括用户和用户组,其独立于操作系统管理的用户和用户组。另外角色被定义在数据库系统层面上,因此对数据库系统中的所有数据库都有效。

一、数据库角色

1、属性

login privilege: 只有具有Login属性的角色才能被用于数据库连接,其中 create user 默认有login属性,而create role 则没有login属性。

superuser status:超级用户属性,该属性会绕开除登录权限以外的所有权限检测。创建一个超级用户 create role name superuser。

database creation: 创建数据库要给与的权限。create role name createdb。

role creation: 创建角色要给与的权限。create role name createrole。

password: 创建认证口令。create role name password 'xxx'。

2、角色和成员关系

在实际操作用通常会将用户归属于组角色,对一个组进行权限管理。

组角色中的成员可以通过两种方式使用角色的权限:

一个组的每一个成员可以显示的使用set role 临时成为组角色。

有inherit 属性的成员角色会自动具有所属组角色的权限。

这里需要注意的是删除一个角色时,需要先删除或转移该用户所拥有的对象,以及回收被授予的权限。

3、角色操作

创建

create role name;

删除

drop role name;

查看

select rolname from pg_roles;

示例:

创建带有登录属性的角色:

create role name with login password 'xxx';

二、对象权限

在表、视图、序列、数据库、函数、语言、空间等对象被创建时,会被指派一个拥有者。如果想其他角色拥有和拥有者一样操作这些对象,需要赋予一定的对象权限。需要注意的是以上权限必须为每一个对象单独授权。如 在一个数据上授予all 权限,不代表完全的权限,仅代表 connect、create 、temporary 权限。

对象

权限

表、序列、视图

select 、insert 、update、delete、rule、all

外部表

select、rule、all

数据库

connect、create、temporary|temp、all

函数

execute

语言

usage

方案

create、usage、all

三、权限操作

和普通数据库一样,权限的操作通过grant 实现。

语法:

GRANT 权限类型 ON Relation(如 表、视图、函数、schema等) TO 用户或组;

详细可通过\h grant 查询。

权限按用户、库、模式、表、索引、字段等层次进行管理。

  1. 用户的特殊属性的权限

创建登录属性权限的账户

create role user1 with login password 'xxx';

删除没有权限的用户

drop role if exists user1;

删除有权限的用户(需要先撤销权限)

revoke connect on database test from user1;

drop user user1;

  1. 数据库的权限

赋权

grant create on database test to user1;

撤除权限

revoke create on database test from user1;

注意:

将数据库上的权限 create 、connect、temp 全部删除后,仍有 connect 和 temp 权限,这两个为默认的属性权限。此时不可以创建 schema,仍可以在public 下创建表,对其他owner不是自己的schema无权限。

create 在数据库上的权限包括 创建 库、schema、表、查询表数据的权限。

  1. 模式的权限

主要用于给其他角色、用户赋予能够操作owner 不是自己的schema 的权限。

赋权

grant create on schema schema1 to user2;

grant usage on schema schema1 to user2;

撤销

revoke select, update,delete,insert on schema1.table1 from user1;

revoke usage on schema schema1 from user1;

revoke create on schema schema1 from user1;

注意:

如果想操作owner 不是自己的schema, 需要被赋予 create 、usage 权限。

用户默认不能在不属于自己的schema 创建表,但可以在public 下创建。

用户默认不能查看不属于自己的schema下的表(注意设置 search_path)。

单独赋予 usage 权限可以查看,单独赋予create 权限可以创建但不能查看,所以必须2个权限都有。

用户user1的schema 信息无法分配给user2用户。

  1. 操作数据库对象的权限

表赋权

grant select, update, delete, insert on schema1.table1 to user2;

撤销

revoke select, update, delete, insert on schema1.table1 to user2;

  1. 用户的特殊属性上的权限

user 的 superuser 和 createuser 属性不能同时拥有。

superuser 属性的用户实际拥有创建库、用户的权限,nocreateuser nocreatedb 等属性没有约束。

create role 创建用户;alter role 修改用户属性;drop role 删除用户;drop database 删除库。

拥有资源的用户不能被drop, 但资源可以被superuser drop掉。

四、生产实例

  1. 创建用户

create user user1 with login password 'xxxx';

create user user2 with login password 'xxxx';

  1. 创建schema

create schema schema_1;

create schema schema_2;

  1. 创建角色, 拥有查看 schema_1, schema_2 所有表, 以及使用权限。

create role role_1;

grant usage on schema schema_1 to role_1;

grant usage on schema schema_2 to role_1;

grant select on all tables in schema schema_1 to role_1;

grant select on all tables in schema schema_2 to role_1;

-- 赋予用户对schema 所有权限

grant all privileges on schema schema_1 to role_1;

  1. 将角色赋予用户

grant role_1 to user1;

grant role_1 to user2;

  1. 设置用户默认路径

alter user user1 set search_path to schema_1;

alter user user2 set search_path to schema_1;

  1. 表交接(如果需要表交接)

alter table test_table owner to user1;

五、参考

http://docs-cn.greenplum.org/v6/admin_guide/roles_privs.html

http://www.postgres.cn/docs/11/user-manag.html

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于Greenplum数据库的分布式部署,您需要遵循以下步骤: 1. 首先,确保您的系统符合Greenplum的硬件要求,并具备必要的操作系统和软件依赖。 2. 下载Greenplum数据库的安装包(greenplum-db-6.13.0-rhel7-x86_64.rpm),并将其复制到所有节点上。 3. 在每个节点上安装Greenplum数据库软件包。您可以使用以下命令进行安装: ``` rpm -ivh greenplum-db-6.13.0-rhel7-x86_64.rpm ``` 4. 创建一个主节点和多个段节点的配置文件(gpinitsystem_config),该文件指定了Greenplum数据库的分布式配置。您可以使用以下命令创建配置文件: ``` gpinitsystem -c gpinitsystem_config ``` 5. 编辑配置文件(gpinitsystem_config),指定主节点和段节点的主机名、IP地址、端口号等信息。确保所有节点都在配置文件中正确配置。 6. 在主节点上运行gpinitsystem命令以初始化Greenplum数据库集群。这将创建数据库实例并启动相关服务。您可以使用以下命令进行初始化: ``` gpinitsystem -c gpinitsystem_config ``` 7. 在每个段节点上启动Greenplum数据库服务。您可以使用以下命令启动服务: ``` gpstart -a ``` 8. 检查Greenplum数据库集群的状态,确保所有节点都已成功启动。您可以使用以下命令进行检查: ``` gpstate -a ``` 以上是Greenplum数据库的基本分布式部署步骤。请注意,这只是一个概述,并且需要根据您的特定环境进行适当的调整和配置。建议您参考Greenplum官方文档以获取更详细的部署指南和最佳实践。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值