配置数据库授权
本页目录
配置数据库授权#
本章节描述如何通过使用角色和权限在用户级别限制对数据库数据的授权访问。
访问权限和角色#
OushuDB 使用角色来管理数据库访问权限。角色的概念包含了用户和组的概念。一个角色可以是数据库用户、组,或者两者兼有。角色可以拥有数据库对象(例如表),并且可以将对这些对象的权限分配给其他角色以控制对这些对象的访问。角色可以是其他角色的成员,因此成员角色可以继承其父角色的对象权限。
每个 OushuDB 系统都包含一组数据库角色(用户和组)。这些角色与服务器运行的操作系统管理的用户和组是分开的。但是,为了方便起见,您可能希望在操作系统用户名称和 OushuDB 角色名称之间保持关系,因为许多客户端应用程序使用当前操作系统用户名称作为默认值。
在 OushuDB 中,用户登录并通过 main 实例连接,main 节点验证他们的角色和访问权限。然后,main 节点通过当前登录的角色在后台向 segment 实例下发命令。
角色在系统级别定义,因此对系统中的所有数据库都有效。
为了初始化 OushuDB,一个新初始化的系统始终包含一个预定义的超级用户角色(也称为系统用户)。此角色将与初始化 OushuDB 系统的操作系统用户具有相同的名称。通常,此角色被命名为 oushu。要创建更多角色,您首先必须连接到这个初始角色。
管理对象权限#
创建对象(表、视图、序列、数据库、函数、语言、schema 或 tablespace)时,会分配一个所有者。通常情况下,所有者是执行创建语句的角色。对于大多数类型的对象,最初只有所有者(或超级用户)可以对对象执行任何操作。要允许其他角色使用对象,必须授予权限。 OushuDB 为每种对象类型支持以下权限:
对象类型 |
权限 |
---|---|
表、视图、序列 |
SELECT INSERT UPDATE DELETE RULE ALL |
外表 |
SELECT RULE ALL |
数据库 |
CONNECT CREATE TEMPORARY或TEMP ALL |
函数 |
EXECUTE |
语言 |
USAGE |
schema |
CREATE USAGE ALL |
必须为每个对象单独授予权限。例如,在数据库上授予 ALL 权限并不会授予对该数据库中对象的完全访问权限。它只会授予所有数据库级权限(CONNECT、CREATE、TEMPORARY)。
可以使用 GRANT 命令将对象权限授予指定角色,如:
GRANT INSERT ON table_a TO user_a;
如果要收回权限,可以使用 REVOKE 命令
REVOKE ALL PRIVILEGES ON table_a FROM user_a;
限制访问时间#
OushuDB 使管理员能够通过角色限制访问时间。使用 CREATE ROLE 或 ALTER ROLE 命令配置时间约束。可以按天或按天和时间限制访问。这些约束可以直接移除,无需删除和重新创建角色。
时间约束仅适用于指定角色。即使一个角色是有时间约束的另一个角色的成员,时间约束也并不会被继承。时间约束仅在登录时进行校验。SET ROLE和SET SESSION AUTHORIZATION命令不受任何基于时间的约束影响。设置角色的时间约束需要超级用户或CREATEROLE权限。不可以为超级用户添加时间约束。
OushuDB 支持 CREATE ROLE 或者 ALTER ROLE 中使用 DENY 子句配置时间约束:
指定某一天或者是时间点,禁止角色访问。比如禁止在星期一访问。方式为 DAY 关键字后接具体某天,可选的有:Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday。
CREATE ROLE user_a DENY DAY ‘Monday’
指定某个时间段禁止该角色访问。比如周一上午 10 点到周一下午 8 点。通过 TIME 指定具体的时间点,可以是 24 小时制或者 12 小时制。通过 BETWEEN … AND … 配置时间段。
CREATE ROLE user_a DENY BETWEEN DAY ‘Monday’ TIME ‘10:00’ AND DAY ‘Monday’ TIME ‘20:00’
可以同时为一个角色配置多个时间约束,如禁止周一和周三访问。
DENY DAY ‘Tuesday’ DENY DAY ‘Wednesday’。
具体的细节可以参考手册中的 CREATE ROLE 和 ALTER ROLE 章节。
删除时间限制#
通过 ALTER ROLE xx DROP DENY FOR 方式可以删除特定的时间约束(如已有的部分约束),和指定时间有重叠的任意约束都会被删除。
DROP DENY FOR DAY ‘Tuesday’