Hive权限介绍

本文详细介绍了如何在Hive中开启权限管理,并通过配置实现表创建者对所创建表的权限设置。同时,文章阐述了如何使用角色进行权限控制,通过角色的分配和回收来间接管理用户权限,适用于多用户环境的大型系统。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、开启权限 

目前hive支持简单的权限管理,默认情况下是不开启,这样所有的用户都具有相同的权限,同时也是超级管理员,也就对hive中的所有表都有查看和改动的权利,这样是不符合一般数据仓库的安全原则的。Hive可以是基于元数据的权限管理,也可以基于文件存储级别的权限管理,此次以介绍MetaData权限管理为主。通过以下配置开启Hive身份认证功能进行权限检查:    

<property>

  <name>hive.security.authorization.enabled</name>

  <value>true</value>

  <description>enable or disable the hive client authorization</description>

</property>

开启身份认证后,任何用户必须被grant privilege才能对实体进行操作。

有一个表创建者对所创建表的权限配置:

<property>

  <name>hive.security.authorization.createtable.owner.grants</name>

  <value>ALL</value>

  <description>the privileges automatically granted to the owner whenever a table gets created.

   An example like "select,drop" will grant select and drop privilege to the owner of the table</description>

</property>

默认配置是NULL,设置成ALL,表示创建者对其创建的表拥有所有的权限,这样也是比较合理的,同时也可以通过配置在表创建时给某个role赋予权限:

<property>

  <name>hive.security.authorization.createtable.role.grants</name>

  <value>admin_role:ALL</value>

</property>

当然也可以在创建时对user,group赋予权限

二、权限操作

在hive命令行下可以通过set system:user.name;查看当前hive用户名,也即OS的登录用户。

开启权限认证,在命令行下创建表:

hive>CREATE TABLE auth_test (key int, value string); 

Authorization failed:No privilege 'Create' found for outputs { database:default}.Use show grant to get more details.  

此时会创建失败,默认情况下用户是没有创建表权限的,执行

hive>Grant create on database defaut to user test

后重新创建表则会成功,可以通过 desc extended auth_test查看包括表所有者在内的表详细信息

默认情况下其他的用户也是是没有权限读取auth_test中任何列,以另外一个用户登录os在hive下执行:

hive>Select key from auth_test;

出现以下错误:

Authorization failed:No privilege 'Select' found for inputs { database:default, table:auth_test, columnName:key}. Use show grant to get more details.

执行:

grant select(key) on table auth_test to user test1;

后查询则可以成功

Grant/revoke语法:

grant/revoke priv_type[column_list] on object_type object to/from principal_type principal_name

查看grant 定义:

show grant user user_name on table table_name;

三、Role:

此外Hive还支持基于role的授权认证,role是一组权限的集合,一个role可以被grant给多个用户,所有拥有role的用户都具有与此role相匹配的权限,通过对role权限的管理可以间接控制用户的权限,因此在一个多用户的大型系统中,role无疑更方便于权限管理。

创建/删除角色:

Create/drop Role role_name

角色分配/回收:

Grant role role_name to user user_name

Revoke role role_name from user user_name

角色授权:

Grant/revoke priv_type[col_List] on object_type object from/to role role_name

查看role定义:

show role grant role role_name

四、权限MetaData:

登录hive元数据库,可以发现以下表:

Db_privs:记录了User/Role在DB上的权限

Tbl_privs:记录了User/Role在table上的权限

Tbl_col_privs:记录了User/Role在table column上的权限

Roles:记录了所有创建的role

Role_map:记录了User与Role的对应关系

 


<think>首先,用户的问题是关于Hive权限管理的设置教程。他们想知道如何在Hive中设置和管理权限。我需要根据提供的系统级指令和用户可见层的要求来构建回答。系统级指令的关键点:-所有行内数学表达式使用$...$格式。-独立公式使用$$...$$格式。-LaTeX语法正确。-使用中文回答。-生成相关问题。-回答中引用的段落末尾自然地添加引用标识,例如[^1]。用户可见层的要求:-回答结构清晰,帮助用户逐步解决问题。-尽量保证回答真实可靠。-参考站内引用:引用[1]到[4]是关于Hive权限管理的。站内引用内容:-引用[1]:介绍Hive权限管理的必要性,默认不开启。-引用[2]:如何通过修改配置文件开启权限管理。-引用[3]:涉及角色创建、权限测试等。-引用[4]:讨论不同的授权模式,如基于存储的授权、基于SQL标准的授权和默认授权。用户上一次的问题可能是关于Hive权限管理的设置,所以我需要基于这些引用构建一个教程。回答结构:1.**引言**:简要介绍Hive权限管理的重要性。2.**步骤**:逐步指导如何设置权限管理。-开启权限管理。-配置相关参数。-创建角色和用户。-授予权限。-测试权限。3.**授权模式**:解释不同的授权模式。4.**注意事项**:提醒常见问题。5.**相关问题**:生成相关问题。确保使用中文回答。在回答中,引用段落末尾添加引用标识,如[^1]。参考引用内容时,自然地融入。例如:-在讨论开启权限时,引用引用[2]。-在讨论授权模式时,引用引用[4]。生成相关问题:-在结尾部分,添加“相关问题”部分。LaTeX使用:-用户问题中没有数学表达式,所以可能不需要LaTeX。但指令说“所有行内数学表达式必须使用”,所以如果有数学内容,就使用。Hive权限管理可能不涉及数学,所以可能不需要。如果有,比如涉及数字或公式,就应用。最终回答:-以清晰、分步方式组织。-结束时添加相关问题。</think>### Hive权限管理设置教程 Hive权限管理是确保数据仓库安全的关键功能。默认情况下,Hive不开启权限控制,所有用户都具有超级管理员权限,这可能导致数据泄露或误操作风险[^1]。本教程将逐步指导你如何设置和管理Hive权限,基于SQL标准的授权模式(推荐方式),确保操作真实可靠。以下是详细步骤: #### 1. **开启Hive权限管理** 首先,修改Hive配置文件以启用授权功能。编辑 `hive-site.xml` 文件,添加以下参数: - 设置 `hive.security.authorization.enabled` 为 `true`,启用权限控制[^2]。 - 可选配置:设置 `hive.security.authorization.createtable.owner.grants` 参数,定义表创建者的默认权限(例如 `ALL` 表示所有权限)[^2]。 ```xml <property> <name>hive.security.authorization.enabled</name> <value>true</value> <description>enable or disable the hive client authorization</description> </property> <property> <name>hive.security.authorization.createtable.owner.grants</name> <value>ALL</value> <description>自动授予表创建者权限</description> </property> ``` 保存文件后,重启Hive服务使配置生效。 #### 2. **配置授权模式** Hive支持多种授权模式,推荐使用**基于SQL标准的授权(HiveServer2)**,因为它提供细粒度控制(如表、列级别权限)[^4]。在 `hive-site.xml` 中确认模式设置: - 确保 `hive.security.authorization.manager` 参数指向 `org.apache.hadoop.hive.ql.security.authorization.plugin.sqlstd.SQLStdHiveAuthorizerFactory`。 - 避免使用默认授权模式(Legacy Mode),它仅防止误操作,不防恶意访问[^4]。 #### 3. **创建角色和用户** 使用Hive命令行工具(如Beeline)创建角色和分配权限: - 连接HiveServer2(例如通过Beeline): ```bash beeline -u "jdbc:hive2://<hostname>:10000" -n <username> -p <password> ``` - 创建角色(例如 `readonly`): ```sql CREATE ROLE readonly; ``` - 将角色授予用户或组(例如授予用户组 `analysts`): ```sql GRANT ROLE readonly TO GROUP analysts; ``` 引用[^3]提到,角色管理需结合Hadoop用户组,确保一致性。 #### 4. **授予和撤销权限** 基于SQL语法,为角色分配具体权限: - **授予权限**(例如允许 `readonly` 角色查询表): ```sql GRANT SELECT ON TABLE database.table TO ROLE readonly; ``` - **撤销权限**(例如移除写权限): ```sql REVOKE INSERT ON TABLE database.table FROM ROLE readonly; ``` 支持权限包括:`SELECT`, `INSERT`, `UPDATE`, `DELETE`, `ALL` 等。表创建者默认拥有所有权限,可通过配置调整[^2]。 #### 5. **测试权限设置** 验证权限是否生效: - 切换角色测试(例如在Beeline中): ```sql SET ROLE readonly; SELECT * FROM test_table; -- 应成功 INSERT INTO test_table VALUES (1); -- 应失败,如果未授权 ``` - 查看角色权限: ```sql SHOW ROLE GRANT GROUP analysts; -- 显示角色分配情况 ``` 引用[^3]强调,测试时需确保Kerberos认证等安全机制已启用。 #### 6. **注意事项** - **安全强化**:结合Kerberos认证提升安全性,防止未授权访问[^3]。 - **性能影响**:开启权限管理可能轻微增加元数据操作延迟,建议在生产环境测试。 - **常见问题**:如果权限不生效,检查配置文件和用户组映射(如Hadoop的 `core-site.xml`)。 - **备份**:修改权限前备份元数据,避免误操作。 通过以上步骤,你可以有效管理Hive权限,确保数据安全。Hive权限管理依赖于Hadoop生态系统,建议参考官方文档以适配具体版本[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值