【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.rangerSection
        val 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 {

    @Test
    fun testPasswordDecrypt(){
        println("hello!")
        val encryptedPassword="PBEWithHmacSHA512AndAES_128,tzL1AKl5uc4NKYaoQ4P3WLGIBFPXWPWdu1fRm9004jtQiV,f77aLYLo,1000,Nwv5d4wax5rgJLyu4bnSNw==,0eEjW1/qisHcE++8Af1QPA=="
        val password1=PasswordUtils.getDecryptPassword(encryptedPassword)
        println("from encrypted: ${password1}")  // 能被正确解码:qaz123

        val 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;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值