跳转至

对象权限

一、对象权限

  1. 每个数据库对象都有一个所有者, 默认情况下所有者拥有该对象的所有权限
  2. 在数据库中所有的权限都和角色挂钩
  3. 对超级用户postgres不做权限检查,其它用户走ACL(AccessControLList)
  4. 对于数据库对象,开始只有所有者和超级用户可以做任何操作,其它走ACL。

二、对象级别的权限

  • 表级对象权限控制
  • 列级别权限控制
  • 序列权限控制
  • 类型域的权限控制(域简单来说就是自定义的带约束的数据类型
  • FDW权限控制
  • FS权限控制
  • 函数权限控制
  • \h GRANT显示所有可设置的访问权限

三、对象权限管理

1. 授权

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
-- 授权单个权限给用户
GRANT SELECT ON tab_name TO role_name;
-- 授权多个/所有权限给用户
GRANT SELECT,UPDATE,INSERT ON tab_name TO role_name;
GRANT ALL ON tab_name TO role_name;
-- 授权某模式下所有表的查询权限给用户
GRANT SELECT ON ALL TABLES IN SCHEMA schema_name TO role_name;
-- 授权列权限给用户
GRANT SELECT (col1), UPDATE(col1) ON tab_name TO role_name;
-- 授权所有权限给所有用户
GRANT ALL ON tab_name TO public;

2. 查看权限

1
2
3
\dp     [PATTERN]
\z
select grantor,grantee,privilege_type,is_grantable from information_schema.table_privileges where table_name='tbl';

3. 回收权限

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
--回收单个权限
REVOKE SELECT ON tab_name FROM role_name;
-- 回收多个/所有权限
REVOKE SELECT,UPDATE,INSERT ON tab_name FROM role_name;
REVOKE ALL ON tab_name FROM role_name;
-- 回收某模式下所有表的查询权限
REVOKE SELECT ON ALL TABLES IN SCHEMA schema_name FROM role_name;
-- 回收列权限
REVOKE SELECT (col1), UPDATE (col1) ON tab_name FROM role_name;
-- 回收所有权限
REVOKE ALL ON tab name FROM public;

4. 对象易主

1
2
3
4
-- 1.转移单个表的属主(1、超级用户:2、属主,原属主必须是被授权用户的成员)
 Alter table tablname owner to new_owner;
-- 2、转移当前数据库表的属主(超级用户操作,如果属主是postgres, 则不允许,因为其中包含数据字典表,只能用第一种方式单表修改。)
Reassign owned by old_role to new_role;