这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

预定义的数据库角色

Vertica 具有以下预定义角色:

自动授予角色

安装时,Vertica 会自动按如下方式授予和启用预定义角色:

  • 将 DBADMIN、PSEUDOSUPERUSER 和 DBDUSER 角色不可撤销地授予 dbadmin 用户。这些角色始终会针对 dbadmin 启用,并且永远无法删除。

  • 在创建时将 PUBLIC 授予 dbadmin 以及所有其他用户。此角色始终处于启用状态,并且无法删除或撤销。

授予预定义角色

安装后,dbadmin 用户和具有 PSEUDOSUPERUSER 角色的用户可以将一个或多个预定义角色授予任何用户或非预定义角色。例如,以下一组语句创建 userdba 角色并向它授予预定义角色 DBADMIN:

=> CREATE ROLE userdba;
CREATE ROLE
=> GRANT DBADMIN TO userdba WITH ADMIN OPTION;
GRANT ROLE

如果原始 授权(角色) 语句包含 WITH ADMIN OPTION,则被授予预定义角色的用户和角色可以将该角色授予其他用户。有一个例外:如果您向某个用户授予 PSEUDOSUPERUSER 角色并省略 WITH ADMIN OPTION,则被授予者可以将任何角色(包括所有预定义角色)授予其他用户。

例如,userdba 角色以前被授予 DBADMIN 角色。因为 GRANT 语句包含 WITH ADMIN OPTION,所以被分配 userdba 角色的用户可以将 DBADMIN 角色授予其他用户:

=> GRANT userdba TO fred;
GRANT ROLE
=> \c - fred
You are now connected as user "fred".
=> SET ROLE userdba;
SET
=> GRANT dbadmin TO alice;
GRANT ROLE

修改预定义角色

您可以向除 SYSMONITOR 以外的预定义角色授予对单个数据库对象(例如表或架构)的权限。例如:

=> CREATE SCHEMA s1;
CREATE SCHEMA
=> GRANT ALL ON SCHEMA s1 to PUBLIC;
GRANT PRIVILEGE

您可以向 PUBLIC 授予任何角色,包括预定义角色。例如:


=> CREATE ROLE r1;
CREATE ROLE
=> GRANT r1 TO PUBLIC;
GRANT ROLE

对于任何其他预定义角色,不能通过向其授予其他角色来修改它。尝试这样做会导致回退错误:

=> CREATE ROLE r2;
CREATE ROLE
=> GRANT r2 TO PSEUDOSUPERUSER;
ROLLBACK 2347:  Cannot alter predefined role "pseudosuperuser"

1 - DBADMIN

DBADMIN 角色是在安装数据库时分配给 dbadmin 用户的预定义角色。安装后,dbadmin 用户和具有 PSEUDOSUPERUSER 角色的用户可以将任何角色授予任何用户或非预定义角色。

例如,超级用户 dbadmin 创建角色 fred 并向 fred 授予 DBADMIN 角色:

=> CREATE USER fred;
CREATE USER
=> GRANT DBADMIN TO fred WITH ADMIN OPTION;
GRANT ROLE

在用户 fred 启用DBADMIN role 后,他可以通过创建用户 alice 来行使他的 DBADMIN 权限。因为 GRANT 语句包含 WITH ADMIN OPTION,所以 fred 也可以将 DBADMIN 角色授予用户 alice


=> \c - fred
You are now connected as user "fred".
=> SET ROLE dbadmin;
SET
CREATE USER alice;
CREATE USER
=> GRANT DBADMIN TO alice;
GRANT ROLE

DBADMIN 权限

下表列出了 DBADMIN 角色支持的权限:

  • 创建用户和角色,并向他们授予角色和权限

  • 创建和删除架构

  • 查看所有系统表

  • 查看和终止用户会话

  • 访问任意用户创建的所有数据

2 - PSEUDOSUPERUSER

PSEUDOSUPERUSER 角色是在安装数据库时自动分配给 dbadmin 用户的预定义角色。dbadmin 可以将此角色授予任何用户角色或非预定义角色。此后,PSEUDOSUPERUSER 用户可以将任何角色(包括预定义角色)授予其他用户。

PSEUDOSUPERUSER 权限

具有 PSEUDOSUPERUSER 角色的用户有权履行管理权限(无法撤销)。角色权限包括:

  • 绕过所有 GRANT/REVOKE 身份验证

  • 创建架构和表

  • 创建用户和角色,并向他们授予权限

  • 修改用户帐户,例如,设置用户帐户的密码、锁定/解锁帐户。

  • 创建或删除 UDF 库和函数,或任何外部过程

3 - DBDUSER

DBDUSER 角色是在安装数据库时分配给 dbadmin 用户的预定义角色。dbadmin 和任何 PSEUDOSUPERUSER 可以将此角色授予任何用户或非预定义角色。拥有此角色并启用它的用户可以从命令行调用 Database Designer 函数

将 DBDUSER 与资源池相关联

确保将资源池与 DBDUSER 角色相关联,以方便在运行 Database Designer 时进行资源管理。多个用户可以同时运行 Database Designer,他们互相之间不会出现干扰,也不会用尽群集的所有资源。当您以编程方式或使用管理工具运行 Database Designer 时,设计执行操作通常会限制在该用户的资源池内,但不太密集的任务可能会溢出到系统资源池。

4 - 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 系统表。

5 - UDXDEVELOPER

UDXDEVELOPER 角色是允许用户创建和替换用户所定义库的预定义角色。dbadmin 可以将此角色授予任何用户角色或非预定义角色。

UDXDEVELOPER 权限

具有 UDXDEVELOPER 角色的用户可以执行以下操作:

要使用此角色的权限,您必须使用 SET ROLE 显式启用它。

安全注意事项

具有 UDXDEVELOPER 角色的用户可以创建库,因此可以在数据库中安装任何 UDx 函数。UDx 函数以拥有数据库的 Linux 用户身份运行,因此可以访问 Vertica 有权访问的资源。

写得不好的函数会降低数据库性能。请仅将此角色授予您相信会负责任地使用 UDx 的用户。您可以通过在隔离模式下运行 UDx 并设置 FencedUDxMemoryLimitMB 配置参数来限制 UDx 可以使用的内存。

6 - PUBLIC

PUBLIC 角色是自动分配给所有新用户的预定义角色。它始终处于启用状态,并且无法删除或撤销。使用此角色授予所有数据库用户相同的最低权限集。

与所有其他角色一样,可以授予 PUBLIC 角色对单个对象和其他角色的权限。以下示例授予 PUBLIC 角色对表 publicdata 的 INSERT 和 SELECT 权限。这使所有用户都可以读取该表中的数据并插入新数据:

=> CREATE TABLE publicdata (a INT, b VARCHAR);
CREATE TABLE
=> GRANT INSERT, SELECT ON publicdata TO PUBLIC;
GRANT PRIVILEGE
=> CREATE PROJECTION publicdataproj AS (SELECT * FROM publicdata);
CREATE PROJECTION
=> \c - bob
You are now connected as user "bob".
=> INSERT INTO publicdata VALUES (10, 'Hello World');
OUTPUT
--------
      1
(1 row)

以下示例向 PUBLIC 授予 employee 角色,以便所有数据库用户都具有 employee 权限:

=> GRANT employee TO public;
GRANT ROLE