AntDB用户授权

AntDB权限说明

AntDB权限分为两部分,一部分是数据库系统权限,可以授予role或user(两者区别在于后者默认具有login权限);一部分为数据库对象的操作权限。 对超级用户不做权限检查,其它走acl。

数据库系统权限pg_roles

  • rolsuper 是否具有超级用户权限
  • rolinherit 是否可以继承其他角色的权限
  • rolcreaterole 是否可以创建更多角色
  • rolcreatedb 是否可以创建数据库
  • rolcanlogin 是否可以登录
  • rolreplication 是否可以进行流复制
  • rolconnlimit 该角色可以连接的次数,如果没有限制,为-1
  • rolpassword 口令
  • rolvaliduntil 口令失效日期(只用于口令认证);如果没有失效期,为 NULL

数据库对象的操作权限pg_class.relacl

  • r – SELECT (“读”)
  • w – UPDATE (“写”)
  • a – INSERT (“追加”)
  • d – DELETE
  • D – TRUNCATE
  • x – REFERENCES
  • t – TRIGGER
  • X – EXECUTE
  • U – USAGE
  • C – CREATE
  • c – CONNECT
  • T – TEMPORARY
  • arwdDxt – ALL PRIVILEGES (针对表,对于其他对象该权限列表会变化)

操作权限说明:

  • SELECT:该权限用来查询表或是表上的某些列,或是视图,序列。
  • INSERT:该权限允许对表或是视图进行插入数据操作,也可以使用COPY FROM进行数据的插入。
  • UPDATE:该权限允许对表或是或是表上特定的列或是视图进行更新操作。
  • DELETE:该权限允许对表或是视图进行删除数据的操作。
  • TRUNCATE:允许对表进行清空操作。
  • REFERENCES:允许给参照列和被参照列上创建外键约束。
  • TRIGGER:允许在表上创建触发器。
  • CREATE:对于数据库,允许在数据库上创建Schema;对于Schema,允许对Schema上创建数据库对象;* 对于表空间,允许把表或是索引指定到对应的表空间上。
  • CONNECT:允许用户连接到指定的数据库上。
  • TEMPORARY或是TEMP:允许在指定数据库的时候创建临时表。
  • EXECUTE:允许执行某个函数。
  • USAGE:对于程序语言来说,允许使用指定的程序语言创建函数;对于Schema来说,允许查找该Schema下的对象;对于序列来说,允许使用currval和nextval函数;对于外部封装器来说,允许使用外部封装器来创建外部服务器;对于外部服务器来说,允许创建外部表。

ALL PRIVILEGES:表示一次性给予可以授予的权限。

用例

新建只读角色

CREATE ROLE role1_select WITH

LOGIN
NOSUPERUSER
CREATEDB
CREATEROLE
INHERIT
REPLICATION
CONNECTION LIMIT 10
VALID UNTIL '2018-12-31T17:01:15+08:00' 
PASSWORD '123456'; COMMENT ON ROLE role1_select IS 'for read';

grant SELECT on table t1 to role1_select;

新建写角色

CREATE ROLE role1_insert WITH

	LOGIN
	NOSUPERUSER
	CREATEDB
	CREATEROLE
	INHERIT
	REPLICATION
	CONNECTION LIMIT 10
	VALID UNTIL '2018-12-31T17:01:15+08:00' 
	PASSWORD '123456';
COMMENT ON ROLE role1_insert IS 'for write';

grant INSERT,UPDATE,DELETE,TRUNCATE on table t1 to role1_insert;

新建用户并赋予指定角色

创建一个默认用户,只有login权限,其他权限都收回。

CREATE USER user1 WITH

	LOGIN
	NOSUPERUSER
	NOCREATEDB
	NOCREATEROLE
	INHERIT
	NOREPLICATION
	CONNECTION LIMIT -1
	PASSWORD 'xxxxxx';

赋予只读角色

grant role1_select TO user1 ;

赋予写角色

grant role1_insert TO user1 ;

可以通过函数来验证模式下的表的相应权限

select has_table_privilege('aa','select');
select has_table_privilege('aa','insert');

对sequence类型的授权

usage有currval,nextval这两个函数可用

grant usage on sequence sq1 to user1;

update有setval这个函数可用

grant update on sequence sq1 to user1;

角色权限的继承

CREATE ROLE role_father xxx;
CREATE ROLE role_son xxx;
grant role_father to role_son;

查看权限

在psql中的查看权限的快捷指令

  • \dn[S+] 列出所有模式

  • \dp 列出表,视图和序列的访问权限,同\z

  • \du[S+] 列出角色

  • \ddp 列出默认权限

database、schema、table_seq_view_etc、table_column 分4个级别来授权。