SYSMONITOR
除了作为 DBADMIN 用户维护 Vertica 以外,组织的数据库管理员可能还有许多责任。在本例中,DBADMIN 可能希望将一些 Vertica 管理任务委托给其他 Vertica 用户。
DBADMIN 可以将任务委托给 SYSMONITOR 角色,为其授予对系统表的访问权限,而不必授予完整的 DBADMIN 访问权限。
SYSMONITOR 角色提供以下权限。
-
查看所有标记为可监控的系统表。通过发出以下语句,您可以查看所有可监控表的列表:
=> select * from system_tables where is_monitorable='t';
-
如果在将 SYSMONITOR 授予用户或角色时包含
WITH ADMIN OPTION
,则该用户或角色可以将 SYSMONITOR 权限授予其他用户和角色。
授予 SYSMONITOR 角色
若要为用户或角色授予 SYSMONITOR 角色,您必须是以下身份之一:
-
DBADMIN 用户
-
已分配有 SYSMONITOR 且具有 ADMIN OPTION 的用户
使用 GRANT(角色) SQL 语句为用户分配 SYSMONITOR 角色。以下示例将展示如何为 user1 授予 SYSMONITOR 角色,并通过使用 WITH ADMIN OPTION 参数包含管理权限。ADMIN OPTION 将为 SYSMONITOR 角色授予管理权限。
=> GRANT SYSMONITOR TO user1 WITH ADMIN OPTION
;
以下示例将展示如何为 user1 撤销 SYSMONITOR 角色的 ADMIN OPTION 权限。
=> REVOKE ADMIN OPTION for SYSMONITOR FROM user1
;
使用 CASCADE 为所有分配有 SYSMONITOR 角色的用户撤销 ADMIN OPTION 权限。
=> REVOKE ADMIN OPTION for SYSMONITOR FROM PUBLIC CASCADE
;
示例
以下示例将展示如何:
-
创建用户
-
创建角色
-
为新角色授予 SYSMONITOR 权限
-
为用户授予角色
=> CREATE USER user1; => CREATE ROLE monitor; => GRANT SYSMONITOR to monitor; => GRANT monitor to user1;
分配 SYSMONITOR 权限
以下示例将使用“授予 SYSMONITOR 角色”示例中创建的用户和角色来说明如何:
-
创建名为 personal_data 的表
-
以 user1 身份登录
-
为 user1 授予 monitor 角色。(您已在“授予 SYSMONITOR 角色”示例中为 monitor 授予了 SYSMONITOR 权限。)
-
以 user1 身份运行 SELECT 语句
操作结果取决于已授予 user1 的权限。
=> CREATE TABLE personal_data (SSN varchar (256));=> \c -user1;user1=> SET ROLE monitor;user1=> SELECT COUNT(*) FROM TABLES;COUNT ------- 1 (1 row)
由于您已分配了 SYSMONITOR 角色,因此 user1 可以看到 Tables 系统表中行的数量。在这个简单的示例中,数据库中只有一个表 (personal_data),因此 SELECT COUNT 返回一行。在实际情况中,SYSMONITOR 角色将看到数据库中的所有表。
检查 SYSMONITOR 能否访问表
使用下列命令检查分配有 SYSMONITOR 角色的用户是否可以访问系统表:
=> select table_name, is_monitorable from system_tables where table_name='<table_name>';
示例
以下示例将检查 SYSMONITOR 是否可以访问 current_session 系统表:
=> select table_name,is_monitorable from system_tables where table_name='current_session';table_name | is_monitorable -------------------------------- current_session | t
Is_monitorable 列中的 t 表示 SYSMONITOR 可以访问 current_session 系统表。