如何为Vertica用户提供对某些指定系统表的只读访问权限?

时间:2012-02-29 16:28:00

标签: vertica

我们希望在我们的Vertica数据库中设置一个可以查看某些系统表(投影,projection_storage和视图)的用户,但是我们不希望这个用户成为dbadmin,因为我们不想要他们对这些表有写权限。我已经尝试使用GRANT语句给普通用户访问这些表,但这似乎不起作用。每个用户只能在这些表中看到自己的记录。有没有办法像我描述的那样设置用户,或者我们是否需要让这个用户成为dbadmin?

我们的用例是,我们需要一个用户,该用户可以获取我们数据库中存在的模式列表,并遍历每个模式,收集信息以存储在一个中心位置。如果我们的用户被授予对各个模式的使用,那么他们可以获得这些模式的列表,但是他们无法访问projection_storage和views表中的必要记录。

谢谢!

5 个答案:

答案 0 :(得分:3)

向用户或角色授予模式USAGE是不够的,用户无法在projection_storage表中查看其投影。如果用户或角色对表具有SELECT访问权限,则可以在projection_storage中查看这些表的预测。我在Vertica 7.1中,通过仅授予角色SELECT权限而不是授予个人用户ID,我能够查看投影记录。

如果用户不需要访问表但需要列出模式中的表以用于某些报告目的,则一个选项是定期将projection_storage的内容转储到不同的表并授予适当的权限。这个表给用户。

答案 1 :(得分:2)

为了维护起见,您应该创建数据库角色!!然后为您的用户提供对这些角色的访问权限。另外,维护对你来说太棒了!!

答案 2 :(得分:1)

通常,我只是在模式上为用户提供USAGE。然后“GRANT SELECT on to;”

他们对这些表有INSERT权限吗?

答案 3 :(得分:1)

授予对表中角色的select访问权限,不授予对projection_storage等元数据表的完全访问权限。这似乎是一个错误。为了获得完整的访问权限,需要为个人用户ID授予选择权。

答案 4 :(得分:0)

您可以按照以下步骤创建具有架构选择权限的用户。 我将通过一个例子来说明这一点,在我的测试数据库中,我有一个架构' sid'用表' student_table'。

1) Login as a admin on your database .
    [dbadmin@localhost bin]$  vsql -u
    User name: dbadmin
    Password: 

2) Create the user with a password 

    dbadmin=> create user test identified by 'R';
    CREATE USER


3) Give the newly created user a Grant for the usage on the database.
    dbadmin=> Grant ALL on database vertica to test;
    GRANT PRIVILEGE

4) You can then grant the user the Usage to the schema 
    dbadmin=> Grant Usage on Schema sid to test;
    GRANT PRIVILEGE

5) Finally provide the select grant to the user on the table .
    dbadmin=> Grant select on sid.student_table to test ;
    GRANT PRIVILEGE
    dbadmin=> \q
6) Login with the new user 'test' , You will be able to access both projection storage and 
    your table sid.student_table

    [dbadmin@localhost bin]$ vsql -u
    vsql: Warning: The -u option is deprecated. Use -U.
    User name: test
    Password: 
    Welcome to vsql, the Vertica Analytic Database interactive terminal.

    test=> select * From sid.student_table;
     Student_ID | Last_name | First_Name | Class_Code |      Grade_pt      
    ------------+-----------+------------+------------+--------------------
           9999 | T_        | S%         | PG         | 98.700000000000000
    (1 row)

    test=> select * From projection_storage;
    -[ RECORD 1 ]-----------+-----------------------------------------
    node_name               | v_vertica_node0001
    projection_id           | 45035996273836526
    projection_name         | Student_Table_DBD_1_rep_tet1_v1_node0001
    projection_schema       | sid
    projection_column_count | 6
    row_count               | 9
    used_bytes              | 375
    wos_row_count           | 0
    wos_used_bytes          | 0
    ros_row_count           | 9
    ros_used_bytes          | 375
    ros_count               | 1
    anchor_table_name       | Student_Table
    anchor_table_schema     | sid
    anchor_table_id         | 45035996273756612