Greenplum的角色(用户)与权限管理(grant、revoke)

0    294    3

Tags:

👉 本文共约24689个字,系统预计阅读时间或需93分钟。

管理角色与权限

Greenplum数据库授权机制存储访问数据库中数据库对象的角色和权限, 并使用SQL语句或命令行实用程序进行管理。

Greenplum数据库使用roles管理数据库访问权限。角色的概念包含用户的概念。 一个角色可以是一个数据库用户、一个数据库组或者两者间距。角色可以拥有数据库对象(例如表),并可以将这些对象上的 权限赋予其他角色,依此来控制对对象的访问。 角色可以是其他角色的成员,因此成员角色可以继承其父角色的对象权限。

每个Greenplum数据库系统都包含一组数据库角色(用户和组)。这些角色与运行服务器的操作系统管理的用户和组相互独立。 但是,为方便起见,可能希望维护操作系统用户名和Greenplum数据库角色名之间的关系, 因为许多客户端应用程序使用当前操作系统用户名作为其默认值。

在Greenplum数据库中,用户通过master实例登录并连接, 然后master实例验证其角色和访问权限。 然后,master服务器以当前登录的角色的身份,将命令发布到幕后的segment实例。

角色在系统级别定义,这意味着它们对系统中的所有数据库都有效。

为了引导Greenplum数据库系统,新初始化的系统始终包含一个预定义的超级用户角色(也称为系统用户)。 该角色将与初始化Greenplum数据库系统的操作系统用户具有相同的名称。通常,此角色已命名为gpadmin。 为了创建更多角色,您首先必须以此初始角色进行连接。

角色和权限的安全最佳实践

  • 保护gpadmin系统用户 Greenplum需要UNIX用户标识来安装和初始化Greenplum数据库系统。 在Greenplum文档中,该系统用户称为gpadmin。 该gpadmin是Greenplum数据库中的默认数据库超级用户, 也是Greenplum安装文件系统及基础数据文件的所有者。 此默认管理员帐户是Greenplum数据库设计的基础。 没有它,系统无法运行,并且无法限制此gpadmin用户ID的访问权限。 针对特定目的,使用角色来管理谁有权访问数据库。 应该只在系统维护任务时使用gpadmin账户,如扩展和升级。 以此用户ID登录Greenplum主机的任何人都可以读取,更改或删除任何数据,包括系统目录数据和数据库访问权限。 因此,保护gpadmin用户ID并仅提供对基本系统管理员的访问权限非常重要。 管理员只应执行某些系统维护任务(如升级或扩展)时以gpadmin账户登录Greenplum。 数据库用户永远不应登录为gpadmin,ETL或生产工作永远不应该以gpadmin运行。
  • 为登录的每个用户分配不同的角色。为了记录和审计,允许每个允许登录Greenplum数据库的用户拥有自己的数据库角色。 对于应用程序或Web服务,考虑为每个应用程序或服务创建不同的角色。参阅创建新角色(用户)
  • 使用组来管理访问权限。参阅角色成员
  • 限制具有SUPERUSER角色属性的用户。 只有系统管理员才能获得超级用户权限。参阅变更角色属性

创建新角色(用户)

用户级角色被视为可以登录数据库并启动数据库会话的数据库角色。 因此,当你使用CREATE ROLE命令创建新的用户级角色时,必须指定LOGIN权限。例如:

数据库角色可以具有许多属性,这些属性定义角色可以在数据库中执行的任务类型。 可以在创建角色时设置这些属性,也可以稍后使用ALTER ROLE命令。 关于可以设置的角色属性的说明,参阅Table 1

变更角色属性

数据库角色可以具有许多属性,这些属性定义角色可以在数据库中执行的任务类型。

属性描述
SUPERUSER | NOSUPERUSER确定角色是否为超级用户。您必须自己是超级用户才能创建新的超级用户。默认值是NOSUPERUSER。
CREATEDB | NOCREATEDB确定是否允许角色创建数据库。 默认值是NOCREATEDB。
CREATEROLE | NOCREATEROLE确定是否允许角色创建和管理其他角色。 默认值是NOCREATEROLE。
INHERIT | NOINHERIT确定角色是否继承其所属角色的权限。 具有INHERIT属性的角色继承可以自动使用已授予其直接或间接成员的所有角色的任何数据库权限。 默认值是INHERIT。
LOGIN | NOLOGIN确定是否允许角色登录。 具有该LOGIN属性的角色可以被认为是用户。没有此属性的角色对于管理数据库权限(组)非常有用。 默认值是NOLOGIN。
CONNECTION LIMIT connlimit如果角色可以登录,则指定角色可以使用的并发连接数。默认值-1表示没有限制。
CREATEEXTTABLE | NOCREATEEXTTABLE确定是否允许角色创建外部表。 默认值是NOCREATEEXTTABLE。 具有该CREATEEXTTABLE属性的角色,默认外部表类型是可读的, 注意使用文件或执行的外部表只能由超级用户创建。
PASSWORD ‘password设置角色的密码。 如果您不打算使用密码身份验证,则可以省略此选项。 如果未指定密码,则密码将设置为空,并且该用户的密码验证将始终失败。 可以选择将空密码明确写为PASSWORD NULL。
ENCRYPTED | UNENCRYPTED控制是否将新密码在pg_authid系统目录中存储为哈希字符串。 如果没有指定ENCRYPTED,或者指定UNENCRYPTED, 则默认行为由password_encryption配置参数决定,该参数默认值为on。如果提供password字符串已经是哈希格式,无论是否指定ENCRYPTED或UNENCRYPTED都原样存储。有关保护登录密码的其他信息,参阅保护Greenplum数据库中的密码
VALID UNTIL ‘timestamp设置角色密码失效的日期和时间。如果省略,密码将始终有效。
RESOURCE QUEUE queue_name将角色分配给指定的资源队列以进行工作负载管理。 任何角色问题的声明都受资源队列限制的约束。 注意RESOURCE QUEUE属性不可继承; 必须为每个用户级别(LOGIN)角色分别设置。
DENY {deny_interval | deny_point}限制时间间隔期间的访问,按日期或日期时间指定。更多信息,参阅基于时间的身份验证

可以在创建角色时设置这些属性,也可在使用ALTER ROLE命令。例如:

因服务的特定设置,角色还可以具有特定于角色的默认值。例如,要为角色设置默认方案搜索路径:

角色成员

将用户组合在一起以便于管理对象权限通常很方便:这样,可以将权限授予整个组或从组中撤销。 在Greenplum数据库中,通过创建表示组的角色,然后将组角色的成员身份授予单个用户角色来完成的。

使用CREATE ROLE此SQL创建一个新的组角色。例如:

一旦组角色存在后, 可以使用GRANT和REVOKE命令,来添加和删除成员(用户角色)。例如:

为了管理对象权限,您只能为组级角色授予适当的权限(参阅Table 2)。 然后,成员用户角色将继承组角色的对象权限。例如:

角色属性LOGIN、SUPERUSER、CREATEDB、 CREATEROLE、CREATEEXTTABLE和RESOURCE QUEUE 永远不会像数据库对象上的普通权限那样被继承。 用户成员实际上必须SET ROLE具有这些属性的特定角色,才能使用该属性。 在上面的例子中,我们给出了CREATEDB和CREATEROLE到了admin角色。 如果sally是admin角色的成员,她可以发出以下命令来承担父角色的角色属性:

管理对象权限

当对象(表、视图、序列、数据库、函数、语言、模式或表空间)时,会为其分配一个所有者。 所有者通常是执行创建语句的角色。 对于大多数类型的对象,初始状态是只有所有者(或超级用户)可以对该对象执行任何操作。 要允许其他角色使用它,必须授予权限。 Greenplum Database支持每种对象类型的以下权限:

对象类型权限
表、视图、序列SELECT INSERT UPDATE DELETE RULE ALL
外部表SELECT RULE ALL
数据库CONNECT CREATE TEMPORARY | TEMP ALL
函数EXECUTE
过程语言USAGE
模式CREATE USAGE ALL
自定义协议SELECT INSERT UPDATE DELETE RULE ALL

Note: 您必须单独为每个对象授予权限。 例如,授予数据库上ALL权限,并不授予对该数据库中的对象的完全访问权限。 它只授予数据库级别的(CONNECT、CREATE、TEMPORARY)到数据库本身的权限。

使用GRANT此SQL命令为对象赋予指定的角色权限。 例如,要授予名为jsmith的角色在名为mytable的表上插入权限:

同样,授予jsmith仅为名为table2表中的名为col1的查询权限,表2:

要撤消权限,使用REVOKE命令。例如:

也可以使用DROP OWNED和REASSIGN OWNED命令 用于管理已弃用角色所拥有的对象(注意:只有对象的所有者或超级用户才能删除对象或重新分配所有权)。例如:

模拟行级访问控制

Greenplum数据库不支持行级访问或行级标记的安全性。 可以使用视图来限制所选行的行来模拟行级访问。 可以通过向表中添加额外的列来存储敏感度信息, 然后使用视图来控制基于此列的行级访问来模拟行级标签。 然后,可以授予角色访问视图而不是基本表的权限。

加密数据

Greenplum数据库安装了一个可选的加密解密函数模块pgcrypto。 该pgcrypto函数允许数据库管理员以加密形式存储某些数据列。 这为敏感数据增加了额外的保护层, 没有加密密钥,任何人都无法读取以加密形式存储在Greenplum数据库中的数据,也无法直接从磁盘读取数据。

Note: 该pgcrypto数据库服务器内运行,这意味着在pgcrypto和客户端应用程序之间, 所有数据和密码以明文形式移动。为获得最佳安全性,还应考虑在客户端和Greenplum主服务器之间使用SSL连接。

要使用pgcrypto函数,在每个要使用此函数的数据库中,注册pgcrypto扩展。例如:

有关各个函数的更多信息,参阅PostgreSQL文档中的pgcrypto

保护Greenplum数据库中的密码

在其默认配置中,Greenplum Database以MD5哈希值形式, 将登录用户密码保存在pg_authid系统目录, 而不是保存明文密码。 任何能够查看此pg_authid表的人都可以看到哈希字符串,但没有密码。 这还可确保在将数据库转储到备份文件时隐藏密码。

使用以下任何命令设置密码时执行哈希函数

  • CREATE USER name WITH ENCRYPTED PASSWORD ‘password’
  • CREATE ROLE name WITH LOGIN ENCRYPTED PASSWORD ‘password’
  • ALTER USER name WITH ENCRYPTED PASSWORD ‘password’
  • ALTER ROLE name WITH ENCRYPTED PASSWORD ‘password’

当password_encryption系统配置参数为on(这是默认值)时, ENCRYPTED关键字可以被省略。 当命令未指定ENCRYPTED或UNENCRYPTED时, password_encryption配置参数决定是存储明文密码还是哈希密码。

Note: SQL命令语法和password_encryption配置变量,包括术语加密。 但是密码在技术上并不是加密。它们是被哈希,因此无法解密。

哈希是在通过将明文密码和角色名称串起来,然后计算的。 MD5哈希生成一个前缀为md5字符的32字节十六进制字符串。 哈希密码保存在pg_authid系统表rolpassword的列。

尽管不被推荐,但密码可以以明文形式保存在数据库中,通过UNENCRYPTED命令关键词, 或者将password_encryption配置变量参数设置为off。 注意,更改配置值不会影响现有密码,只会影响新创建或更新的密码。

要全局地设置password_encryption,在命令行中使用gpadmin用户执行这些命令:

要在会话中设置password_encryption,使用SQL的SET命令。例如:

密码可以使用SHA-256哈希算法而不是默认的MD5哈希算法进行哈希。 该算法生成一个前缀为sha256字符的64字节十六进制字符串。

Note:

虽然SHA-256使用更强的加密算法并生成更长的哈希字符串,但它不能被用于MD5认证方法。 要使用SHA-256密码哈希,必须在pg_hba.conf配置文件中,将认证方法设置为password, 以便明文密码被发送给Greenplum数据库。 由于明文密码是通过网络发送的,因此在使用SHA-256时使用SSL进行客户端连接非常重要。 另一方面,默认md5认证方法, 身份验证方法在将密码发送到Greenplum数据库之前对密码进行两次哈希处理。 一次是在密码和角色名称上,然后再次在客户端和服务器之间共享盐值,因此明文密码永远不会发送到网络。

要启用SHA-256哈希,更改password_hash_algorithm配置参数的默认值从md5为sha-256。 该参数可以全局设置或在会话级别设置。要全局地设置password_hash_algorithm,在命令行中使用gpadmin用户执行这些命令:

要全局地设置password_hash_algorithm,SQL的SET命令。例如:

基于时间的身份验证

Greenplum数据库使管理员可以按角色限制对特定时间的访问。 使用CREATE ROLE或ALTER ROLE命令,指定基于时间的约束。

有关详细信息,参阅Greenplum数据库安全配置指南.

配置数据库授权

描述如何通过使用角色和权限在用户级别限制对数据库数据的授权访问。

访问权限和角色

Greenplum数据库使用角色管理数据库访问权限。角色的概念包括了用户和组的概念。一个角色可以是一个数据库用户、组或者两者皆有。角色可以拥有数据库对象(例如表)并且可以把那些对象上的特权指派给其他角色以控制对那些对象的访问。角色可以是其他角色的成员,因此成员角色可以继承其父角色的对象特权。

每一个Greenplum数据库系统都包含一组数据库角色(用户和组)。那些角色独立于服务器所运行的操作系统管理的用户和组。不过,为了方便用户可能想要维护操作系统用户名和Greenplum数据库角色名之间的关系,因为很多客户端应用使用当前的操作系统用户名作为默认的数据库用户名。

在Greenplum数据库中,用户通过Master实例登入和连接,Master实例会验证它们的角色和访问特权。然后Master将在幕后用当前登入的角色向Segment实例发出命令。

角色被定义在系统层面上,因此它们对系统中的所有数据库都有效。

要让Greenplum数据库系统自举,刚刚初始化好的系统总是包含一个预定义的超级用户角色(也被称作系统该用户)。这个角色将和初始化Greenplum数据库系统的操作系统用户具有相同的名称。习惯上,这个角色被命名为gpadmin。要创建更多角色,用户首先必须作为这个初始角色连接。

管理对象特权

当一个对象(表、视图、序列、数据库、函数、语言、方案或表空间)被创建时,它会被指派一个拥有者。拥有者通常就是执行创建语句的角色。对于大部分种类的对象,初始状态只有拥有者(或者超级用户)可以对该对象做任何事情。要允许其他角色使用对象,必须授予特权。对每一类对象,Greenplum数据库支持下面的特权:

对象类型特权
表、视图、序列SELECT、INSERT、UPDATE、DELETE、RULE、ALL
外部表SELECT、RULE、ALL
数据库CONNECT、CREATE、TEMPORARY | TEMP、ALL
函数EXECUTE
Procedural LanguagesUSAGE
方案CREATE、USAGE、ALL

特权必须为每个对象单独授予。例如,在一个数据库上授予ALL并不会为该数据库中的对象授予完全的访问。它只授予所有的数据库级别特权(CONNECT, CREATE, TEMPORARY)给数据库本身。

使用SQL命令GRANT把对象上的特权给一个特定角色。例如:

T要收回特权,可使用REVOKE命令。例如:

用户还可以使用DROP OWNED以及REASSIGN OWNED命令来管理弃用角色所拥有的对象(注意:只有对象的拥有者或者超级用户可以删除一个对象或者重新指派拥有关系)。例如:

使用SHA-256加密

Greenplum数据库的访问控制大概能对应桔皮书的“C2”级安全性,而不是“B1”级。Greenplum数据库当前支持对象级别的访问特权。行级或者列级访问不被支持,标记安全性也不被支持。

行级和列级访问可以使用限制被选择的行列的视图来模拟。行级标签可以通过为表增加存储敏感度信息的额外列模拟,然后使用视图来控制基于该列的行级访问。然后可以为角色授予对视图的访问而不是对基表的访问。虽然这些变通方案不能提供和“B1”级安全性相同的安全性,但对于很多组织来说它们仍然是一种可行的替代方案。

要使用SHA-256加密,用户必须在系统或者会话级别上设置一个参数。这一节介绍如何使用一个服务器参数来实现SHA-256加密的口令存储。注意为了使用SHA-256加密进行存储,客户端认证方法必须被设置为password而不是默认的MD5(详见 配置SSL客户端连接)。这意味着口令在网络上以明文方式传输,因此我们高度推荐用户设置SSL来加密客户端和服务器之间的通信信道。

用户可以在系统范围或者以会话为基础设置选择的加密方法。可用的加密方法是SHA-256以及MD5(为了向后兼容性)。

在系统范围设置加密方法

要在整个Greenplum系统(Master及其Segment)上设置password_hash_algorithm服务器参数:

  1. 作为超级用户登入Greenplum数据库实例。

  2. 执行gpconfig把password_hash_algorithm设置为SHA-256:

  3. 验证设置:

    将看到:

为单个会话设置加密方法

要为单个会话设置password_hash_algorithm服务器参数:

  1. 作为超级用户登入Greenplum数据库实例。

  2. 设置password_hash_algorithm为SHA-256:

  3. 验证设置:

    将会看到:

下面是展示新设置效果的例子:

  1. 作为超级用户登入并且验证口令哈希算法设置:

  2. 创建一个带有口令且有登录特权的新角色。

  3. 更改客户端认证方法以允许SHA-256加密口令的存储:

    在Master上打开pg_hba.conf文件并且加入下面的行:

  4. 重启集群。

  5. 作为刚创建好的用户testdb登入数据库。

  6. 在提示下输入正确的口令。

  7. 验证口令被存储为SHA-256哈希。

    口令的哈希被存储在pg_authid.rolpasswod中。

  8. 作为超级用户登入。

  9. 执行下列查询:

用时间限制访问

Greenplum数据库让管理员能够限制角色在特定时间的访问。可使用CREATE ROLE或者ALTER ROLE命令指定基于时间的约束。

可以用日期或者日期和时间限制访问。无需删除和重建角色就可以移除这些约束。

基于时间的约束只适用于它们指派给的角色。如果角色是另一个有时间约束的角色的成员,时间约束不会被继承。

基于时间的约束仅在登录时被实施。SET ROLE以及SET SESSION AUTHORIZATION命令不受任何基于时间的约束的影响。

要为角色设置基于时间的约束,要求超级用户或者CREATEROLE特权。没有人可以为超级用户增加基于时间的约束。

有两种方法增加基于时间的约束。在CREATE ROLE或者ALTER ROLE命令中使用关键词DENY,后面接上下面的一种形式:。

  • 访问被限制的一个日子,以及可选的时间。例如,在周三不能访问。
  • 一个区间——也就是一个开始日期和结束日期以及可选的时间——在其间访问被限制。例如,从周三下午10点到周四上午8点期间不能访问。

用户可以指定多个限制,例如,周三的任何时间都不能访问并且在周五的下午3点到5点之间不能访问。

有两种方法指定一个日子。使用后面跟着带单引号的英语中平日术语的DAY或者0到6之间的一个数字,如下表所示。

英语术语数字
DAY ‘Sunday’DAY 0
DAY ‘Monday’DAY 1
DAY ‘Tuesday’DAY 2
DAY ‘Wednesday’DAY 3
DAY ‘Thursday’DAY 4
DAY ‘Friday’DAY 5
DAY ‘Saturday’DAY 6

日子中的时间可以以12小时制或者24小时制指定。在词TIME后面接上带单引号的说明。只能指定小时和分钟并且用分号分隔(:)。如果使用12小时制,在最后加上AM或者PM。下面的例子展示了多种时间说明。

Important: 基于时间的约束根据服务器时间实施。不考虑时区。

要指定一个时间区间,在其间访问被禁止,可以用词BETWEEN和AND指定两个日子/时间说明。如下所示。DAY总是需要的。

最后三个语句等效。

Note: 区间不能在周六之后回卷。

下面的语法不正确:

正确的说明是使用两个DENY子句,如下所示:

下面的例子展示了创建带有基于时间约束的角色并且修改角色以增加基于时间的约束。只有基于时间约束所需的语句被显示。更多有关创建和修改角色的细节请见 Greenplum数据库参考指南中CREATE ROLE 和 ALTER ROLE的描述。

例 1 – 创建带有基于时间约束的新角色

在周末不允许访问。

例 2 – 修改角色以增加基于时间的约束

每晚的凌晨2点到4点之间不允许访问。

例 3 – 修改角色以增加基于时间的约束

在周三或者周五下午的3点到5点间不允许访问。

删除基于时间的约束

要移除基于时间的约束,请使用ALTER ROLE命令。输入后面跟着要删除的日子/时间说明的关键词DROP DENY FOR。

任何含有DROP子句中全部或者部分条件的约束都会被移除。例如,如果一条现有的约束否定周一和周二的访问,并且DROP子句移除周一的约束,则这一条现有的约束会被完全删除。DROP子句会完全移除所有与DROP子句中约束交叠的约束。即便发生交叠的约束包含有比DROP子句更多的限制,它们也会被完全删除。

例 1 - 从一个角色移除一条基于时间的限制

这个语句将为例2中的generaluser角色移除所有与周一约束交叠的约束,即便其中有额外的约束。

CREATE ROLE

定义一个新的数据库角色(用户或组)。

概要

其中option可以是:

描述

CREATE ROLE在Greenplum数据库系统中添加了新角色。 角色是可以拥有数据库对象并具有数据库特权的实体。 根据角色的使用方式,可以将角色视为用户,组或两者。 您必须具有CREATEROLE特权或是数据库超级用户才能使用此命令。

请注意,角色是在系统级别定义的,并且对于Greenplum数据库系统中的所有数据库均有效。

参数

name

新角色的名称。

SUPERUSER

NOSUPERUSER

如果指定了SUPERUSER,则定义的角色将是超级用户,该超级用户可以覆盖数据库中的所有访问限制。 超级用户状态很危险,应仅在真正需要时使用。 您必须自己是超级用户才能创建新的超级用户。 默认值为NOSUPERUSER。

CREATEDB

NOCREATEDB

如果指定了CREATEDB,将允许所定义的角色创建新数据库。 NOCREATEDB(默认值)将使角色无法创建数据库。

CREATEROLE

NOCREATEROLE

如果指定了CREATEROLE,则允许定义的角色创建新角色,更改其他角色和删除其他角色。 NOCREATEROLE(默认值)将拒绝角色创建新角色或修改其他角色。

CREATEUSER

NOCREATEUSER

这些子句已经过时,但仍然被SUPERUSER和NOSUPERUSER的拼写接受。 请注意,它们不等同于CREATEROLE和NOCREATEROLE子句。

CREATEEXTTABLE

NOCREATEEXTTABLE

如果指定了CREATEEXTTABLE,则允许定义的角色创建外部表。 如果未指定,则默认type为readable,默认protocol为gpfdist。 有效类型为gpfdist,gpfdists,http和https。 NOCREATEEXTTABLE(默认类型)拒绝该角色创建外部表。 请注意,使用file或execute协议的外部表只能由超级用户创建。

使用GRANT…ON PROTOCOL命令允许用户创建和使用具有自定义协议类型的外部表, 包括Greenplum数据库附带的s3和pxf协议。

INHERIT

NOINHERIT

如果指定了该属性,则INHERIT(默认设置)允许该角色使用为其直接或间接所属的所有角色授予的任何数据库特权。 使用NOINHERIT时,另一个角色的成员资格仅授予SET ROLE权限给该另一个角色。

LOGIN

NOLOGIN

如果指定,则LOGIN允许角色登录数据库。 可以将具有LOGIN属性的角色视为用户。 具有NOLOGIN的角色对于管理数据库特权很有用,并且可以视为组。 如果未指定,则NOLOGIN为默认值, 除非CREATE ROLE通过其替代拼写CREATE USER被调用时。

REPLICATION

NOREPLICATION

这些子句确定是允许角色启动流复制还是使系统进入和退出备份模式。 具有REPLICATION属性的角色是具有很高特权的角色,并且仅应在实际用于复制的角色上使用。 如果未指定,则NOREPLICATION是默认值。

CONNECTION LIMIT connlimit

此角色可以建立的并发连接的最大数量。默认值-1表示没有限制。

PASSWORD password

使用LOGIN属性设置角色的用户密码。 如果您不打算使用密码身份验证,则可以忽略此选项。 如果未指定密码,则密码将设置为null,并且该用户的密码身份验证将始终失败。 空密码可以有选择地显式写为PASSWORD NULL。

ENCRYPTED

UNENCRYPTED

这些关键字控制密码是否以加密方式存储在系统catalog中。 (如果未指定,则默认行为由配置参数password_encryption决定。) 如果显示的密码字符串已经采用MD5加密格式,则将按原样存储加密, 而不管是否指定了ENCRYPTED或UNENCRYPTED(因为系统无法解密指定的加密密码字符串)。 这允许在转储/还原期间重新加载加密的密码。

VALID UNTIL ‘timestamp’

VALID UNTIL子句设置日期和时间,之后该角色的密码将不再有效。 如果省略此子句,密码将永不过期。

IN ROLE rolename

将新角色添加为命名角色的成员。 请注意,没有任何选项可以将新角色添加为管理员。 使用单独的GRANT命令来执行此操作。

ROLE rolename

将命名角色添加为该角色的成员,从而使该新角色成为一个组。

ADMIN rolename

ADMIN子句类似于ROLE, 但是被提及的角色被使用WITH ADMIN OPTION加入到新角色中, 从而赋予他们将这个角色的成员资格授予其他人的权利。

RESOURCE GROUP group_name

要分配给新角色的资源组的名称。 该角色将受限于资源组配置的并发事务,内存和CPU限制。 您可以将一个资源组分配给一个或多个角色。

如果未为新角色指定资源组,则会自动为该角色分配角色的默认资源组, 为SUPERUSER角色分配admin_group, 为非管理员角色分配default_group。

您可以将admin_group资源组分配给具有SUPERUSER属性的任何角色。

您可以将default_group资源组分配给任何角色。

您不能将为外部组件创建的资源组分配给角色。

RESOURCE QUEUE queue_name

新用户级别角色将分配到的资源队列的名称。 只能将具有LOGIN特权的角色分配给资源队列。 特殊关键字NONE表示将角色分配给默认资源队列。 一个角色只能属于一个资源队列。

具有SUPERUSER属性的角色不受资源队列限制。 对于超级用户角色,无论分配的资源队列施加什么限制,查询总是立即运行。

DENY deny_point

DENY BETWEEN deny_point AND deny_point

DENY和DENY BETWEEN关键字设置在登录时强制执行的基于时间的约束。 DENY设置拒绝访问的日期或日期和时间。 DENY BETWEEN设置一个拒绝访问的时间间隔。 两者都使用具有以下格式的参数deny_point:

deny_point参数的两个部分使用以下格式:

对于day:

对于time:

DENY BETWEEN子句使用两个deny_point参数:

有关基于时间的约束的更多信息和示例,请参阅Greenplum数据库管理员指南中的“管理角色和特权”。

注解

添加和删除角色成员(管理组)的首选方法是使用GRANTREVOKE

VALID UNTIL子句仅为密码而不是角色定义过期时间。 使用非基于密码的身份验证方法登录时,不会强制使用到期时间。

INHERIT属性控制可授予特权(数据库对象和角色成员的访问特权)的继承。 它不适用于由CREATE ROLE和ALTER ROLE设置的特殊角色属性。 例如,即使设置了INHERIT,具有CREATEDB特权的角色成员也不会立即授予创建数据库的能力。 这些特权/属性永远不会被继承: SUPERUSER,CREATEDB,CREATEROLE, CREATEEXTTABLE,LOGIN,RESOURCE GROUP和RESOURCE QUEUE。 必须在每个用户级角色上设置属性。

由于向后兼容,INHERIT属性是默认属性。 在以前的Greenplum数据库版本中,用户始终可以访问其所属组的所有特权。 但是,NOINHERIT提供与SQL标准中指定的语义更接近的匹配。

使用CREATEROLE特权时要小心。 对于CREATEROLE-role的特权,没有继承的概念。 这意味着,即使一个角色没有特定的特权,但被允许创建其他角色, 它也可以轻松地创建另一个角色,而该角色的特权不同于其自己的角色(创建具有超级用户特权的角色除外)。 例如,如果角色具有CREATEROLE特权,但没有CREATEDB特权,则它可以使用CREATEDB特权创建新角色。 因此,将具有CREATEROLE特权的角色视为几乎超级用户角色。

超级用户绝不执行CONNECTION LIMIT选项。

使用此命令指定未加密的密码时必须小心。 密码将以明文形式传输到服务器,并且也可能会记录在客户端的命令历史记录或服务器日志中。 但是,客户端程序createuser传输加密的密码。 另外,psql包含命令\password,可用于稍后安全地更改密码。

示例

创建一个可以登录但不提供密码的角色:

创建一个属于资源队列的角色:

使用有效期至2016年底的密码创建角色 (CREATE USER与CREATE ROLE相同,只不过它暗含了LOGIN):

创建一个可以创建数据库并管理其他角色的角色:

本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信dbaup66,谢谢!
AiDBA后续精彩内容已被站长无情隐藏,请输入验证码解锁本文!
验证码:
获取验证码: 请先关注本站微信公众号,然后回复“验证码”,获取验证码。在微信里搜索“AiDBA”或者“dbaup6”或者微信扫描右侧二维码都可以关注本站微信公众号。

标签:

Avatar photo

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复