合 PG和GreenPlum中的create user和create role及有效期的配置
Tags: PGGreenPlumPostgreSQL密码有效期
CREATE USER
CREATE USER — 定义一个新的数据库角色
大纲
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | CREATE USER name [ [ WITH ] option [ ... ] ] 这里 option 可以是: SUPERUSER | NOSUPERUSER | CREATEDB | NOCREATEDB | CREATEROLE | NOCREATEROLE | INHERIT | NOINHERIT | LOGIN | NOLOGIN | REPLICATION | NOREPLICATION | BYPASSRLS | NOBYPASSRLS | CONNECTION LIMIT connlimit | [ ENCRYPTED ] PASSWORD 'password' | PASSWORD NULL | VALID UNTIL 'timestamp' | IN ROLE role_name [, ...] | IN GROUP role_name [, ...] | ROLE role_name [, ...] | ADMIN role_name [, ...] | USER role_name [, ...] | SYSID uid |
描述
CREATE USER
现在是 CREATE ROLE
的一个别名。唯一的区别是 CREATE USER
中LOGIN
被作为默认值,而NOLOGIN
是 CREATE ROLE
的默认值。
兼容性
CREATE USER
语句是一种 PostgreSQL扩展。SQL 标准 把用户的定义留给实现来解释。
CREATE ROLE
CREATE ROLE — 定义一个新的数据库角色
大纲
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | CREATE ROLE name [ [ WITH ] option [ ... ] ] where option可以是: SUPERUSER | NOSUPERUSER | CREATEDB | NOCREATEDB | CREATEROLE | NOCREATEROLE | INHERIT | NOINHERIT | LOGIN | NOLOGIN | REPLICATION | NOREPLICATION | BYPASSRLS | NOBYPASSRLS | CONNECTION LIMIT connlimit | [ ENCRYPTED ] PASSWORD 'password' | PASSWORD NULL | VALID UNTIL 'timestamp' | IN ROLE role_name [, ...] | IN GROUP role_name [, ...] | ROLE role_name [, ...] | ADMIN role_name [, ...] | USER role_name [, ...] | SYSID uid |
描述
CREATE ROLE
向PostgreSQL数据库集簇增加一个新的角色。一个角色是一个实体,它可以拥有数据库对象并且拥有数据库特权。根据一个角色如何被使用,它可以被考虑成一个“用户”、一个“组”或者两者。有关管理用户和认证的信息可以参考第 22 章和第 21 章。要使用这个命令,你必须具有CREATEROLE
特权或者成为一个数据库超级用户。
注意角色是定义在数据库集簇层面上的,并且因此在集簇中的所有数据库中都可用。
参数
name
新角色的名称。
SUPERUSER
NOSUPERUSER
这些子句决定新角色是否是一个“超级用户”,它可以越过数据库内的所有访问限制。超级用户状态很危险并且只应该在确实需要时才用。要创建一个新超级用户,你必须自己是一个超级用户。如果没有指定,默认值是
NOSUPERUSER
。CREATEDB
NOCREATEDB
这些子句定义一个角色创建数据库的能力。如果指定了
CREATEDB
,被定义的角色将被允许创建新的数据库。指定NOCREATEDB
将否定一个角色创建数据库的能力。如果没有指定,默认值是NOCREATEDB
。CREATEROLE
NOCREATEROLE
这些子句决定一个角色是否被允许创建新的角色(也就是执行
CREATE ROLE
)。一个带有CREATEROLE
特权的角色也能修改和删除其他角色。如果没有指定,默认值是NOCREATEROLE
。INHERIT
NOINHERIT
如果新的角色是其他角色的成员,这些子句决定新角色是否从那些角色中“继承”特权,把新角色作为成员的角色称为新角色的父角色。一个带有
INHERIT
属性的角色能够自动使用已经被授予给其直接或间接父角色的任何数据库特权。如果没有INHERIT
,在另一个角色中的成员关系只会把SET ROLE
的能力授予给那个其他角色,只有在这样做后那个其他角色的特权才可用。如果没有指定,默认值是INHERIT
。LOGIN
NOLOGIN
这些子句决定一个角色是否被允许登录,也就是在客户端连接期间该角色是否能被 给定为初始会话认证名称。一个具有
LOGIN
属性的角色可以被 考虑为一个用户。没有这个属性的角色对于管理数据库特权很有用,但是却不是 用户这个词的通常意义。如果没有指定,默认值是NOLOGIN
, 不过当CREATE ROLE
被通过CREATE USER
调用时默认值会是LOGIN
。REPLICATION
NOREPLICATION
这些子句决定一个角色是否为复制角色。角色必须具有这个属性(或者成为一个超级用户)才能以复制模式(物理复制或者逻辑复制)连接到服务器以及创建或者删除复制槽。一个具有
REPLICATION
属性的角色是一个具有非常高特权的角色,并且只应被用于确实需要复制的角色上。如果没有指定,默认值是NOREPLICATION
。 您必须是超级用户才能创建具有REPLICATION
属性的新角色。BYPASSRLS
NOBYPASSRLS
这些子句决定是否一个角色可以绕过每一条行级安全性(RLS)策略。 默认是
NOBYPASSRLS
。 您必须是超级用户才能创建具有BYPASSRLS
属性的新角色。注意 pg_dump 将默认把row_security
设置为OFF
, 以确保一个表的所有内容被转储出来。如果运行 pg_dump 的用户不具有适当的权限,将会返回一个错误。 但是,超级用户和被转储表的拥有者总是可以绕过 RLS。CONNECTION LIMIT
connlimit
如果角色能登录,这指定该角色能建立多少并发连接。-1(默认值)表示无限制。注意这个限制仅针对于普通连接。预备事务和后台工作者连接都不受这一限制管辖。
[
ENCRYPTED
]PASSWORD
'password
'PASSWORD NULL
设置角色的口令(口令只对具有
LOGIN
属性的角色有用,但是不管怎样你还是可以为没有该属性的角色定义一个口令)。如果你没有计划使用口令认证,你可以忽略这个选项。如果没有指定口令,口令将被设置为空并且该用户的口令认证总是会失败。也可以用PASSWORD NULL
显式地写出一个空口令。注意指定一个空字符串也将把口令设置为空,但是在PostgreSQL版本10之前是不能这样做的。在早期的版本中,是否可以使用空字符串取决于认证方法和确切的版本,而libpq在任何情况下都将拒绝使用空字符串。为了避免混淆,应该避免指定空字符串。口令总是以加密的方式存放在系统目录中。ENCRYPTED
关键词没有实际效果,它只是为了向后兼容性而存在。加密的方法由配置参数password_encryption决定。如果当前的口令字符串已经是MD5加密或者SCRAM加密的格式,那么不管password_encryption
的值是什么,口令字符串还是原样存储(因为系统无法解密以不同格式加密的口令字符串)。这种方式允许在转储/恢复时重载加密的口令。VALID UNTIL
'timestamp
'VALID UNTIL
机制设置一个日期和时间,在该时间点之后角色的口令将会失效。如果这个子句被忽略,那么口令将总是有效。IN ROLE
role_name
IN ROLE
子句列出一个或多个现有的角色,新角色将被立即作为新成员加入到这些角色中(注意没有选项可以把新角色作为一个管理员加入,需要用一个单独的GRANT
命令来完成)。IN GROUP
role_name
IN GROUP
是IN ROLE
的一种已废弃的拼写方式。ROLE
role_name
ROLE
子句列出一个或者多个现有角色,它们会被自动作为成员加入到新角色中(这实际上新角色变成了一个“组”)。ADMIN
role_name
ADMIN
子句与ROLE
相似,但是被提及的角色被使用WITH ADMIN OPTION
加入到新角色中,让它们能够把这个角色中的成员关系授予给其他人。本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信dbaup66,谢谢!