当前位置: 首页 > ds >正文

【doris】doris集成ranger控制权限,ranger配置无法存储doris密码password信息

doris版本:3.0.0
ranger:2.6.0

ranger的日志配置在此文件中:ranger-2.6.0-admin/conf/logback.xml
添加插件的日志级别配置:

  <logger name="org.apache.ranger.services.doris" additivity="false" level="debug"><appender-ref ref="xa_log_appender"/></logger

doris-ranger集成官方文档
在此文章中找到


并下载通过,jd-gui反编译工具打开,在idea中新建目录结构,并添加依赖,文本是使用gradle构建build.gradle文件如下:

plugins {id 'org.jetbrains.kotlin.jvm' version '1.9.23'
}group = 'org.apache.ranger'
version = '3.0.0'repositories {mavenCentral()
}dependencies {api("org.apache.ranger:ranger-plugins-common:2.6.0")testImplementation 'org.jetbrains.kotlin:kotlin-test'
}test {useJUnitPlatform()
}
kotlin {jvmToolchain(8)
}

很遗憾,此包在github中么有找到源码,必须反编译了。
将几个文件源码分别复制idea中。修改:DorisClient类,在initConnection添加密码解码代码。

添加if代码块信息即可。本文用kotlin语言编译。可自行按逻辑编写java代码。

    private fun initConnection() {val prop = configHolder.rangerSectionval driverClassName = prop.getProperty("jdbc.driver_class")val url = prop.getProperty("jdbc.url")val properties = Properties()properties["user"] = prop.getProperty("username")if (prop.getProperty("password") != null) {val pwdTmp= prop.getProperty("password")val pwd=PasswordUtils.getDecryptPassword(pwdTmp)properties["password"]=pwd}

总结,doris源码中没有对ranger提供的密码解码导致,密码错误和无法被存储的假象。

附录:
PasswordUtils.getDecryptPassword的测试
其逻辑是能解码就解码,不能解就返回原密码。

package org.apache.ranger.plugin.util
import org.junit.jupiter.api.Test
class PasswordUtilsTest {@Testfun testPasswordDecrypt(){println("hello!")val encryptedPassword="PBEWithHmacSHA512AndAES_128,tzL1AKl5uc4NKYaoQ4P3WLGIBFPXWPWdu1fRm9004jtQiV,f77aLYLo,1000,Nwv5d4wax5rgJLyu4bnSNw==,0eEjW1/qisHcE++8Af1QPA=="val password1=PasswordUtils.getDecryptPassword(encryptedPassword)println("from encrypted: ${password1}")  // 能被正确解码:qaz123val unencryptedPassword="qaz123"val password2=PasswordUtils.getDecryptPassword(unencryptedPassword)println("from unencrypted: ${password2}")  // 就是原密码:qaz123}
}
编译项目,并替换`ranger-2.6.0-admin/ews/webapp/WEB-INF/classes/ranger-plugins/doris/ranger-doris-plugin-3.0.0.jar`,重启ranger即可。
观察`ranger-admin-ranger-root.log`日志即可debug了。当然也可以在源码中添加LOG.info信息。

源码如下:

    public static String getDecryptPassword(String password) {String decryptedPwd = null;try {decryptedPwd = decryptPassword(password);} catch (Exception var6) {LOG.warn("Password decryption failed, trying original password string.");decryptedPwd = null;} finally {if (decryptedPwd == null) {decryptedPwd = password;}}return decryptedPwd;}
http://www.xdnf.cn/news/14011.html

相关文章:

  • 什么是分布式锁及分布式锁应用场景
  • GCC编译/连接/优化等选项
  • Solon框架模板漏洞深度剖析与修复实战
  • python格式化字符串的几种方式
  • mysql表备份数据,改表名
  • Ubuntu下使用PyTurboJPEG加速图像编解码
  • 【阿里巴巴 x 浙江大学】信息与交互设计 - 交互设计流程与要素
  • PDB Bank怎么下载小分子sdf(选择哪个)和复合物
  • Spring依赖注入的四种方式(面)
  • DC3靶机渗透
  • python计算生态库:18个常用标准库+第三方库
  • 杭州电商代运营公司排名前十
  • SPRING AI 入门
  • 前端八股文 - JavaScript 篇
  • UE接口通信常见问题
  • Ubuntu下搭建Black Magic Probe (BMP) 编译环境
  • AbMole| 2-Deoxy-D-glucose(M5140;2-脱氧-D-葡萄糖)
  • 第七章接入技术
  • opencv opencv_contrib vs2020 源码安装
  • 简述Python里面search和match的区别
  • ZooKeeper详解以及应用部署(AI)
  • Spring Cache 详细介绍——补充
  • 深度解析 JuiceFS 权限管理:Linux 多种安全机制全兼容
  • JavaScript 原型(Prototype)详解
  • 金属切削机床制造企业如何破局?探索项目管理数字化转型
  • 学习STC51单片机35(芯片为STC89C52RCRC)智能小车3(PWM调速小车)
  • C++学习之虚析构函数
  • 【QT】QVariant 转换为自定义的枚举类型
  • 当机械工程师的餐桌变身实验室:立创电赛的真实创新启示录
  • 《深度优先搜索》题集