数据访问权限控制

Ranger云原生多模数据库 Lindorm管理多用户数据访问权限的安全组件。本文主要介绍基于Lindorm Ranger安全组件的功能实践,分别介绍通过Ranger服务页面和通过SQL来配置用户权限的方法,帮助您轻松地配置不同用户的访问权限,让数据访问更加高效、安全、可控。

前提条件

开通Ranger

说明

如需使用Ranger功能,请联系Lindorm技术支持(钉钉号:s0s3eg3)开通。

  1. 登录Lindorm管理控制台

  2. 在页面左上角,选择实例所属的地域。

  3. 实例列表页,单击目标实例ID或者目标实例所在行操作列的管理

  4. 在左侧导航栏,单击数据库连接

  5. 单击计算引擎页签,然后单击开通Ranger地址

操作步骤

通过Ranger服务页面配置

登录Ranger

  1. 计算引擎页签,获取Ranger地址,并单击该地址打开Ranger服务页面。

    image

  2. 使用Lindorm宽表引擎用户名密码登录Ranger服务。

使用Ranger

Ranger的访问权限策略配置是根据您对资源的访问需求来授予特定权限,用户信息将从宽表引擎中同步。以下是权限策略模型和权限策略创建方法。

Ranger Policy模型

Ranger Policy模型由两个主要部分构成:

  • 指定Policy适用的资源,例如Hive数据库、表和列。

  • Policy中特定用户、用户组或角色的访问权限。

下图为查询数据时,Policy的检查方法:

image
重要

root用户作为系统管理员账户,拥有系统最高权限,不受上述流程约束。

创建权限策略

  1. 单击主界面的ldps_service,进入权限列表页面。

    image

  2. 初始状态下,Ranger存在一些默认的访问权限列表,可以先忽略,单击Add New Policy,进入创建权限页面。

    重要
    • Ranger存在一个默认的用户组public,代表所有用户。

    • 初始状态下,存在默认的权限策略列表,定义了部分初始权限,如:public用户组具有创建数据库和在default数据库下创建表格的权限。您可以选择删除这些默认策略或将其设置为禁用(Disabled)状态,以确保仅让新创建的权限策略生效。

  3. 创建权限策略页面共包含四部分内容,分别是权限策略信息、涉及的资源、允许权限,和拒绝权限。配置详情如下:

    • 权限策略信息(Policy Details):添加策略名、标签,和描述等。此外,还可以设置策略是否生效,是否覆盖其他权限策略,以及该策略的有效时间期限。

      image

    • 涉及的资源(Resources):添加需要分配权限的资源,如数据库、表、列等。如果需要添加涉及多个数据库的权限控制策略,可以单击+Add Resource添加更多资源。

      image

    • 允许权限(Allow Conditions):

      ①:设置赋予特定用户、用户组或角色针对上述资源的权限。

      操作方式:在Select RolesSelect GroupsSelect User输入框 的下拉列表中,选择指定角色、用户组或用户,然后单击Add Permissions勾选需要赋予的权限。

      ②:设置需要被排除在外的允许权限(Exclude from Allow Conditions)。例如:您有个用户组sales_group,包含user1user2,并且您已经设置了sales_group具有products数据库的所有权限,但是出于安全的考虑,您认为user2不应该具有删除products数据库的权限,此时您可以在Exclude from Allow ConditionsSelect User中选取user2,然后单击Add Permissions勾选Dropimage

      重要

      Ranger的权限策略管理是以资源(数据库、表、列等)为单位的,如果新添加的策略设置的资源和已有策略存在重复,会提示错误。此时,您可以直接编辑导致重复的策略,并在允许的用户权限部分单击image,添加新用户及其权限。

    • 拒绝权限(Deny Conditions):

      说明

      若您设置Deny All Other AccessesTrue,表示拒绝所有权限。

      ①:设置拒绝赋予特定用户、用户组或角色的权限。

      操作方式:在Select RolesSelect GroupsSelect User输入框 的下拉列表中,选择指定角色、用户组或用户,然后单击Add Permissions勾选需要拒绝的权限。

      ②:设置需要被排除在外的拒绝权限(Exclude from Deny Conditions)。您可以在此处设置需要豁免的用户、用户组或角色。例如:您已经设置了拒绝sales_group用户组访问customer表的所有权限,但希望保留该组中user1查询customer表的权限。此时,您可以在Select User中选取user1,然后单击Add Permissions勾选Select。同时,您需要在某个PolicyAllow Conditions中赋予user1customer表的Select权限,user1才可以查customer表。image

  4. 单击页面底部的Save,完成新策略的创建。提示保存完成后,新策略就会生效。

通过SQL配置

计算引擎的DCL是通过控制Ranger中的权限策略来实现的。您也可以通过beeline连接计算引擎后,使用SQL完成权限操作。

GRANT

授予全局、库、表、列粒度的权限。权限(ALL、READ、WRITETRASH)的含义和Lindorm SQL保持一致,具体信息请参见GRANT

语法

grant_permission_statement ::=  GRANT privilege_definition ON resource_definition TO user_identifier 
privilege_definition       ::=  ALL | READ | WRITE | ADMIN | TRASH
resource_definition        ::=  GLOBAL | DATABASE db_identifier | SCHEMA db_identifier | TABLE db_identifier.table_identifier | TABLE db_identifier.table_identifier '('col_identifier (, col_identifier)*')'
说明
  • root用户可以执行GRANT命令。

  • 计算引擎中的admin权限和GRANT中的略有不同,并不会赋予相关用户admin的地位,而是授予其创建库或者表的权限。

  • 列粒度的权限只支持READ、WRITEALL。

示例

  • 为用户user1授予全局读权限。

    GRANT READ ON GLOBAL TO user1;
  • 为用户user2授予数据库db1的全部权限。

    GRANT ALL ON DATABASE db1 TO user2;
    -- 或者
    GRANT ALL ON SCHEMA db1 TO user2;
  • 为用户user3授予数据库db2中的表table1的写权限。

    GRANT WRITE ON TABLE db2.table1 TO user3;
  • 为用户user4授予数据库db2中的表table2的列col1col2的读权限。

    GRANT READ ON TABLE db2.table2(col1, col2) TO user4;

REVOKE

撤回对全局、库、表、列的权限。

语法

revoke_permission_statement ::=  REVOKE privilege_definition ON resource_definition FROM user_identifier 
privilege_definition       ::=  ALL | READ | WRITE | ADMIN | TRASH
resource_definition        ::=  GLOBAL | DATABASE db_identifier | SCHEMA db_identifier | TABLE db_identifier.table_identifier | TABLE db_identifier.table_identifier '('col_identifier (, col_identifier)*')'
说明

root用户可以执行REVOKE命令。

示例

  • 撤回user1的全局读权限。

    REVOKE READ ON GLOBAL FROM user1;
  • 撤回用户user2对数据库db1的全部权限。

    REVOKE ALL ON DATABASE db1 FROM user2;
    -- 或者
    REVOKE ALL ON SCHEMA db1 FROM user2;
  • 撤回用户user3对数据库db2中的表table1的写权限。

    REVOKE WRITE ON TABLE db2.table1 FROM user3;
  • 撤回用户 user4 对数据库 db2 中的表 table2 的列 col1 的读权限。

    REVOKE READ ON TABLE db2.table2(col1) FROM user4;

SHOW PRIVILEGES

输出当前用户的所有权限。

语法

show_privileges_statement ::=  SHOW PRIVILEGES
说明

root用户可以执行SHOW PRIVILEGES命令。

示例

展示所有用户的权限。

SHOW PRIVILEGES;

SHOW USERS

输出所有用户名。

语法

show_users_statement ::=  SHOW USERS

示例

SHOW USERS;