此部分包含用于管理用户和角色权限以及访问策略的函数。
权限和访问函数
- 1: ENABLED_ROLE
- 2: GET_PRIVILEGES_DESCRIPTION
- 3: HAS_ROLE
- 4: RELEASE_SYSTEM_TABLES_ACCESS
- 5: RESTRICT_SYSTEM_TABLES_ACCESS
1 - ENABLED_ROLE
检查是否启用了 Vertica 用户角色,并返回 true 或 false。当为数据库角色创建访问策略时,通常会使用此函数。
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
易变语法
ENABLED_ROLE ( 'role' )
参数
- 角色
- 要评估的角色。
特权
无
示例
请参阅:
另请参阅
CREATE ACCESS POLICY2 - GET_PRIVILEGES_DESCRIPTION
返回当前用户对对象具有的有效权限,包括显式权限、隐式权限、继承的权限以及基于用户的权限。
因为此元函数仅返回有效权限,因此 GET_PRIVILEGES_DESCRIPTION 将只返回完全满足先决条件的权限。有关常见操作的先决条件列表,请参阅常用数据库操作所需的权限。
例如,用户必须具有以下权限才能查询表:
-
架构: USAGE
-
表: SELECT
如果用户 Brooke 对表 s1.t1 具有 SELECT 权限,但缺少对架构 s1 的 USAGE 权限,则 Brooke 将无法查询该表,且 GET_PRIVILEGES_DESCRIPTION 不会返回该表的 SELECT 权限。
注意
如果在数据库级别禁用权限继承,则不会显示所继承的权限。这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
易变语法
GET_PRIVILEGES_DESCRIPTION( 'type', '[[database.]schema.]name' );
参数
-
类型 - 指定对象类型,为以下之一:
-
database -
table -
schema -
view -
sequence -
model -
library -
resource pool
-
-
[database.]schema - 指定数据库和架构,默认情况下分别为当前数据库和
public。 - name
- 目标对象的名称
特权
无
示例
在以下示例中,用户 Glenn 设置了 REPORTER 角色,并希望检查他对架构 s1 和表 s1.articles 的有效权限。
-
表
s1.articles从其架构 (s1) 继承权限。 -
REPORTER 角色具有以下权限:
-
对架构的 SELECT 权限
s1 -
对表的 INSERT WITH GRANT OPTION 权限
s1.articles
-
-
用户 Glenn 具有以下权限:
-
对架构
s1的 UPDATE 和 USAGE 权限。 -
对表
s1.articles的 DELETE 权限。
-
GET_PRIVILEGES_DESCRIPTION 返回 Glenn 对架构 s1 的以下有效权限:
=> SELECT GET_PRIVILEGES_DESCRIPTION('schema', 's1');
GET_PRIVILEGES_DESCRIPTION
--------------------------------
SELECT, UPDATE, USAGE
(1 row)
GET_PRIVILEGES_DESCRIPTION 返回 Glenn 对表 s1.articles 的以下有效权限:
=> SELECT GET_PRIVILEGES_DESCRIPTION('table', 's1.articles');
GET_PRIVILEGES_DESCRIPTION
--------------------------------
INSERT*, SELECT, UPDATE, DELETE
(1 row)
另请参阅
3 - HAS_ROLE
检查是否已将 Vertica 用户角色授予指定的用户或角色,并返回 true 或 false。
您还可以查询系统表 ROLES、GRANTS 和 USERS,以获取有关用户及其角色分配的信息。有关详细信息,请参阅查看用户角色。
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
稳定语法
HAS_ROLE( [ 'grantee' ,] 'verify‑role' );
参数
-
grantee - 仅对超级用户有效,指定要查找的用户或角色的名称。如果忽略此实参,则函数将使用当前用户名 (
CURRENT_USER)。如果指定了角色,Vertica 会检查是否向此角色授予在 verify‑role 中指定的角色。重要
如果非超级用户提供此实参,Vertica 将返回错误。 -
verify‑role - 要为 grantee 验证的角色名称。
特权
无
示例
在以下示例中,dbadmin 用户检查是否为用户 MikeL 分配了 admnistrator 角色:
=> \c
You are now connected as user "dbadmin".
=> SELECT HAS_ROLE('MikeL', 'administrator');
HAS_ROLE
----------
t
(1 row)
用户 MikeL 检查其是否具有 regional_manager 角色:
=> \c - MikeL
You are now connected as user "MikeL".
=> SELECT HAS_ROLE('regional_manager');
HAS_ROLE
----------
f
(1 row)
dbadmin 将 regional_manager 角色授予 administrator 角色。再次检查时,MikeL 会验证他现在具有 regional_manager 角色:
dbadmin=> \c
You are now connected as user "dbadmin".
dbadmin=> GRANT regional_manager to administrator;
GRANT ROLE
dbadmin=> \c - MikeL
You are now connected as user "MikeL".
dbadmin=> SELECT HAS_ROLE('regional_manager');
HAS_ROLE
----------
t
(1 row)
另请参阅
4 - RELEASE_SYSTEM_TABLES_ACCESS
启用非超级用户对所有系统表的访问权限。调用此函数后,Vertica 将忽略表 SYSTEM_TABLES 中的 IS_ACCESSIBLE_DURING_LOCKDOWN 设置。要继续对非超级用户强制执行对系统表的访问限制,请调用 RESTRICT_SYSTEM_TABLES_ACCESS。
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
易变语法
RELEASE_SYSTEM_TABLES_ACCESS()
特权
超级用户
5 - RESTRICT_SYSTEM_TABLES_ACCESS
检查系统表 SYSTEM_TABLES,以确定非超级用户可以访问哪些系统表。非超级用户对每个系统表的访问权限由布尔列 IS_ACCESSIBLE_DURING_LOCKDOWN 指定。当调用此函数时,Vertica 会检查每个系统表上的 IS_ACCESSIBLE_DURING_LOCKDOWN 设置,并相应地强制控制所有非超级用户的访问权限。
默认情况下,Vertica 强制应用 IS_ACCESSIBLE_DURING_LOCKDOWN 设置。要启用非超级用户对所有系统表的访问权限,必须显式调用 RELEASE_SYSTEM_TABLES_ACCESS。
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
易变语法
RESTRICT_SYSTEM_TABLES_ACCESS()
特权
超级用户