Apache Zeppelin 数据源授权(Data Source Authorization):个人凭据管理与 JDBC 连接池实践
数据分析数据可视化大数据后端【免费下载链接】zeppelinWeb-based notebook that enables>项目地址https://gitcode.com/gh_mirrors/zeppelin1/zeppelin点击查看免费下载导读本文围绕 Apache Zeppelin 的**数据源授权Data Source Authorization**特性展开讲解如何让每位登录用户使用自己的数据库账号而非共享账号访问 MySQL、Vertica、Presto 等数据源。读完本文你将掌握在 Zeppelin UI 或通过 REST API 保存个人凭据的方法、凭据在conf/credentials.json中的存储与加密机制、凭据注入{entity.user}/{entity.password}占位符与密码打码的原理以及 JDBC 解释器如何基于这些凭据维护每用户连接池。什么是数据源授权数据源授权的核心思想是认证与授权交由数据源自身完成。Zeppelin 并不代替数据库判断某个用户能访问什么表而是把以谁的账号登录数据库这一环节交给用户自己决定数据库再依据该账号的权限决定其可见范围。典型场景如下你已经在 Vertica 数据库中拥有一个账号希望在 Zeppelin 中通过 JDBC 连接 Vertica 时使用这个账号而不是让所有定义在conf/shiro.ini中的用户共享同一个数据库账号。此时只需要把自己的凭据用户名 密码保存到 Zeppelin解释器即可在运行段落时自动使用它。这条特性的演进始于 ZEPPELIN-828由 Pull Request #860 实现后续的社区管理解释器适配进度可关注 ZEPPELIN-1070当前仓库中JDBC 解释器已完整支持该机制下文源码分析部分会给出依据。如何保存凭据信息通过 UI 下拉菜单添加在 Zeppelin 界面中打开 Credential 页面即可在数据源下拉菜单中新增凭据。该交互由 credential.controller.js 实现页面初始化时会调用GET /api/interpreter/setting拉取已配置的解释器名称列表并为 Entity 输入框提供自动补全angular.element(#entityname).autocomplete(...)方便你直接选中某个解释器名称作为 Entity新增凭据时通过PUT /api/credential提交{entity, username, password}列表中已有凭据可以就地编辑仅可改用户名和密码Entity 作为唯一键不可改或删除DELETE /api/credential/{entity}。Entity 的命名约定Entity 是区分每组凭据的键。官方建议其命名约定为Interpreter Name解释器名称例如为 JDBC 解释器保存的凭据Entity 就叫jdbc。这样解释器在运行时才能按命名规则找到对应的凭据下文JDBC 解释器如何按用户取凭据一节会说明。用户名与密码填写你自己的数据库账号例如 JDBC 解释器要连的 MySQL 用户名和密码。注原文档中引用的界面截图Credential 标签页与新增凭据表单位于docs/assets/themes/zeppelin/img/docs-img/目录下。由于该仓库的 docs 静态图片目录未包含这两张图本文不强行配图以文字说明代替。凭据的归属与持久化凭据按用户隔离存储归属规则如下若已启用 Shiro 认证参见 Shiro 认证指南凭据保存在当前登录用户名下若未启用认证凭据统一保存在anonymous用户名下所有凭据最终持久化到conf/credentials.json默认配置下配置文件路径由zeppelin.credentials.persist与 conf 目录共同决定见 ZeppelinConfiguration.java。持久化与加密由 Credentials.java 负责构造时读取zeppelin.credentials.persist默认true见 ConfVars 定义 ZeppelinConfiguration.java决定是否落盘若配置了zeppelin.credentials.encryptKey则用 Encryptor.java 对文件内容做AESAESEngine ZeroBytePadding加密后 Base64 编码再写入解密时反向操作保存/加载通过ConfigStorage完成支持本地文件系统等存储后端见 LocalConfigStorage.java 与 FileSystemConfigStorage.java。因此为保护生产环境中的数据库口令建议在conf/zeppelin-site.xml中设置property namezeppelin.credentials.encryptKey/name valueyour-encrypt-key/value descriptionKey used to encrypt credentials. If not set, credentials are stored in plain text./description /property通过 REST API 管理凭据凭据管理同样暴露为 REST API由 CredentialRestApi.java 实现Path(/credential)接口行为与 UI 页面一一对应GET /api/credential返回当前用户的全部凭据实体、用户名、密码PUT /api/credential新增/更新凭据请求体 JSON 为{entity: jdbc, username: user, password: password}任一字段为空时返回400 BAD_REQUESTDELETE /api/credential删除当前用户的全部凭据不存在时返回404 NOT_FOUNDDELETE /api/credential/{entity}删除指定 Entity 的凭据不存在时返回404 NOT_FOUND。完整的请求/响应示例可参考 Credential REST API 文档例如保存一条凭据curl -X PUT -H Content-Type: application/json -d {entity:jdbc,username:mysql_user,password:mysql_password} \ http://[zeppelin-server]:[zeppelin-port]/api/credential/需要说明的是上述 REST API 文档中的示例以entity1/user1/password1等占位符形式给出实际使用时应替换为真实 Entity 与账号口令。该 API 的测试用例位于 CredentialsRestApiTest.java覆盖了凭据的存取与删除流程。不同数据源的凭据使用差异原文档针对三类常见数据源给出了差异化的说明JDBC 解释器需要维护每用户per-user的连接池。解释器的interpret方法以用户字符串为参数从对应用户的连接池中取出连接执行 JDBC 调用。具体实现见下文源码分析。Presto如果 Presto 后端代码基于用户执行 HDFS 授权那么可以不提供密码凭据中可以只保存用户名。Vertica 与 MySQL必须为用户存储密码信息连接时以用户名 密码完成认证。源码级原理解析JDBC 解释器如何按用户取凭据JDBCInterpreter.java 完整实现了凭据驱动的连接管理关键逻辑如下解析当前用户getUser(context)优先取登录用户Shiro principal若为anonymous且解释器设置了default.user则回退使用该属性值JDBCInterpreter.java。解析 Entity 命名getEntityName(replName, propertyKey)规定——当解释器名恰为jdbc时Entity 取属性键本身default否则取解释器名JDBCInterpreter.java。这正是官方建议Entity 用解释器名的代码依据。读取凭据getUsernamePassword(context, entity)从context.getAuthenticationInfo().getUserCredentials()中按 Entity 取出UsernamePasswordJDBCInterpreter.java。每用户连接池setUserProperty(context)在解释器自身未配置default.user/default.password时用当前用户凭据覆盖用户属性随后createConnectionPool(url, user, properties)以jdbc:apache:commons:dbcp:default{user}这样的池名注册 DBCP 连接池JDBCInterpreter.java、JDBCInterpreter.java从而实现一个用户一个连接池。若找不到该用户的凭据则关闭该用户连接池closeDBPool(user)。与此对应的官方文档说明见 JDBC 解释器文档当default.user与default.password被删除使用 X 按钮后解释器会转而使用用户在 Credential 页面保存的凭据建立连接。凭据注入与密码打码除 JDBC 解释器外Zeppelin 还提供了通用的凭据注入机制由 Paragraph.java 与 CredentialInjector.java 实现解释器属性injectCredentials常量定义见 Constants.java控制是否启用注入默认false启用后段落的脚本中形如{entity.user}与{entity.password}的占位符会被替换为对应 Entity 的用户名与密码注入的密码在返回结果中会被打码CredentialInjector.hidePasswords(ret)会把结果中出现的密码文本替换为###避免凭据随结果泄露覆盖 HTML / TEXT / TABLE 三种结果类型。例如在段落中写%jdbc SELECT * FROM table WHERE creator {jdbc.user}启用injectCredentials后{jdbc.user}会被替换为当前用户在 Credential 页面中为 Entityjdbc保存的用户名。凭据的数据模型凭据按用户 → 多个 Entity → 用户名/密码三层组织顶层是 Credentials.java 持有的MapString, UserCredentials credentialsMapkey 为用户名每个UserCredentials内部再按 Entity 维护多组UsernamePassword其结构定义见 CredentialsInfoSaving.java 等org.apache.zeppelin.user包下的类落到conf/credentials.json时大致形态为{ credentialsMap: { anonymous: { userCredentials: { jdbc: { username: mysql_user, password: mysql_password } } } } }以上 JSON 仅用于示意结构实际字段名以CredentialsInfoSaving的 Gson 序列化结果为准。相关单元测试见 CredentialsTest.java 与 EncryptorTest.java。使用注意事项先启用认证再谈用户隔离如果希望每位用户使用各自数据库账号请先按 Shiro 认证指南 配置认证否则所有凭据都归入anonymous也就失去了个人凭据的意义。Entity 命名保持一致JDBC 解释器按getEntityName规则解释器名为jdbc时取default否则取解释器名查找凭据保存凭据时 Entity 务必与解释器命名匹配。密码存储安全默认zeppelin.credentials.persisttrue会将凭据写入conf/credentials.json生产环境应配置zeppelin.credentials.encryptKey启用 AES 加密并保护好该密钥文件本身。凭据注入按需开启injectCredentials默认关闭只有确实需要在段落脚本中使用{entity.user}/{entity.password}占位符时才开启且注意其会对返回结果中的密码做###打码处理。数据库侧差异Presto 在依赖 HDFS 授权时可只保存用户名Vertica、MySQL 等必须同时保存用户名与密码。适用范围该特性最初面向自定义第三方解释器设计ZEPPELIN-828当前仓库中 JDBC 解释器已原生支持使用其他解释器时请以其文档为准确认是否支持凭据读取。总结数据源授权让 Zeppelin 把数据库认证与授权交还给数据源本身同时通过 UI、REST API 两层入口为用户提供个人凭据的保存、查询、更新与删除能力。其底层由Credentials持久化 AES 加密、CredentialRestApiREST 接口、JDBCInterpreter每用户连接池与CredentialInjector占位符注入 密码打码协同完成。围绕该特性的核心代码与文档均可在当前仓库中定位到datasource_authorization.md、Credentials.java、JDBCInterpreter.java、credential.controller.js。赞分享数据分析数据可视化大数据后端【免费下载链接】zeppelinWeb-based notebook that enables>项目地址https://gitcode.com/gh_mirrors/zeppelin1/zeppelin点击查看免费下载相关推荐Apache Zeppelin 数据源授权Data Source Authorization完全指南让每个用户使用自己的数据库凭据Apache Zeppelin 数据源授权Data Source Authorization完全指南让每个用户使用自己的数据库凭据 数据源授权是 Apac后端前端大数据数据分析Apache Zeppelin 数据源授权指南凭据管理、注入机制与源码实现解析Apache Zeppelin 数据源授权指南凭据管理、注入机制与源码实现解析 数据源授权Data Source Authorization解决的是多个数据分析数据可视化大数据后端前端任务调度Apache Zeppelin 通用 JDBC Interpreter 使用指南连接任意数据源、连接池调优与多数据库实战Apache Zeppelin 通用 JDBC Interpreter 使用指南连接任意数据源、连接池调优与多数据库实战 Apache Zeppelin 的数据分析数据可视化大数据后端上一篇Hitboxer告别游戏操作冲突实现键盘精准控制的终极解决方案下一篇终极Hitboxer指南免费开源SOCD清洁工具让你的游戏操作更精准创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Claude-Opus55视频提示词去哪找

Claude-Opus55视频提示词去哪找

Claude Opus 5.5 视频提示词去哪找 想用 Claude Opus 5.5 生成视频,最难的不是打开工具,而是拿到一段「真跑出过成片」的提示词。可以看 Gen Feeds(https://genfeeds.com/)的 Opus 5.5 创作实验室 https://genfeeds.com/labs/opus…

2026/10/10 5:52:43 阅读更多 →
DeepSeek Harness vs Claude 官方插件:『一切皆插件』的对决,谁是智能体生态的基建赢家

DeepSeek Harness vs Claude 官方插件:『一切皆插件』的对决,谁是智能体生态的基建赢家

DeepSeek Harness vs Claude 官方插件:『一切皆插件』的对决,谁是智能体生态的基建赢家 【免费下载链接】claude-plugins-official Official, Anthropic-managed directory of high quality Claude Code Plugins. 项目地址: https://gitcode.com/GitHu…

2026/10/10 5:52:43 阅读更多 →
Prometheus Blackbox Exporter Helm Chart 实战指南:安装部署、配置详解与二进制探测模块避坑方案

Prometheus Blackbox Exporter Helm Chart 实战指南:安装部署、配置详解与二进制探测模块避坑方案

【免费下载链接】helm-charts Prometheus community Helm charts 项目地址: https://gitcode.com/gh_mirrors/he/helm-charts 点击查看 免费下载 本指南以 Prometheus Community 官方仓库中的 prometheus-blackbox-exporter Helm Chart(当前版本 11.20.…

2026/10/10 5:52:43 阅读更多 →

最新新闻

nano代替vim:Linux新手与运维的终端编辑新选择

nano代替vim:Linux新手与运维的终端编辑新选择

1. 别再被vim劝退了:聊聊nano代替vim这件事先说说我自己的经历。刚接触Linux那会儿,我听到最多的一句话就是“你必须学会vim,因为你迟早要在终端里改配置”。于是我硬着头皮看了不少教程,记住了i进入插入模式、Esc退出、:wq保存&a…

2026/10/10 6:34:57 阅读更多 →
Flask + SQLAlchemy 实战:从数据模型到查询优化的完整指南

Flask + SQLAlchemy 实战:从数据模型到查询优化的完整指南

简介:面向优达学城全栈开发课程的Fyyur项目源码,主要服务于正在学习Flask与PostgreSQL数据建模的开发者。项目围绕音乐演出场地和艺术家预约网站展开,要求为现有视图与控制器补齐数据模型,实现对场所、艺术家及表演场次的创建、检…

2026/10/10 6:34:57 阅读更多 →
Exadata X9M数据库一体机全解读:从原理到落地的避坑指南

Exadata X9M数据库一体机全解读:从原理到落地的避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 6:34:57 阅读更多 →
Unity反编译实战:用dnSpy分析并修改游戏代码

Unity反编译实战:用dnSpy分析并修改游戏代码

简介:dnSpy是一款功能强大的.NET程序反编译与调试工具,专为Unity开发者、游戏引擎研究者及希望从现有软件中学习代码逻辑的技术人员准备。借助该工具,可直接打开并分析Unity项目生成的C#程序集(dll),还原类…

2026/10/10 6:34:57 阅读更多 →
Fyyur实战:Flask全栈项目从跑通到ORM进阶与避坑指南

Fyyur实战:Flask全栈项目从跑通到ORM进阶与避坑指南

简介:Fyyur-Udacity-Project是Udacity全栈开发课程中的音乐演出场地与艺术家预定网站项目,适合正在学习Flask、PostgreSQL和Web API设计的开发者。该项目已具备视图与控制器,但缺少数据模型和数据库交互能力,学习重点在于补全模型…

2026/10/10 6:34:57 阅读更多 →
Spring Boot+微信小程序高校共享图书借阅系统实战解析

Spring Boot+微信小程序高校共享图书借阅系统实战解析

去年帮某高校的一位学弟做毕设,对方只丢过来一句话:“想做一个高校共享图书借阅的小程序,后端用Spring Boot。”这句话听起来不难,但真正动手才发现,共享借阅这事儿背后藏着一整条业务链:用户身份认证、图书…

2026/10/10 6:33:57 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 1:36:08 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 10:11:06 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 6:17:20 阅读更多 →