I. 教程
II. SQL 语言
III. 服务器管理
- 章14. 安装指导
- 章15. 在 Windows 上安装客户端
- 章16. 操作系统环境
- 章17. 服务器配置
- 章18. 数据库角色和权限
- 章19. 管理数据库
- 章21. 区域
- 章20. 用户认证
- 章22. 日常数据库维护工作
- 章23. 备份与恢复
- 章24. 高可用性与负载均衡
- 章25. 监控数据库的活动
- 章26. 监控磁盘使用情况
- 章27. 可靠性和预写式日志
- 章28. 回归测试
IV. 客户端接口
- Chapter 28. libpq - C 库
- 章29.
- Chapter 30. ecpg - 在 C 里嵌入 SQL
- Chapter 31. 信息模式
- 31.2. 数据类型
- 31.3. informationschemacatalog_name
- 31.4. applicable_roles
- 31.5. check_constraints
- 31.6. columndomainusage
- 31.7. column_privileges
- 31.8. columnudtusage
- 31.9. columns
- 31.10. constraintcolumnusage
- 31.11. constrainttableusage
- 31.12. datatypeprivileges
- 31.13. domain_constraints
- 31.14. domainudtusage
- 31.15. domains
- 31.16. element_types
- 31.17. enabled_roles
- 31.18. keycolumnusage
- 31.20. referential_constraints
- 31.21. rolecolumngrants
- 31.22. roleroutinegrants
- 31.23. roletablegrants
- 31.24. roleusagegrants
- 31.25. routine_privileges
- 31.26. routines
- 31.27. schemata
- 31.28. sql_features
- 31.29. sqlimplementationinfo
- 31.30. sql_languages
- 31.31. sql_packages
- 31.32. sql_sizing
- 31.33. sqlsizingprofiles
- 31.34. table_constraints
- 31.35. table_privileges
- 31.36. tables
- 31.37. triggers
- 31.38. usage_privileges
- 31.39. viewcolumnusage
- 31.40. viewtableusage
- 31.41. views
V. 服务器端编程
- 章33. 扩展 SQL
- 章34. 触发器
- 章35. 规则系统
- 章36. 过程语言
- 章37. PL/pgSQL - SQL 过程语言
- 章38. PL/Tcl - Tcl 过程语言
- 章39. PL/Perl - Perl 过程语言
- 章40. PL/Python - Python 过程语言
- 章41. 服务器编程接口
VI. 参考手册
- I. SQL 命令
- ABORT
- ALTER AGGREGATE
- ALTER CONVERSION
- ALTER DATABASE
- ALTER DOMAIN
- ALTER FUNCTION
- ALTER GROUP
- ALTER INDEX
- ALTER LANGUAGE
- ALTER OPERATOR
- ALTER OPERATOR CLASS
- ALTER ROLE
- ALTER SCHEMA
- ALTER SEQUENCE
- ALTER TABLE
- ALTER TABLESPACE
- ALTER TRIGGER
- ALTER TYPE
- ALTER USER
- ANALYZE
- BEGIN
- CHECKPOINT
- CLOSE
- CLUSTER
- COMMENT
- COMMIT PREPARED
- COMMIT
- COPY
- CREATE AGGREGATE
- CREATE CAST
- CREATE CONSTRAINT TRIGGER
- CREATE CONVERSION
- CREATE DATABASE
- CREATE DOMAIN
- CREATE FUNCTION
- CREATE GROUP
- CREATE INDEX
- CREATE LANGUAGE
- CREATE OPERATOR CLASS
- CREATE OPERATOR
- CREATE ROLE
- CREATE RULE
- CREATE SCHEMA
- CREATE SEQUENCE
- CREATE TABLE
- CREATE TABLE AS
- CREATE TABLESPACE
- CREATE TRIGGER
- CREATE TYPE
- CREATE USER
- CREATE VIEW
- DEALLOCATE
- DECLARE
- DELETE
- DROP OWNED
- DROP AGGREGATE
- DROP CAST
- DROP CONVERSION
- DROP DATABASE
- DROP DOMAIN
- DROP FUNCTION
- DROP GROUP
- DROP INDEX
- DROP LANGUAGE
- DROP OPERATOR CLASS
- DROP OPERATOR
- DROP ROLE
- DROP RULE
- DROP SCHEMA
- DROP SEQUENCE
- DROP TABLE
- DROP TABLESPACE
- DROP TRIGGER
- DROP TYPE
- DROP USER
- DROP VIEW
- END
- EXECUTE
- EXPLAIN
- FETCH
- GRANT
- INSERT
- LISTEN
- LOAD
- LOCK
- MOVE
- NOTIFY
- PREPARE TRANSACTION
- PREPARE
- REASSIGN OWNED
- REINDEX
- RELEASE SAVEPOINT
- RESET
- REVOKE
- ROLLBACK PREPARED
- ROLLBACK TO SAVEPOINT
- ROLLBACK
- SAVEPOINT
- SELECT
- SELECT INTO
- SET
- SET CONSTRAINTS
- SET ROLE
- SET SESSION AUTHORIZATION
- SET TRANSACTION
- SHOW
- START TRANSACTION
- TRUNCATE
- UNLISTEN
- UPDATE
- VACUUM
- II. PostgreSQL 客户端应用程序
- III. PostgreSQL 服务器应用程序
VII. 内部
- 章42. PostgreSQL 内部概貌
- 章43. 系统表
- 43.1. 概述
- 43.2. pg_aggregate
- 43.3. pg_am
- 43.4. pg_amop
- 43.5. pg_amproc
- 43.6. pg_attrdef
- 43.7. pg_attribute
- 43.8. pg_authid
- 43.9. pgauthmembers
- 43.10. pg_autovacuum
- 43.11. pg_cast
- 43.12. pg_class
- 43.13. pg_constraint
- 43.14. pg_conversion
- 43.15. pg_database
- 43.16. pg_depend
- 43.17. pg_description
- 43.18. pg_index
- 43.19. pg_inherits
- 43.20. pg_language
- 43.21. pg_largeobject
- 43.22. pg_listener
- 43.23. pg_namespace
- 43.24. pg_opclass
- 43.25. pg_operator
- 43.26. pg_pltemplate
- 43.27. pg_proc
- 43.28. pg_rewrite
- 43.29. pg_shdepend
- 43.30. pg_shdescription
- 43.31. pg_statistic
- 43.32. pg_tablespace
- 43.33. pg_trigger
- 43.34. pg_type
- 43.35. 系统视图
- 43.36. pg_cursors
- 43.37. pg_group
- 43.38. pg_indexes
- 43.39. pg_locks
- 43.40. pgpreparedstatements
- 43.41. pgpreparedxacts
- 43.42. pg_roles
- 43.43. pg_rules
- 43.44. pg_settings
- 43.45. pg_shadow
- 43.46. pg_stats
- 43.47. pg_tables
- 43.48. pgtimezoneabbrevs
- 43.49. pgtimezonenames
- 43.50. pg_user
- 43.51. pg_views
- 章44. 前/后端协议
- 章45. PostgreSQL 编码约定
- 章46. 本地语言支持
- 章47. 书写一个过程语言处理器
- 章48. 基因查询优化器
- 章49. 索引访问方法接口定义
- 章50. GiST 索引
- 章51. GIN 索引
- 章52. 数据库物理存储
- 章53. BKI 后端接口
- 章54. 规划器如何使用统计信息
VIII. 附录
CREATE ROLE
名称
CREATE ROLE--定义一个新数据库角色语法
CREATE ROLEname
[ [ WITH ]option
[ ... ] ] 这里的option
可以是: SUPERUSER | NOSUPERUSER | CREATEDB | NOCREATEDB | CREATEROLE | NOCREATEROLE | CREATEUSER | NOCREATEUSER | INHERIT | NOINHERIT | LOGIN | NOLOGIN | CONNECTION LIMITconnlimit
| [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password
' | VALID UNTIL 'timestamp
' | IN ROLErolename
[, ...] | IN GROUProlename
[, ...] | ROLErolename
[, ...] | ADMINrolename
[, ...] | USERrolename
[, ...] | SYSIDuid
描述
CREATE ROLE
向一个数据库集群添加一个新角色。一个角色是一个可以拥有数据库对象并且拥有数据库权限的纪录;角色可以认为是一个"用户"、一个"组"、或者是两者兼有。请参考章18和章20获得有关管理用户和权限的信息。要使用这条命令,你必须拥有 CREATEROLE
权限或者是数据库超级用户。
请注意角色是在数据库集群的范畴里定义的,因此对数据库集群里的所有数据库都有效。
参数
name
新角色的名称
SUPERUSER
NOSUPERUSER
这些子句决定一个新角色是否为"超级用户",这种用户可以超越数据库中的所有访问权限。超级用户状态是非常危险的,除非真正需要,否则不应该使用。如果没有声明,你自己必须是一个超级用户才能创建一个新的超级用户。如果没有指定,
NOSUPERUSER
将是缺省。CREATEDB
NOCREATEDB
这些子句定义一个角色是否能创建数据库。如果声明了
CREATEDB
,那么正在创建的角色可以创建新数据库。声明NOCREATEDB
将不会赋与新角色创建数据库的能力。如果没有声明,那么缺省是NOCREATEDB
CREATEROLE
NOCREATEROLE
这些子句决定一个角色是否可以创建新角色(也就是执行
CREATE ROLE
)。一个拥有CREATEROLE
权限的角色也可以修改和删除其它角色。如果没有声明,缺省是NOCREATEROLE
CREATEUSER
NOCREATEUSER
这些子句已经过时了,但是仍然接受,拼法为
SUPERUSER
和NOSUPERUSER
。请注意它们并不等于CREATEROLE
!人们很可能轻易地这么认为。INHERIT
NOINHERIT
这些子句决定一个角色是否"继承"它所在组的角色的权限。一个带有
INHERIT
属性的角色可以自动使用已经赋与它直接或间接所在组的任何权限。没有INHERIT
,其它角色的成员关系只赋与该角色SET ROLE
成其它角色的能力;其它角色的权限只是在这么做了之后才能获得。如果没有声明,缺省是INHERIT
LOGIN
NOLOGIN
这些子句决定一个角色是否可以登录;也就是说,该角色在客户端连接的时候是否可以被给予初始化会话的认证名字。一个拥有
LOGIN
属性的角色可以认为是一个用户。没有这个属性的角色可以用于管理数据库权限,但是并不是平常概念的用户。如果没有声明,除非是调用CREATE ROLE
的别名CREATE USER
,否则缺省将是NOLOGIN
CONNECTION LIMIT
connlimit
如果角色可以登录,这个参数声明该角色可以使用的并发连接数量。-1(缺省)意味着没有限制。
PASSWORD
password
设置角色的口令。口令只对那些拥有
LOGIN
属性的角色有意义,不过你当然可以给没有这个属性的用户定义口令。如果你不准备使用口令认证,你可以忽略这个选项。如果没有指定口令,口令将被设为空并且该用户的密码认证将总是失败。也可以明确的用PASSWORD NULL
指定口令为空。ENCRYPTED
UNENCRYPTED
这些关键字控制存储在系统表里面的口令是否加密。如果没有指定,那么缺省的行为由配置参数 password_encryption 控制。因为系统无法对指定的口令字符串进行解密,所以如果目前的口令字符串已经是用 MD5 加密的格式,那么那就会继续照此存放,而不管是否声明了
ENCRYPTED
或UNENCRYPTED
。这样就允许在转储/回复的时候重新加载加密的口令。请注意老的客户端可能缺乏对 MD5 认证机制的支持,以密文形式存储的口令需要这个机制来运作。
VALID UNTIL
'timestamp
'VALID UNTIL
子句设置角色的口令失效的时间戳。如果忽略了这个子句,那么口令将永远有效。IN ROLE
rolename
IN ROLE
子句列出一个或多个现有的角色,新角色将立即加入这些角色,成为它们的成员。请注意没有任何选项可以把新角色添加为管理员;必须使用独立的GRANT
命令来做这件事情。IN GROUP
rolename
IN GROUP
是IN ROLE
的过时的拼法。ROLE
rolename
ROLE
子句列出一个或多个现有的角色,它们将自动添加为这个新角色的成员。这个动作实际上就是把新角色做成一个"组"。ADMIN
rolename
ADMIN
子句类似ROLE
,只是给出的角色被增加到新角色WITH ADMIN OPTION
,给他们以把这个角色的成员权限赋与其它角色的权力。USER
rolename
USER
子句是ROLE
子句的过时拼法。SYSID
uid
SYSID
子句将被忽略,但是仍然接受之,主要为了向下兼容。
注意
使用 ALTER ROLE 改变一个角色的属性,使用 DROP ROLE 删除一个角色。所有在 CREATE ROLE
里声明的角色都可以在随后的 ALTER ROLE
命令里修改。
给一个当作组来使用的角色添加或删除成员的比较好的方法是使用 GRANT 和 REVOKE
The VALID UNTIL
子句只是为口令定义一个失效时限,而不是角色自身的失效时限。特别要注意的是,当以非口令为基础的认证方式登录的时候,这个失效时间将失去意义。
INHERIT
属性管理那些可赋予的权限的继承关系,也就是数据库对象的访问权限和角色成员的关系。它并不适用于 CREATE ROLE
和 ALTER ROLE
设置的特殊角色属性。比如,做为一个带有 CREATEDB
权限的角色成员,并不直接拥有创建数据库的能力,即使设置了 INHERIT
也如此;该角色还是需要通过 SET ROLE 成为该角色,然后才能创建数据库。
INHERIT
属性是缺省的,原因是为了向下兼容:在以前的 PostgreSQL 版本里,用户总是拥有他们所在组的所有权限。不过,NOINHERIT
提供了与 SQL 标准所定义的最接近的语意。
要注意 CREATEROLE
权限,因为对于 CREATEROLE
权限不存在继承的概念。拥有这个权限的角色可以很容易的创建一个与自身权限不同的非超级用户角色。例如,如果"user"角色拥有 CREATEROLE
权限而无 CREATEDB
权限,那么他可以创建带有 CREATEDB
权限的新角色。因此具有 CREATEROLE
权限的角色几乎相当于一个超级用户。
PostgreSQL 包括一个和 CREATE ROLE
有一样功能的 createuser 程序(实际上就是调用这个命令),可以从命令行 shell 上运行。
CONNECTION LIMIT
选项只是近似地强制;如果两个新的会话几乎同时启动,而只有该角色只剩下一个"连接槽",那么很可能两个连接都会失败。同样,这个限制从来不会对超级用户强制。
在这个指令中指定未加密的口令时必须小心。口令将被以明文方式传递给服务器,同时还可能在客户端的命令历史或服务端日志中被记录。而 createuser 会将命令加密后传递给服务器。同样,psql 包含一个 \password
可以用来安全的修改口令。
例子
创建一个可以登录的角色,但是不给他设置口令:
CREATE ROLE jonathan LOGIN;
创建一个带口令的角色:
CREATE USER davide WITH PASSWORD 'jw8s0F4';
(CREATE USER
和 CREATE ROLE
一样,只不过它隐含 LOGIN
)
创建一个带口令的角色,口令有效期到 2004 年底。在 2005 年跑了一秒之后,口令就不再有效。
CREATE ROLE miriam WITH LOGIN PASSWORD 'jw8s0F4' VALID UNTIL '2005-01-01';
创建一个可以创建数据库和管理角色的角色:
CREATE ROLE admin WITH CREATEDB CREATEROLE;
兼容性
CREATE ROLE
语句在 SQL 标准里存在,但是标准只要求下面的语法
CREATE ROLEname
[ WITH ADMINrolename
]
多初始化管理员,以及所有其它 CREATE ROLE
的选项,都是 PostgreSQL 扩展。
SQL 标准定义了用户和角色的概念,但是它认为这两个概念是完全独立的概念,并且要求定义用户的所有命令都针对每个数据库实现。在 PostgreSQL 里选择了把用户和角色统一成一类对象。因此角色比标准里的有更多的属性。
SQL 标准里声明的行为非常接近于给予用户 NOINHERIT
属性,而给予角色 INHERIT
属性。
又见
SET ROLE, ALTER ROLE, DROP ROLE, GRANT, REVOKE, createuser如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论