Apache Sentry实战之旅(二)—— Sentry客户端使用

Apache Sentry 初识 1、Apache Sentry是什么?      一句话:提供了细粒度级、基于角色的授权以及多租户的管理模式。      对于Hadoop和Hive来说,引入Sentry提升数据安全是非常必要的。 2、Apache Sentry有什么作用?      1)安全授权 :Sentry可以控制数据访问,并对已通过验证的用户提供数据访问特权。      2)细粒度访问控制 :Sentry 阅读详情

Apache Sentry虽然可以将HDFS、Hive与Impala三个组件的权限认证统一,但是只能按照给组授予角色的方式来进行授权,不能直接授权给组中的用户,显得不太灵活。有时候为了兼容已有大数据平台的授权体系,比如只使用Sentry控制Impala服务的权限,而不控制Hive和HDFS服务的权限,希望通过调用Sentry客户端API的方式将已有的Hive和HDFS服务的权限信息导入到Sentry中,就需要通过调用Sentry API来达到这个目的。Sentry支持通过调用服务方式整合公司特定的数据权限需求,提供了外调接口来动态获得和更改权限信息,使我们可以同步其它大数据平台的组织架构,复用已有的权限模型,实现权限信息的统一。

环境

Impala版本:2.12.0-cdh5.16.1

Sentry版本:1.5.1-cdh5.16.1

JDK版本:jdk1.8.0_212

整合步骤

首先得确认Sentry服务端安装好并已启动,以下是整合步骤及测试用例。整个工程目录如下:

1、加入maven依赖:

<dependency>
    <groupId>org.apache.sentry</groupId>
    <artifactId>sentry-provider-db</artifactId>
    <version>1.5.1-cdh5.16.1</version>
</dependency>

2、Sentry客户端配置文件——sentry-site.xml:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
   this work for additional information regarding copyright ownership.
   The ASF licenses this file to You under the Apache License, Version 2.0
   (the "License"); you may not use this file except in compliance with
   the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
-->

<!-- WARNING!!! This file is provided for documentation purposes ONLY!              -->
<!-- WARNING!!! You should copy to sentry-site.xml and make modification instead.   -->

<configuration>

    <property>
        <name>sentry.service.client.server.rpc-port</name>
        <value>8038</value>
    </property>

    <property>
        <name>sentry.service.client.server.rpc-addresses</name>
        <value>hadoop21-test1-rgtj5-tj1</value>
    </property>

    <property>
        <name>sentry.service.client.server.rpc-connection-timeout</name>
        <value>200000</value>
    </property>

    <!-- Properties required for setting the DB provider-->
    <property>
        <name>sentry.hive.provider.backend</name>
        <value>org.apache.sentry.provider.db.SimpleDBProviderBackend</value>
    </property>

    <property>
        <name>sentry.service.security.mode</name>
        <value>none</value>
    </property>

</configuration>

3、异常处理类——InternalException:

public class InternalException extends Exception{

    public InternalException(String msg, Throwable cause) {
        super(msg, cause);
    }

    public InternalException(String msg) {
        super(msg);
    }
}

4、配置文件加载类——SentryConfig:

public class SentryConfig {
  // Absolute path to the sentry-site.xml configuration file.
  private final String configFile_;

  // The Sentry configuration. Valid only after calling loadConfig().
  private final Configuration config_;

  public SentryConfig(String configFilePath) {
    configFile_ = configFilePath;
    config_ = new Configuration();
  }

  /**
   * Initializes the Sentry configuration.
   */
  public void loadConfig() {
    if (Strings.isNullOrEmpty(configFile_)) {
      throw new IllegalArgumentException("A valid path to a sentry-site.xml config " +
          "file must be set using --sentry_config to enable authorization.");
    }

    File configFile = new File(configFile_);
    if (!configFile.exists()) {
      String configFilePath = "\"" + configFile_ + "\"";
      throw new RuntimeException("Sentry configuration file does not exist: " +
          configFilePath);
    }

    if (!configFile.canRead()) {
      throw new RuntimeException("Cannot read Sentry configuration file: " +
          configFile_);
    }

    // Load the config.
    try {
      config_.addResource(configFile.toURI().toURL());
    } catch (MalformedURLException e) {
      throw new RuntimeException("Invalid Sentry config file path: " + configFile_, e);
    }
  }

  public Configuration getConfig() { return config_; }
  public String getConfigFile() { return configFile_; }
}

5、测试类——SentryClientTest:

public class SentryClientTest {

    // SentryConfig类需要的sentry配置文件路径视配置文件实际存放路径而定
    private static SentryConfig sentryConfig = new SentryConfig("/test/spring-boot-galaxy/bigdata-galaxy/src/test/scala/com/galaxy/bigdata/sentry/sentry-site-client.xml");

    /**
     * 测试获取已有角色信息
     * @throws InternalException
     */
    @Test
    public void testListRoles() throws InternalException {
        SentryServiceClient client = null;
        try {
            client = new SentryServiceClient();
            // 这里为了测试方便,使用hadoop管理员作为请求用户,来获取所有角色信息
            Set<TSentryRole> roles = client.get().listRoles("hadoop");
            for (TSentryRole role : roles) {
                System.out.println(role);
            }
        } catch (InternalException | SentryUserException e) {
            e.printStackTrace();
        } finally {
            client.close();
        }
    }

    /**
     * 删除已有角色信息
     * @throws InternalException
     */
    @Test
    public void testDropRoleIfExists() throws InternalException {
        SentryServiceClient client = null;
        try {
            client = new SentryServiceClient();
            client.get().dropRoleIfExists("hadoop","admin_role");
        } catch (InternalException | SentryUserException e) {
            e.printStackTrace();
        } finally {
            client.close();
        }
    }


    /**
     * Wrapper around a SentryPolicyServiceClient.
     * TODO: When SENTRY-296 is resolved we can more easily cache connections instead of
     * opening a new connection for each request.
     */
    static class SentryServiceClient implements AutoCloseable {
        private final SentryPolicyServiceClient client_;

        /**
         * Creates and opens a new Sentry Service thrift client.
         */
        public SentryServiceClient() throws InternalException {
            client_ = createClient();
        }

        /**
         * Get the underlying SentryPolicyServiceClient.
         */
        public SentryPolicyServiceClient get() {
            return client_;
        }

        /**
         * Returns this client back to the connection pool. Can be called multiple times.
         */
        public void close() throws InternalException {
            try {
                client_.close();
            } catch (Exception e) {
                throw new InternalException("Error closing client: ", e);
            }
        }

        /**
         * Creates a new client to the SentryService.
         */
        private SentryPolicyServiceClient createClient() throws InternalException {
            SentryPolicyServiceClient client;
            try {
                sentryConfig.loadConfig();
                client = SentryServiceClientFactory.create(sentryConfig.getConfig());
            } catch (Exception e) {
                throw new InternalException("Error creating Sentry Service client: ", e);
            }
            return client;
        }
    }
}

在该类中,定义了静态内部类SentryServiceClient,它的主要职责是创建SentryPolicyServiceClient接口的对象,SentryPolicyServiceClient接口是Sentry与外部系统交互的窗口,它的主要方法定义如下:


可以看到,创建(create)、删除(drop)、查询(list)、授权(grant)和撤销(revoke)这些与权限有关的操作,都定义在该方法中,方法的定义一目了然,顾名就能思义。

6、运行SentryClientTest类,测试服务调用是否正常,相关操作是否成功。

参考资料

1、Impala-2.12.0-cdh5.16.1源码SentryPolicyService.java类中的实现。

2、测试代码地址:https://github.com/Viking-Bird/spring-boot-galaxy/tree/master/bigdata-galaxy/src/test/scala/com/galaxy/bigdata/sentry

Apache Ranger原理与应用实践 文章目录一、业务背景现状&&需求二、大数据安全组件介绍与对比1、Kerberos2、Apache Sentry3、Apache Ranger4、为什么我们选择Ranger三、Apache Ranger系统架构及实践1、架构介绍2、组件介绍3、权限模型4、权限实现Hdfs实现原理Hbase实现原理Hive实现原理Yarn实现原理四、Ranger实践1、组权限实现 一、业务背景 大数据... 阅读详情

相关推荐

STM32CubeIDE离线安装芯片PACK包全攻略(附离线包下载与导入步骤)

本文详细介绍了在STM32CubeIDE中离线安装芯片PACK包的完整流程,包括官方和第三方资源获取方法、本地安装步骤及常见问题解决方案。特别针对网络隔离环境下的嵌入式开发需求,提供了实用的版本管理和自动化部署技巧,帮助开发者高效完成芯片固件支持包的离线配置。

weixin_30825581的博客 298

Sentry简介— Sentry Client Connection Pool Configuration

Sentry简介— Sentry Client Connection Pool Configuration Sentry Client Connection Pool is an improvement which make Sentry supports connection pooling in sentry client. Enable Connection Pool in Cl

wjandy0211的博客 873

手把手调试Android 14 ShellTransitions:用Log追踪ActiveTransition与Handler匹配过程

本文详细介绍了在Android 14中调试ShellTransitions机制的方法,重点通过Log追踪ActiveTransition与Handler的匹配过程。文章提供了关键日志点植入策略、Handler匹配机制解析及实战调试案例,帮助开发者解决窗口转场动画中的卡顿和错乱问题,提升系统动画性能。

weixin_42652674的博客 429

CDH 之 Sentry 添加或启动错误:Could not create org.apache.sentry.provider.db.service.persistent.SentryStore

以上的错误看似 mysql 的 jar 包有问题,但这里并不是,因为 CDH 其他服务也会依赖这个 mysql-connector-java.jar ,所以不会是它的问题。

予挚之的博客 450

Windows下Python多版本共存与切换的终极指南(含环境变量详解)

本文详细解析了在Windows系统下实现Python多版本共存与切换的完整方案。通过深入讲解环境变量Path的底层机制,提供了从安装策略、精细化Path管理到创建快速切换脚本的实战指南,并介绍了py启动器和虚拟环境等高级技巧,帮助开发者彻底解决版本冲突问题,提升开发效率。

v6b7n8m9q0的博客 536

LVGL开发新选择:深度对比NXP GUI Guider与SquareLine Studio,免费版够用吗?

本文深度对比了LVGL开发中两款主流工具NXP GUI Guider与SquareLine Studio的核心差异,包括功能定位、设计能力、代码生成质量和硬件适配等方面。针对不同项目需求,分析了免费版工具的适用性,帮助开发者根据预算和功能需求做出明智选择。特别关注了GUI设计工具在嵌入式开发中的实际应用效果。

weixin_26976635的博客 425

Sentry(Android)源码解析

本文字数:16030字预计阅读时间:40分钟01前言Sentry是一个日志记录、错误上报、性能监控的开源框架,支持众多平台:其使用方式在本文不进行说明了,大家可参照官方文档:https://docs.sentry.io/platforms/android/?original_referrer=https%3A%2F%2Fsentry.io%2F目前大部分免费的三方APM平台限制较多,好用的又收...

SOHU_TECH的博客 2624

SNAP实战:Sentinel-1 GRD数据从预处理到后向散射系数生成全流程解析

本文详细解析了Sentinel-1 GRD数据从预处理到后向散射系数生成的全流程,包括辐射定标、噪声处理、地形校正等关键步骤。通过SNAP软件实战操作,帮助用户掌握SAR影像处理技巧,提升数据质量与分析效率,适用于地表变化监测、灾害评估等应用场景。

weixin_29239661的博客 536

强大的日志监控工具:Sentry与Zap Logger的完美结合

强大的日志监控工具:Sentry与Zap Logger的完美结合 项目介绍 在现代软件开发中,日志记录和错误监控是确保系统稳定性和可维护性的关键环节。为了满足这一需求,我们推出了一个强大的开源项目——Sentry client for zap logger。该项目旨在将Sentry的错误监控功能无缝集成到Zap Logger中,为开发者提供一个高效、灵活的日志管理解决方案。 项目技术分析 技术栈 ...

gitblog_00320的博客 651

虚拟机VMware Horizon Client与主机之间建立共享文件夹

因经常需要在虚拟机和主机之间传递一些日常文件,所以建立共享文件夹。 虚拟机中安装的系统为win10,主机中的系统为win10。 步骤: 第一步:先在虚拟机win10中新建文件夹(我重命名为“共享文件夹”),然后右键属性->共享->共享 进去之后点击自己的账户名 然后点共享。操作完成后,再返回属性界面就能看到该文件夹已经共享而且出现了共享链接,记下此链接。 第二步:回到主机桌面->此电脑->最上面计算机->添加一个网络位置- 点击下一步 然后自定义网络位置,下一步,如下图

AnChenliang_1002的博客 1万+

ComfyUI报错ModuleNotFoundError: No module named ‘comfy.options‘

好家伙,我一想我刚刚好像用了pip安装了comfy模块,不会是和ComfyUI自带的comfy模块产生冲突了吧。(3)还有的说是项目不是最新版,叫更新到最新版本的,好家伙,我报错之前根本没更新也没错,突然就报错的。(4)还有的说没有comfy.options这部分代码,叫自己去拉一个,我一看也有啊。我也不知道啥时候脑抽风去装这么个东西的,幸好我聪明机智,一眼就知道了。看把我气的,然后网上搜集各种资料,一个一个去试。

满目星辰 5156

Apache Sentry实战之旅(一)—— Impala+Sentry整合

Impala默认是以impala这个超级用户运行服务,执行DML和DDL操作的,要实现不同用户之间细粒度的权限控制,需要与Sentry整合。Sentry是Apache下的一个开源项目,它基于RBAC的授权模型实现了权限控制,Impala与它整合以后,就能实现不同用户之间在应用层的权限认证,从而...

899

一文让你轻松理解Wi-Fi理论速率计算方式

如上所示,在使用FDM的802.11协议上,最小子载波带宽为312.5KHz,那一个信道频宽为20MHz的信道可以分成64个子载波,但是由于技术原因,有效使用的是52个子载波,实际用于数据传输的只有48个,有4个子载波充当导频载波。载波:交流信号或者直流信号本身不具备数据传输能力,但是如果信号发生很小的波动或者变化,从而实现数据的收发。所谓子载波,就是将信号划为为很多的小信道,这些小信道可以实现数据的并发传输,子载波我们英文称为subcarrier,也称为音调(tone)。Symbol time如下所示。

1042484520@qq.com(邮箱) 3447

Apache Sentry详细讲解

Sentry 简介 Apache Sentry是Cloudera公司发布的一个Hadoop开源组件,2016年3月从Incubator毕业,成为Apache顶级项目。 Sentry是一个基于角色的粒度授权模块,提供了对Hadoop集群上经过身份验证的用户提供了控制和强制访问数据或数据特权的能力。它可以和Hive/Hcatalog、Apache Solr 和Cloudera Impala等集成,...

storm_fury 5098

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

元数据权限授权管理框架:Apache Sentry(一)

** 简介: ** Apache Sentry是Hadoop的基于角色的精细授权模块。Sentry为Hadoop集群上的经过身份验证的用户和应用程序提供了控制和实施数据特权级别的功能。Sentry当前可以与Apache Hive,Hive Metastore / HCatalog,Apache Solr,Impala和HDFS(仅限于Hive表数据)配合使用。 Sentry被设计为Hadoop组件的可插入授权引擎。它允许您定义授权规则,以验证用户或应用程序对Hadoop资源的访问请求。Sentry是高度模块

毛毛的博客 1689

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

什么是 Apache Sentry , Apache Sentry 介绍

Apache Sentry是Hadoop中的一个基于角色的细粒度授权组件。Sentry可以在Hadoop集群上对通过身份认证的用户和应用程序控制数据访问权限。Sentry开箱即用的支持Hive,Hive Metastore/HCatalog,Solr,Impala,HDFS(仅限Hive表数据),Kafka和Kudu(通过Impala)。 Sentry旨在成为Hadoop各组件的可插拔授权...

jast 2171

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

数据权限访问控制(Apache Sentry)

Apache Sentry最初由Cloudera公司内部开发,针对Hadoop系统中的数据(主要是HDFS、Hive的数据)进行细粒度控制,对HDFS、Hive以及Impala有着良好的支持性。2013年Sentry 成为 Apache 的孵化项目,为 Hadoop 集群元数据和数据存储提供集中、细粒度的访问控制。

weixin_43156294的博客 2341

Apache Sentry

hdfs data access control

多头注意力探索Now 660

Apache sentry架构分析-(与hive、hdfs集成)

Apache sentry架构分析-(与hive、hdfs集成) 本文链接:https://blog.csdn.net/hongtaq156136/article/details/88035573 前言 Apache Sentry是Cloudera公司发布的一个Hadoop开源组件,它提供了细粒度级、基于角色的授权以及多租户的管理模式。类似的安全管理框架还有Hortonworks公司开源的Apache Ranger。 通过引进Sentry,Hadoop目前可在以下方面满足企业和政府用户的RBAC

张伟的专栏 1168

Apache Sentry权限管理框架

Apache Sentry调研总结 一、背景 市面上流行的大数据权限管理框架主要有:Apache Sentry和Apache Ranger 等。这些框架兼容了大部分基于hadoop生态圈的组件,包括hive,hbase,kafka,hdfs和yarn等。 二、组件介绍 2.1 什么是Apache Sentry? Apache Sentry是由Cloudera公司内部开发的开源的大数据权限管理框架。Apache Sentry对存储在HDFS上数据的管理有着很好的支持性,目的...

weixin_43914798的博客 992

Sentry 授权

文章目录 前言一、架构概述1.Sentry 组件2.主要概念3.User身份和Group映射4.基于roles的访问控制5.统一授权 二、Sentry与Hadoop生态系统的集成1.Hive and Sentry2.Impala and Sentry2.Sentry-HDFS同步3.Search and Sentry4.Authorization Administration1.Disabling Hive CLI2.使用Hue管理Sentry 权限 总结 前言 sentry是Hadoo...

张伟的专栏 1205

如何选择最佳错误监控方案:Apache SkyWalking vs Sentry实战指南

当系统出现异常时,你是否曾面临这样的困境:明明收到了告警通知,却无法快速定位问题根源?在分布式架构日益复杂的今天,错误监控工具的选择直接影响着故障排查效率和系统稳定性。本文将为你深度解析两大主流监控工具的核心差异,助你做出明智的技术选型。 ## 监控工具全景概览 Apache SkyWalking作为全链路可观测性平台,专注于分布式系统的性能监控和错误追踪,通过字节码增强技术自动捕获应用异常。

gitblog_00494的博客 360

Sentry元数据mysql_元数据权限授权管理框架:Apache Sentry(一)

简介:sentry 2.1.0 源码下载地址:https://download.csdn.net/download/m0_43393325/12619863Apache Sentry是Hadoop的基于角色的精细授权模块。Sentry为Hadoop集群上的经过身份验证的用户和应用程序提供了控制和实施数据特权级别的功能。Sentry当前可以与Apache Hive,Hive Metastore / ...

weixin_27427397的博客 244

元数据权限授权管理框架:Apache Sentry 集成HDFS测试使用(三)

本文已使用CDH集成了sentry未使用kerberos Sentry的Hadoop ACL Sync 这些客户端中,HDFS的client比较特殊;因为已经在hive中设置了sentry权限,hive本身就是访问hdfs文件,为什么还要在hdfs层再做权限控制呢?这是因为除了hive可以直接访问hdfs的文件之外,还有Map-Reduce程序,pig,spark等可以访问hdfs,所以只是在hive层面去做是不够的; 在cloudera中可以通过配置hdfs的Enable Sentry Synchroni

毛毛的博客 1712
上一篇: Apache Sentry实战之旅(一)—— Impala+Sentry整合
下一篇: ZooKeeper节点数据量限制引起的Hadoop YARN ResourceManager崩溃原因分析(二)
Viking_bird
博客等级 码龄11年 92粉丝 183原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值