1 用户权限配置

从语法上看 参数配置主要有一下几种 注释: 可以通过英文记忆 权限不区分大小写
① 超级用户(SUPERUSER|NOSUPERUSER):最高用户权限,不受资源队列控制,拥有所有的权限,可以对数据库进行任何操作,一般只有DBA拥有这个权限 语句为
CREATE ROLE name SUPERUSER
② 创建数据库权限 (CREATEDB|NOCREATEDB). 语句为
CREATE ROLE name CREATEDB
③ 创建用户权限(CREATEROLE|NOCREATEROLE). 如果有这个权限,那么这个用户就可以创建其他用户
CREATE ROLE name CREATEROLE
④ 登录权限 (LOGIN|NOLOGIN): 控制是否可以登录数据库
在前面加 connection limit 5 限制连接数5
⑤ 创建外部表权限 (CREATEEXTTABLE|NOCREATEEXTTABLE): 属性配置中也可以有更细的权限控制,如只读,可写外部表权限等。
⑥ 用户继承 (INHERIT|NOINHERIT): 子用户可以拥有父用户的所有权限
⑦ 资源队列控制 (RESOURCE QUEUE)
⑧ ENCRYPTED|UNENCRYPTED: 不仅是密码控制,还可以指定密码以及失效时间
⑨ 密码 PASSWORD ‘password’ —设置角色的密码
⑩ 密码有效期 VALID UNTIL ‘timestamp’ —密码的有效期,如果password参数未设置或者null,该参数无效
⑪ RESOURCE QUEUE queue_name —角色使用的资源队列,默认使用GP数据库默认的资源队列pg_default
⑫ 连接数控制 CONNECTION LIMIT 个数 — 设置该角色的最大连接数,-1 为不限制

example:
# ALTER ROLE test1 WITH PASSWORD ‘passwd123’;
# ALTER ROLE test1 VALID UNTIL ‘infinity’;
# ALTER ROLE test1 LOGIN;
# ALTER ROLE test1 RESOURCE QUEUE adhoc;
# ALTER ROLE test1 DENY DAY ‘Sunday’;
注释: 角色属性,login ,superuser, createdb,createrole 可以被认为是特殊的权限,它们从来不会像数据库对象上的普通权限那样继承。必须明确set role 到一个特殊的角色,这个角色是拥有这些属性的角色,然后才能利用这些属性。

2 表权限

schema下单表授权的构造sql 执行语句会把权限语句生成出来
赋予模式下所有表的查询权限
select ‘grant all on ‘ || schemaname || ‘.’ || viewname || ‘ to usertest;’ from pg_views
where schemaname = ‘ods’
赋予模式下所有表的权限
select ‘grant all on table ‘ || schemaname || ‘.’ || tablename || ‘ to test;’ from pg_tables
where schemaname = ‘ods’
赋予模式下所有视图的权限
select ‘grant all on ‘ || schemaname || ‘.’ || viewname || ‘ to test;’ from pg_views
where schemaname = ‘ods’