DuckDB:密钥管理器及其应用
密钥管理器(Secrets Manager)为所有使用密钥的后端提供了统一的用户界面。密钥信息可以被限定范围,因此不同的存储前缀可以有不同的密钥信息,例如允许在单个查询中连接跨组织的数据。密钥也可以持久化,这样就不需要在每次启动DuckDB时都指定它们。
密钥类型
在DuckDB中是密钥分类管理的,它们的类型标识它们用于哪个服务。目前提供的云服务如下:
- AWS S3 (
S3
), through thehttpfs
extension - Azure Blob Storage (
AZURE
), through theazure
extension - Cloudflare R2 (
R2
), through thehttpfs
extension - Google Cloud Storage (
GCS
), through thehttpfs
extension - Hugging Face (
HUGGINGFACE
), through thehttpfs
extension - MySQL (
MYSQL
), through themysql
extension - PostgreSQL (
POSTGRES
), through thepostgres
extension
对于每种类型,都有一个或多个“密钥提供程序”来指定如何创建密钥。secret也可以有一个可选的作用域,它是secret应用的文件路径前缀。在为路径获取密钥时,将密钥范围与路径进行比较,并返回与路径匹配的密钥。在有多个匹配密钥的情况下,选择最长的前缀。
密钥管理
可以使用CREATE SECRET SQL语句创建密钥。密钥可以是暂时的,也可以是持久的。默认情况下使用临时密钥,并且在DuckDB实例的生命周期内存储在内存中,类似于以前的设置工作方式。持久密钥以未加密的二进制格式存储在~/.duckdb/stored_secrets
目录中。在启动DuckDB时,将从该目录读取持久密钥并自动加载。
临时密钥
要创建一个临时的无作用域secret来访问S3,我们现在可以使用以下命令:
CREATE SECRET my_secret (TYPE S3,KEY_ID 'my_secret_key',SECRET 'my_secret_value',REGION 'my_region'
);
注意,我们在这里隐式地使用默认的CONFIG秘密提供程序。
持久密码
为了在DuckDB数据库实例之间持久化秘密,我们现在可以使用CREATE PERSISTENT SECRET命令,例如:
CREATE PERSISTENT SECRET my_persistent_secret (TYPE S3,KEY_ID 'my_secret_key',SECRET 'my_secret_value'
);
默认情况下,这将把秘密(未加密)写入~/.duckdb/stored_secrets
目录中。修改secrets目录,命令如下:
SET secret_directory = 'path/to/my_secrets_dir';
注意,设置home_directory配置选项的值对密钥文件的位置没有影响。
创建同类型多个密钥
如果一个服务类型存在两个密钥,则可以使用作用域来决定应该使用哪一个。例如:
CREATE SECRET secret1 (TYPE S3,KEY_ID 'my_secret_key1',SECRET 'my_secret_value1',SCOPE 's3://my-bucket'
);CREATE SECRET secret2 (TYPE S3,KEY_ID 'my_secret_key2',SECRET 'my_secret_value2',SCOPE 's3://my-other-bucket'
);
现在,如果用户从s3://my-other-bucket/something查询某些内容,则会自动为该请求选择secret secret2。要查看正在使用的是哪个密钥,可以使用which_secret
标量函数,它接受路径和密钥类型作为参数:
FROM which_secret('s3://my-other-bucket/file.parquet', 's3');
查询密钥
可以使用内置的表生成函数列出秘密,例如,通过使用duckdb_secrets()表函数:
FROM duckdb_secrets();
删除密钥
可以使用DROP SECRET语句删除密钥,例如:
DROP PERSISTENT SECRET my_persistent_secret;
密钥应用示例
mysql扩展允许DuckDB直接从运行的mysql实例中读写数据。数据可以直接从底层MySQL数据库查询。数据可以从MySQL表加载到DuckDB表,反之亦然。下面通过mysql扩展介绍如何应用密钥。
安装加载扩展
通过下面命令安装并加载mysql扩展:
INSTALL mysql;
LOAD mysql;
直接附加mysql
为了让DuckDB访问mysql,可以通过attach命令附加mysql数据库:
ATTACH 'host=localhost user=root port=0 database=mysql' AS mysqldb (TYPE MYSQL);
USE mysqldb;
更多连接参数可以参考官网文档,这里直接硬代码编写连接信息。下面通过密钥管理器实现连接。
密钥管理器配置
首先创建MySQL密钥管理器:
CREATE SECRET (TYPE MYSQL,HOST '127.0.0.1',PORT 0,DATABASE mysql,USER 'mysql',PASSWORD ''
);
当调用ATTACH时,将使用来自密钥的信息。我们可以将连接字符串保留为空,以使用存储在密钥管理器中的所有信息。
ATTACH '' AS mysql_db (TYPE MYSQL);
我们可以使用连接字符串来覆盖单个选项。例如,要在仍然使用相同凭据的情况下连接到不同的数据库,我们可以按以下方式仅覆盖数据库名称。
ATTACH 'database=my_other_db' AS mysql_db (TYPE MYSQL);
缺省情况下,创建的密钥是临时的。可以使用CREATE PERSISTENT SECRET命令持久化秘密。持久秘密可以跨会话使用。
多个密钥
命名密钥可以用来管理到多个MySQL数据库实例的连接,可以在创造时给密钥赋予名称。
CREATE SECRET mysql_secret_one (TYPE MYSQL,HOST '127.0.0.1',PORT 0,DATABASE mysql,USER 'mysql',PASSWORD ''
);# 使用Attach命令时显示引用
ATTACH '' AS mysql_db_one (TYPE MYSQL, SECRET mysql_secret_one);
总结
DuckDB 的密码管理器(Secrets Manager)作用是管理诸如数据库连接密码、API 密钥、令牌等敏感信息。它提供了相对安全的方式来存储、访问这些信息,避免在代码或配置文件中以明文形式暴露敏感数据,从而增强了数据安全性。例如,在连接数据库或者调用外部服务时,可以通过这个管理器来安全地获取和使用所需的密钥或密码。
相关文章:
DuckDB:密钥管理器及其应用
密钥管理器(Secrets Manager)为所有使用密钥的后端提供了统一的用户界面。密钥信息可以被限定范围,因此不同的存储前缀可以有不同的密钥信息,例如允许在单个查询中连接跨组织的数据。密钥也可以持久化,这样就不需要在每次启动DuckDB时都指定它…...
每日一学——自动化工具(Ansible)
3.1 Ansible 3.1.1 Playbook编写指南 嘿,小伙伴们!你们知道吗,运维工作其实也可以变得像搭积木一样简单!今天我们要介绍的就是Ansible,一款非常流行的自动化运维工具。通过Ansible,我们可以用Playbook来描…...
typescripts语法笔记
游戏引擎:图形渲染系统,特效系统,物理系统,各个功能集合。 cocoscreator是将cocos2d-x封装成了可视化编辑。面向对象转变成面向组件开发。 ts编程是js编程语言的超集。 基础类型""可以转换成字符串类型,适用…...
TypyScript从入门到精通
TypyScript从入门到精通 TypyScript 是什么?增加了什么环境搭建二、为何需要 TypeScript三、编译 TypeScript四、类型声明五、类型推断基本类型六、类型总览JavaScript 中的数据类型TypeScript 中的数据类型1. 上述所有 JavaScript 类型2. 六个新类型:3.…...
vscode代码AI插件Continue 安装与使用
“Continue” 是一款强大的插件,它主要用于在开发过程中提供智能的代码延续功能。例如,当你在编写代码并且需要进行下一步操作或者完成一个代码块时,它能够根据代码的上下文、语法规则以及相关的库和框架知识,为你提供可能的代码续…...
STM32-笔记20-测量按键按下时间
1、按键按下的时间-思路 我们先检测下降沿信号,检测到以后,在回调函数里切换成检测上升沿信号,当两个信号都检测到的时候,这段时间就是按键按下的时间,如图所示:>N*(ARR1)CCRx的值 N是在这段时间内&…...
继承与多态 - 继承机制、虚函数、纯虚函数
引言 C 是一种支持面向对象编程(OOP)的编程语言,继承和多态是 OOP 的两个核心概念。通过继承,我们可以创建新的类,这些新类可以重用现有类的代码,并且可以根据需要进行扩展或修改。多态则允许我们编写更加…...
微信小程序:正确输出<小于,大于>符号
错误写法 1、如果直接输入<符号会直接报错,>能正常使用,如图标红的是错误写法 2、输入html的<>的写法,会原样输入符号 解决方法 采用变量的方式输出 1、js写入变量 2、wxml直接写...
uni-app tab 双击事件监听
1、data中定义属性,用于临时记录点击次数 tabClick: {touchNum: 0 },2、添加页面事件监听方法 onTabItemTap(e) {this.tabClick.touchNumsetTimeout(()>{if(this.tabClick.touchNum > 2){// 双击执行代码区}this.tabClick.touchNum 0}, 250) },个人博客&am…...
GIT 企业级开发学习 1_基本操作
本节主要命令: git init ls 不能列出 .git ls -a 列出 .git 创建本地仓库 1. 初始化 Git 仓库 git init • 初始化一个新的 Git 仓库,在当前目录下生成一个 .git 隐藏文件夹,用于存储版本控制信息。 2. 查看隐藏文件 ls -a • 使用 ls …...
Computed在Vue2、Vue3写法的不同
在 Vue 2 和 Vue 3 中,computed 的写法有一些区别,特别是在 Vue 3 中新增了组合式 API 和 setup 语法糖。以下是不同写法的详细比较: 1. Vue 2 选项式 API 写法 在 Vue 2 中,computed 是一个选项,直接在 computed 对…...
Hive集群安装部署
上传安装包并解压 cd /ddhome/tools tar -zxvf apache-hive-3.1.2-bin.tar.gz -C /ddhome/bin/ cd /ddhome/bin/ mv apache-hive-3.1.2-bin hive注意:如果Hive要使用Spark计算引擎,需要重新编译Hive, 这里已经编译完毕 修改配置文件 cd …...
卸载干净 IDEA(图文讲解)
目录 1、卸载 IDEA 程序 2、注册表清理 3、残留清理 1、卸载 IDEA 程序 点击屏幕左下角 Windows 图标 -> 设置-控制面板->intellij idea 勾选第一栏 Delete IntelliJ IDEA 2022.2 caches and local history,表示同时删除 IDEA 本地缓存以及历史。 Delete I…...
Gitea代码仓服务搭建
特点与优势 轻量级:Gitea是一个轻量级的Git服务,提供了快速、稳定的代码托管和协作开发环境。它资源占用低,适合在资源受限的环境中运行。易于安装和部署:Gitea提供了简单易用的安装和部署方式,支持多种安装方式,包括二进制文件、Docker容器等,并提供了详细的文档和配置…...
什么情况会导致JVM退出?
大家好,我是锋哥。今天分享关于【什么情况会导致JVM退出?】面试题。希望对大家有帮助; 什么情况会导致JVM退出? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 JVM(Java Virtual Machine,Java虚…...
docker 安装influxdb
docker pull influxdb mkdir -p /root/influxdb/data docker run -d --name influxdb -p 8086:8086 -v /root/influxdb/data:/var/lib/influxdb influxdb:latest#浏览器登录:http://192.168.31.135:8086,首次登录设置用户名密码:admin/admin1…...
TLS: WebRTC中ThreadManager的线程局部存储
1. 什么是线程局部存储: 线程局部存储(TLS,Thread-Local Storage): 线程局部存储(TLS)允许每个线程保存一份独立的数据副本,避免多个线程共享数据导致的竞争问题。 每个线程可以根…...
[Qt] 万字详解 | 常用控件 | Button | Label | LCD | ProgressBar
目录 按钮类控件 1、Push Button 按钮 2、Radio Buttion 单选 click、press、release、toggled 的区别 3、Check Box 复选 4、Tool Button 显示类控件 1、Label 2、LCD Number 3、ProgressBar 4、Calendar Widget 按钮类控件 1、Push Button 按钮 概述:…...
【数据仓库】hadoop3.3.6 安装配置
文章目录 概述下载解压安装伪分布式模式配置hdfs配置hadoop-env.shssh免密登录模式设置初始化HDFS启动hdfs配置yarn启动yarn 概述 该文档是基于hadoop3.2.2版本升级到hadoop3.3.6版本,所以有些配置,是可以不用做的,下面仅记录新增操作&#…...
ffmpeg八大开发库
FFmpeg八大库是指FFmpeg项目中最重要的八个库,它们各自承担不同的功能,共同构成了FFmpeg的强大功能。以下是这八大库的详细介绍: libavcodec:负责音频和视频的编解码。它支持多种编解码器,如H.264、AAC、MP3、…...
Uniapp中使用`wxml-to-canvas`开发DOM生成图片功能
Uniapp中使用wxml-to-canvas开发DOM生成图片功能 在移动端开发中,生成图片是一个常见需求,例如用于分享海报、生成动态二维码等。在Uniapp框架中,我们可以通过wxml-to-canvas插件轻松实现将DOM转化为图片的功能。本文将详细介绍如何在Uniapp…...
【09】深入解析 Three.js 官网示例:下雪粒子特效与场景渲染的实现(webgpu_compute_particles_snow.html)
引言 Three.js 是一个强大的 JavaScript 库,用于在网页上创建和渲染 3D 场景。本文将深入分析一段 Three.js 官网示例代码,详细解释其实现思路和主要功能代码,帮助读者更好地理解和掌握 Three.js 的应用。官网代码地址:https://g…...
电子价签会是零售界的下一个主流?【新立电子】
电子价签,作为一种能够替代传统纸质标签的数字显示屏,已经在零售行业中展现出其巨大的潜力。它具有实时更新、集中管理、高效节能的特点,实现价格的实时更新,大大减少更新价格的工作量和时间。为消费者带来更加便捷、准确的购物体…...
uniapp——App下载文件,保存、打开文件(二)
uniapp如何下载文件、保存、打开文件 时光荏苒,2024即将过去! 迈向2025,祝大家新的一年工作顺利、万事如意,少一点BUG,涨一点工资…↖(ω)↗ 文章目录 uniapp如何下载文件、保存、打开文件下载文件保存并打开文件处理 …...
如何轻松关闭 iPhone 上的 HEIC [HEIC 图像技巧]
您是否正在为关闭 iPhone 上的 HEIC 而烦恼?你不是一个人; Apple 的首选图像文件格式仍可能存在一些兼容性问题。当您与某人共享照片或尝试在Windows计算机上打开图像时,就会出现此问题。幸运的是,Apple 使关闭 HEIC iPhone 变得更加容易。 …...
库伦值自动化功耗测试工具
1. 功能介绍 PlatformPower工具可以自动化测试不同场景的功耗电流,并可导出为excel文件便于测试结果分析查看。测试同时便于后续根据需求拓展其他自动化测试用例。 主要原理:基于文件节点 coulomb_count 实现,计算公式:电流&…...
[paddle] 非线性拟合问题的训练
利用paddlepaddle建立神经网络,模拟有限个数据的非线性拟合 本文仍然考虑 f ( x ) sin ( x ) x f(x)\frac{\sin(x)}{x} f(x)xsin(x) 函数在区间 [-10,10] 上固定数据的拟合。 import paddle import paddle.nn as nn import numpy as np import matplotlib.…...
Vue2: table加载树形数据的踩坑记录
table中需要加载树形数据,如图: 官网给了两个例子,且每个例子中的tree-props都是这么写的: :tree-props="{children: children, hasChildren: hasChildren}" 给我一种错觉,以为数据结构中要同时指定children和hasChildren字段,然而,在非懒加载模式下,数据结…...
全国计算机设计大赛大数据主题赛(和鲸赛道)经验分享
全国计算机设计大赛大数据主题赛(和鲸赛道)经验分享 这是“和鲸杯”辽宁省普通高等学校本科大学生计算机设计竞赛启动会汇报—大数据主题赛的文档总结。想要参加2025年此比赛的可以借鉴。 一、关于我 人工智能专业 计赛相关奖项: 2022年计…...
C# 设计模式(行为型模式):责任链模式
C# 设计模式(行为型模式):责任链模式 责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,用于让多个对象有机会处理同一个请求,避免请求发送者与接收者之间的耦合。它通过将请…...
人工智能之机器学习算法
所有的机器学习算法都是要优化的,优化的必要条件是确定优化的目标函数(损失函数),目标函数是根据实际问题(数据)转成的数学公式。 一.线性回归原理推导 (1)回归问题概述 在机器学习的有监督算法中,分类与回归二种情…...
17爬虫:关于DrissionPage相关内容的学习01
概述 前面我们已经大致了解了selenium的用法,DerssionPage同selenium一样,也是一个基于Python的网页自动化工具。 DrissionPage既可以实现网页的自动化操作,也能够实现收发数据包,也可以把两者的功能合二为一。 DressionPage的…...
Ubuntu如何安装jdk并切换到不同的jdk版本
参考:https://www.cnblogs.com/Jakson/articles/4615768.html 摘要 :因为ubuntu 会自带open-jdk预装在系统内,当我们需要在 ubuntu下 安装jdk 的时候 ,发现 即使配置好环境变量后 输入 java -version 版本还是依然没有发生变化,我们需要以下2个步骤切换/usr/local/…...
Python基础语法(上)
目录 一、print函数及常量表达式 1.print函数 2.常量表达式 二、变量 1.定义变量的规则 2.python的动态类型特性 3.字符串 三、注释 四、input函数 1.input函数 2.变量类型转换 五、运算符 1.算数运算符 2.关系运算符 (1)整形的比较 &am…...
k8s系列--docker拉取镜像导入k8s的containerd中
# 确认一下当前集群中正在运行的 Pod 和命名空间 kubectl get pods -A# 示例一:拉取并导入 CoreDNS 镜像 docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.11.1 docker save registry.cn-hangzhou.aliyuncs.com/google_containers/cor…...
深入理解 Android 中的 ComponentInfo
深入理解 Android 中的 ComponentInfo 在 Android 开发中,ComponentInfo 是一个非常重要的类,它用于描述应用程序中的组件信息,包括 Activity、Service、BroadcastReceiver 和 ContentProvider。理解 ComponentInfo 的结构和使用方式&#x…...
阿里云 ECS 服务器绑定多个公网IP
阿里云 ECS 服务器绑定多个公网IP 一、弹性公网IP绑定ECS服务器 单台ECS一般只能直接绑定一个弹性公网IP,但是可以绑定多张弹性网卡,如果把弹性公网IP绑定到弹性网卡上,那么单台ECS就能间接绑定多个弹性公网IP。但有的服务器系统镜像可能不…...
模块化通讯管理机在物联网系统中的应用
安科瑞刘鸿鹏 摘要 随着能源结构转型和智能化电网的推进,电力物联网逐渐成为智能电网的重要组成部分。本文以安科瑞ANet系列智能通信管理机为例,探讨其在电力物联网中的应用,包括数据采集、规约转换、边缘计算、远程控制等技术实践&#…...
Kafka Offset explorer使用
Kafka集群配置好以后以后运维这边先用工具测试一下,便于rd展开后续的工作,本地调试时一般使用Offset explorer工具进行连接 使用SASL(Simple Authentication and Security Layer)验证方式 使用SCRAM-SHA-256(Salted Challenge Response Authentication…...
小程序学习07—— uniapp组件通信props和$emit和插槽语法
目录 一 父组件向子组件传递消息 1.1 props (a)传递静态或动态的 Prop (b)单向数据流 二 子组件通知父组件 2.1 $emit (a)定义自定义事件 (b)绑定自定义事件 三 插槽语法…...
行为模式1.模板方法模式
行为型模式 模板方法模式(Template Method Pattern)命令模式(Command Pattern)迭代器模式(Iterator Pattern)观察者模式(Observer Pattern)中介者模式(Mediator Pattern…...
【模型】Qwen2-VL 服务端UI
1. 前言 最近在测试VLM模型,发现官方的网页demo,代码中视频与图片分辨率可能由于高并发设置的很小,导致达不到预期效果,于是自己研究了一下,搞了一个简单的前端部署,自己在服务器部署了下UI界面࿰…...
ImageNet 2.0?自动驾驶数据集迎来自动标注新时代
引言: 3DGS因其渲染速度快和高质量的新视角合成而备受关注。一些研究人员尝试将3DGS应用于驾驶场景的重建。然而,这些方法通常依赖于多种数据类型,如深度图、3D框和移动物体的轨迹。此外,合成图像缺乏标注也限制了其在下游任务中的…...
京东一面:MySQL 主备延迟有哪些坑?主备切换策略
作为一名开发同学,大家对 MySQL 一定不陌生,像常见的 事务特性、隔离级别 、索引等也都是老生常谈。 今天,我们就来聊个深度话题,关于 MySQL 的 高可用 一、什么是高可用? 维基百科定义: 高可用性&#x…...
Linux(Ubuntu24.04)安装Eigen3库
本次安装Eigen3是在WSL2的Ubuntu24.04环境下进行。 Eigen3是一个C模板库,用于线性代数、矩阵运算和数值计算。它提供了一组高性能的矩阵和向量操作,以及常用的线性代数算法,如矩阵分解、特征值求解和最小二乘解等。 1、安装Eigen3 有两种安…...
ABP框架8——仓储的作用及其基础Demo
一、使用仓储的好处 1.提高CRUD接口复用性2.解耦业务逻辑(BLL)和增删改查(CRUD),换ORM特别方便,不需要改应用层,直接改仓储层3.做复杂查询4.事务支持 二、Demo public class BookRepository …...
【Multisim用74ls92和90做六十进制】2022-6-12
缘由Multisim如何用74ls92和90做六十进制-其他-CSDN问答 74LS92、74LS90参考...
利用KPaaS平台提升企业审批流程的透明度
企业的审批流程不仅影响决策效率,还直接关联到组织的透明度和运营效果。传统的审批流程通常由多个环节和系统构成,每一个环节都可能存在信息不对称的现象。例如,某一审批节点的负责人可能并不清楚当前的审批状态,而在其他环节&…...
Python 数据可视化的完整指南
目录 一、为什么选择 Python 进行数据可视化? 二、常用 Python 可视化库及其特点 三、常用图表类型及其代码示例 折线图:用于展示数据随时间或其他连续变量的变化趋势。 柱状图:用于比较不同类别的数据大小。 散点图:用于展示两个变量之间的关系,并发现数据中的模式…...
ZYNQ初识7(zynq_7010)RAM_IP核
学习汇总正点原子bi站教学视频。但由于目前的学习板PL端缺乏时钟晶振,所以需要从PS端调用时钟供给PL端使用,也就造成顶层文件的设置出现一些问题,在IP核创建调用和例化过程中一些功能会受到限制,所以以下仅作汇总参考。 zynq_7000…...