更新时间:2026-07-28 GMT+08:00
管理权限
设置或更改数据库用户或角色权限,可以使用DCL(Data Control Language,数据控制语言)语句。
背景信息
数据库对象创建后,创建该对象的用户即成为其所有者。数据库安装后,默认未开启三权分立,数据库系统管理员具有与对象所有者相同的权限。也就是说对象创建后,默认只有对象所有者或者系统管理员可以查询、修改和删除对象,以及通过GRANT将对象的权限授予其他用户。
为使其他用户能够使用对象,也可以向用户或包含该用户的角色授予必要的权限。
注意事项
不建议用户修改系统表和系统视图的权限。
管理对象权限
- 以管理员用户root登录数据库。
- 创建用户user1和用户user2。
gaussdb=# CREATE USER user1 password '********'; gaussdb=# CREATE USER user2 password '********';
- 以用户user2登录数据库。
- 创建用户表tbl,将用户user2的USAGE权限授予用户user1,将对表tbl进行SELECT的权限授予用户user1。
gaussdb=> CREATE TABLE user2.tbl(id int, name varchar(5)); CREATE TABLE gaussdb=> GRANT USAGE ON SCHEMA user2 TO user1; GRANT gaussdb=> GRANT SELECT ON TABLE user2.tbl TO user1; GRANT
- 以用户user1登录数据库。
- 用户user1查询用户表tbl成功,插入用户表tbl权限不足失败。
gaussdb=> SELECT * FROM user2.tbl; id | name ----+------ (0 rows) gaussdb=> INSERT INTO user2.tbl VALUES (1,'TOM'); ERROR: The operation permission on relation tbl is denied.
- 以用户user2登录数据库。
- 撤销用户user1对表tbl进行SELECT的权限,将对表tbl进行INSERT的权限授予用户user1。
gaussdb=> REVOKE SELECT ON TABLE user2.tbl FROM user1; REVOKE gaussdb=> GRANT INSERT ON TABLE user2.tbl TO user1; GRANT
- 以用户user1登录数据库。
- 查询用户表tbl权限不足失败,插入用户表tbl成功。
gaussdb=> SELECT * FROM user2.tbl; ERROR: The operation permission on relation tbl is denied. gaussdb=> INSERT INTO user2.tbl VALUES (1,'TOM'); INSERT 0 1
- 以管理员用户root登录数据库。
- 清理环境。
gaussdb=# DROP USER user1, user2 CASCADE; DROP ROLE
管理用户和角色
- 以管理员用户root登录数据库。
- 创建角色role1和角色role2。
gaussdb=# CREATE ROLE role1 WITH password 'xxxxxxxx'; CREATE ROLE gaussdb=# CREATE ROLE role2 WITH password 'xxxxxxxx'; CREATE ROLE
- 修改角色role1具有CREATEDB和LOGIN属性,角色role2为默认权限。
gaussdb=# ALTER ROLE role1 WITH CREATEDB; ALTER ROLE gaussdb=# ALTER ROLE role1 WITH LOGIN; ALTER ROLE
- 查看系统视图pg_roles获取角色的相关信息。
gaussdb=# SELECT oid, rolname, rolcreatedb, rolcanlogin FROM pg_roles WHERE rolname='role1' or rolname='role2'; oid | rolname | rolcreatedb | rolcanlogin -------+---------+-------------+------------- 16750 | role1 | t | t 16778 | role2 | f | f (2 rows) - 以用户role1登录数据库。
- 通过以下命令创建数据库test_db,显示CREATE DATABASE表示创建成功。
gaussdb=# CREATE DATABASE test_db; CREATE PLUGGABLE DATABASE - 将角色role1权限授予角色role2,则角色role2继承role1的相关对象权限。
gaussdb=# GRANT role1 TO role2; GRANT ROLE - 查看系统表pg_auth_members获取角色成员关系。
gaussdb=# SELECT * FROM pg_auth_members; roleid | member | grantor | admin_option --------+--------+---------+-------------- 16750 | 16778 | 16750 | f (1 row) - 以管理员用户root登录数据库。
- 关闭并删除数据库test_db,删除角色role1和role2。
gaussdb=# ALTER DATABASE test_db CLOSE; ALTER PLUGGABLE DATABASE gaussdb=# DROP DATABASE test_db; DROP PLUGGABLE DATABASE gaussdb=# DROP ROLE role1,role2; DROP ROLE
父主题: 数据库使用入门