Ranger是云原生多模数据库 Lindorm管理多用户数据访问权限的安全组件。本文主要介绍基于Lindorm Ranger安全组件的功能实践,分别介绍通过Ranger服务页面和通过SQL来配置用户权限的方法,帮助您轻松地配置不同用户的访问权限,让数据访问更加高效、安全、可控。
前提条件
开通Ranger
如需使用Ranger功能,请联系Lindorm技术支持(钉钉号:s0s3eg3)开通。
登录Lindorm管理控制台。
在页面左上角,选择实例所属的地域。
在实例列表页,单击目标实例ID或者目标实例所在行操作列的管理。
在左侧导航栏,单击数据库连接。
单击计算引擎页签,然后单击开通Ranger地址。
操作步骤
通过Ranger服务页面配置
登录Ranger
使用Ranger
Ranger的访问权限策略配置是根据您对资源的访问需求来授予特定权限,用户信息将从宽表引擎中同步。以下是权限策略模型和权限策略创建方法。
Ranger Policy模型
Ranger Policy模型由两个主要部分构成:
指定Policy适用的资源,例如Hive数据库、表和列。
Policy中特定用户、用户组或角色的访问权限。
下图为查询数据时,Policy的检查方法:
root用户作为系统管理员账户,拥有系统最高权限,不受上述流程约束。
创建权限策略
单击主界面的ldps_service,进入权限列表页面。
初始状态下,Ranger存在一些默认的访问权限列表,可以先忽略,单击Add New Policy,进入创建权限页面。
重要Ranger存在一个默认的用户组
public
,代表所有用户。初始状态下,存在默认的权限策略列表,定义了部分初始权限,如:
public
用户组具有创建数据库和在default数据库下创建表格的权限。您可以选择删除这些默认策略或将其设置为禁用(Disabled)状态,以确保仅让新创建的权限策略生效。
创建权限策略页面共包含四部分内容,分别是权限策略信息、涉及的资源、允许权限,和拒绝权限。配置详情如下:
权限策略信息(Policy Details):添加策略名、标签,和描述等。此外,还可以设置策略是否生效,是否覆盖其他权限策略,以及该策略的有效时间期限。
涉及的资源(Resources):添加需要分配权限的资源,如数据库、表、列等。如果需要添加涉及多个数据库的权限控制策略,可以单击+Add Resource添加更多资源。
允许权限(Allow Conditions):
①:设置赋予特定用户、用户组或角色针对上述资源的权限。
操作方式:在Select Roles、Select Groups、Select User输入框 的下拉列表中,选择指定角色、用户组或用户,然后单击Add Permissions勾选需要赋予的权限。
②:设置需要被排除在外的允许权限(Exclude from Allow Conditions)。例如:您有个用户组
sales_group
,包含user1和user2,并且您已经设置了sales_group
具有products
数据库的所有权限,但是出于安全的考虑,您认为user2不应该具有删除products
数据库的权限,此时您可以在Exclude from Allow Conditions的Select User中选取user2,然后单击Add Permissions勾选Drop。重要Ranger的权限策略管理是以资源(数据库、表、列等)为单位的,如果新添加的策略设置的资源和已有策略存在重复,会提示错误。此时,您可以直接编辑导致重复的策略,并在允许的用户权限部分单击
,添加新用户及其权限。
拒绝权限(Deny Conditions):
说明若您设置Deny All Other Accesses为True,表示拒绝所有权限。
①:设置拒绝赋予特定用户、用户组或角色的权限。
操作方式:在Select Roles、Select Groups、Select User输入框 的下拉列表中,选择指定角色、用户组或用户,然后单击Add Permissions勾选需要拒绝的权限。
②:设置需要被排除在外的拒绝权限(Exclude from Deny Conditions)。您可以在此处设置需要豁免的用户、用户组或角色。例如:您已经设置了拒绝
sales_group
用户组访问customer
表的所有权限,但希望保留该组中user1查询customer
表的权限。此时,您可以在Select User中选取user1,然后单击Add Permissions勾选Select。同时,您需要在某个Policy的Allow Conditions中赋予user1对customer
表的Select权限,user1才可以查customer表。
单击页面底部的Save,完成新策略的创建。提示保存完成后,新策略就会生效。
通过SQL配置
计算引擎的DCL是通过控制Ranger中的权限策略来实现的。您也可以通过beeline连接计算引擎后,使用SQL完成权限操作。
GRANT
授予全局、库、表、列粒度的权限。权限(ALL、READ、WRITE和TRASH)的含义和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、WRITE和ALL。
示例
为用户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的列col1和col2的读权限。
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;