可以使用CREATE ROLE语句或createuser来创建角色。createuser是对CREATE ROLE命令的封装,需要在shell界面执行,而不是在数据库界面。
CREATE ROLE rolename [ [ WITH ] option [ ... ] ];
createuser rolename
其中:
要使用这条命令,必须拥有 CREATEROLE 权限或者是数据库超级用户。
创建一个可以登录的角色roletest1。
postgres=# CREATE ROLE roletest1 LOGIN;
CREATE ROLE
postgres=#
创建一个密码为123456的角色roletest2。
postgres=# CREATE ROLE roletest2 WITH LOGIN PASSWORD '123456';
CREATE ROLE
postgres=#
创建角色名为roletest3的角色。。
[postgres@superman-21 ~]$ createuser roletest3
[postgres@superman-21 ~]$
可以使用SELECT语句或psql的元命令\du查看角色。
SELECT rolename FROM pg_roles;
\du
其中:rolename:角色名。
查看所有角色名。
postgres=# SELECT rolname from pg_roles;
rolname
---------------------------
pg_monitor
pg_read_all_settings
pg_read_all_stats
pg_stat_scan_tables
pg_read_server_files
pg_write_server_files
pg_execute_server_program
pg_signal_backend
postgres
roletest1
roletest2
roletest3
(12 行记录)
postgres=#
查看现有角色。
postgres=# \du
角色列表
角色名称 | 属性 | 成员属于
-----------+--------------------------------------------+----------
postgres | 超级用户, 建立角色, 建立 DB, 复制, 绕过RLS | {}
roletest1 | | {}
roletest2 | | {}
roletest3 | | {}
postgres=#
可以使用ALTER ROLE语句修改一个已经存在的角色名。
ALTER ROLE oldrolername RENAME TO newrolename;
其中:
将角色名roletest1修改为roletest4。
postgres=# ALTER ROLE roletest1 RENAME TO roletest4;
ALTER ROLE
postgres=#
可以使用ALTER ROLE语句修改一个角色的登录密码。
ALTER ROLE rolename PASSWORD 'password'
其中:
将roletest2的密码修改为456789。
postgres=# ALTER ROLE roletest2 WITH PASSWORD '456789';
ALTER ROLE
postgres=#
可以使用DROP ROLE语句或dropuser来删除角色。dropuser是对DROP ROLE命令的封装,需要在shell界面执行,而不是在数据库界面。
DROP ROLE rolename;
dropuser rolename
其中:rolename:角色名。
删除roletest2角色。
postgres=# DROP ROLE roletest2;
DROP ROLE
postgres=#
删除roletest3角色。。
[postgres@superman-21 ~]$ dropuser roletest3
[postgres@superman-21 ~]$
可以使用GRANT语句来对角色授权。
对角色授予表的操作权限:
GRANT { { SELECT | INSERT | UPDATE | DELETE | REFERENCES | TRIGGER } [,...] | ALL [ PRIVILEGES ] } ON [ TABLE ] tablename [, ...] TO { rolename | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ]
对角色授予序列的操作权限:
GRANT { { USAGE | SELECT | UPDATE } [,...] | ALL [ PRIVILEGES ] } ON SEQUENCE sequencename [, ...] TO { rolename | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ]
对角色授予数据库的操作权限:
GRANT { { CREATE | CONNECT | TEMPORARY | TEMP } [,...] | ALL [ PRIVILEGES ] } ON DATABASE databasename [, ...] TO { rolename | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ]
对角色授予函数的操作权限:
GRANT { EXECUTE | ALL [ PRIVILEGES ] } ON FUNCTION funcname ( [ [ argmode ] [ argname ] argtype [, ...] ] ) [, ...] TO { rolename | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ]
对角色授予过程语言的操作权限:
GRANT { USAGE | ALL [ PRIVILEGES ] } ON LANGUAGE langname [, ...] TO { rolename | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ]
对角色授予模式的操作权限:
GRANT { { CREATE | USAGE } [,...] | ALL [ PRIVILEGES ] } ON SCHEMA schemaname [, ...] TO { rolename | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ]
对角色授予表空间的操作权限:
GRANT { CREATE | ALL [ PRIVILEGES ] } ON TABLESPACE tablespacename [, ...] TO { rolename | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ]
将角色rolename1的成员关系赋予角色rolename2:
GRANT rolename1 [, ...] TO rolename2 [, ...] [ WITH ADMIN OPTION ]
其中:
对roletest4授予数据库database1的CREATE权限。
postgres=# GRANT CREATE ON DATABASE postgres TO roletest4;
GRANT
postgres=#
对所有用户授予表t1的所有权限。
postgres=# GRANT ALL PRIVILEGES ON TABLE t1 TO PUBLIC;
GRANT
postgres=#
可以使用REVOKE语句来撤销以前赋予一个或多个角色的权限。
撤销角色对表的操作权限:
REVOKE [ GRANT OPTION FOR ] { { SELECT | INSERT | UPDATE | DELETE | REFERENCES | TRIGGER } [,...] | ALL [ PRIVILEGES ] } ON [ TABLE ] tablename [, ...] FROM { rolename | GROUP groupname | PUBLIC } [, ...]
撤销角色对序列的操作权限:
REVOKE [ GRANT OPTION FOR ] { { USAGE | SELECT | UPDATE } [,...] | ALL [ PRIVILEGES ] } ON SEQUENCE sequencename [, ...] FROM { rolename | GROUP groupname | PUBLIC } [, ...] [ CASCADE | RESTRICT ]
撤销角色对数据库的操作权限:
REVOKE [ GRANT OPTION FOR ] { { CREATE | CONNECT | TEMPORARY | TEMP } [,...] | ALL [ PRIVILEGES ] } ON DATABASE databasename [, ...] FROM { rolename | GROUP groupname | PUBLIC } [, ...] [ CASCADE | RESTRICT ]
撤销角色对函数的操作权限:
REVOKE [ GRANT OPTION FOR ] { EXECUTE | ALL [ PRIVILEGES ] } ON FUNCTION funcname ( [ [ argmode ] [ argname ] argtype [, ...] ] ) [, ...] FROM { rolename | GROUP groupname | PUBLIC } [, ...] [ CASCADE | RESTRICT ]
撤销角色对过程语言的操作权限:
REVOKE [ GRANT OPTION FOR ] { USAGE | ALL [ PRIVILEGES ] } ON LANGUAGE langname [, ...] FROM { rolename | GROUP groupname | PUBLIC } [, ...] [ CASCADE | RESTRICT ]
撤销角色对模式的操作权限:
REVOKE [ GRANT OPTION FOR ] { { CREATE | USAGE } [,...] | ALL [ PRIVILEGES ] } ON SCHEMA schemaname [, ...] FROM { rolename | GROUP groupname | PUBLIC } [, ...] [ CASCADE | RESTRICT ]
撤销角色对表空间的操作权限:
REVOKE [ GRANT OPTION FOR ] { CREATE | ALL [ PRIVILEGES ] } ON TABLESPACE tablespacename [, ...] FROM { rolename | GROUP groupname | PUBLIC } [, ...] [ CASCADE | RESTRICT ]
删除rolename2的rolename1的成员关系:
REVOKE [ ADMIN OPTION FOR ] rolename1 [, ...] FROM rolename2 [, ...] [ CASCADE | RESTRICT ]
其中:
对roletest4授予数据库postgres的CREATE权限。
postgres=# GRANT CREATE ON DATABASE postgres TO roletest4;
GRANT
postgres=#
对所有用户授予表pg_proc的所有权限。
postgres=# GRANT ALL PRIVILEGES ON TABLE pg_proc TO PUBLIC;
GRANT
postgres=#
点赞,你的认可是我创作的动力!
⭐️ 收藏,你的青睐是我努力的方向!
✏️ 评论,你的意见是我进步的财富!