DuckDB:密钥管理器及其应用

news2025/1/6 19:21:37

密钥管理器(Secrets Manager)为所有使用密钥的后端提供了统一的用户界面。密钥信息可以被限定范围,因此不同的存储前缀可以有不同的密钥信息,例如允许在单个查询中连接跨组织的数据。密钥也可以持久化,这样就不需要在每次启动DuckDB时都指定它们。
在这里插入图片描述

密钥类型

在DuckDB中是密钥分类管理的,它们的类型标识它们用于哪个服务。目前提供的云服务如下:

  • AWS S3 (S3), through the httpfs extension
  • Azure Blob Storage (AZURE), through the azure extension
  • Cloudflare R2 (R2), through the httpfs extension
  • Google Cloud Storage (GCS), through the httpfs extension
  • Hugging Face (HUGGINGFACE), through the httpfs extension
  • MySQL (MYSQL), through the mysql extension
  • PostgreSQL (POSTGRES), through the postgres 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 密钥、令牌等敏感信息。它提供了相对安全的方式来存储、访问这些信息,避免在代码或配置文件中以明文形式暴露敏感数据,从而增强了数据安全性。例如,在连接数据库或者调用外部服务时,可以通过这个管理器来安全地获取和使用所需的密钥或密码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2271104.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

告别Kibana:Elasticsearch 桌面客户端的新变革

告别Kibana:Elasticsearch 桌面客户端的新变革 在大数据处理与分析领域,Elasticsearch 及其相关技术的应用日益广泛。长期以来,Kibana 在数据可视化与查询管理方面占据重要地位,但随着技术的不断发展,用户对于更高效、…

模块化通讯管理机在物联网系统中的应用

安科瑞刘鸿鹏 摘要 随着能源结构转型和智能化电网的推进,电力物联网逐渐成为智能电网的重要组成部分。本文以安科瑞ANet系列智能通信管理机为例,探讨其在电力物联网中的应用,包括数据采集、规约转换、边缘计算、远程控制等技术实践&#…

AAAI 2025论文分享┆一种接近全监督的无训练文档信息抽取方法:SAIL(文中附代码链接)

本推文详细介绍了一篇上海交通大学乐心怡老师课题组被人工智能顶级会议AAAI 2025录用的的最新论文《SAIL: Sample-Centric In-Context Learning for Document Information Extraction》。论文的第一作者为张金钰。该论文提出了一种无需训练的、以样本为中心的、基于上下文学习的…

SAP物料主数据界面增加客制化字段、客制化页签的方式

文章目录 前言一、不增加页签,只增加客制化字段二、增加物料主数据页签 前言 【SAP系统MM模块研究】 #SAP #MM #物料 #客制化 #物料主数据 项目上难免会遇到客户要在物料主数据的界面上,增加新字段的需求。 实现方式有: (1&…

ROS2软件架构全面解析-学习如何设计通信中间件框架

前言 ROS(Robot Operating System) 2 是一个用于开发机器人应用的软件平台,也称为机器人软件开发工具包 (SDK)。 ROS2是ROS1的迭代升级版本 ,最主要的升级点是引入DDS(Data Distribution Service)为基础的…

接口自动化测试流程、工具及其实践

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 一、接口自动化测试简介 接口自动化测试是指通过编写脚本或使用自动化工具,对软件系统的接口进行测试的过程。接口测试是软件测试中的一种重要测试类…

香橙派5plus单独编译并安装linux内核无法启动的原因分析与解决记录

1 说明 我依照官方手册编译单独编译linux内核,安装后重启出现内核启动失败的问题,编译和安装步骤如下:# 1. 克隆源码 git clone --depth1 -b orange-pi-6.1-rk35xx https://github.com/orangepi-xunlong/linux-orangepi# 2 配置源码 make rockchip_linu…

数据库知识汇总1

一. 数据库系统概述 信息需要媒体(文本、图像视频等)表现出来才能被人类所获取,媒体可以转换成比特或者符号,这些称为数据; 数据/信息的特点:爆炸式增长、无限复制、派生; 数据库是指长期长期…

Win32汇编学习笔记03.RadAsm和补丁

Win32汇编学习笔记03.RadAsm和补丁-C/C基础-断点社区-专业的老牌游戏安全技术交流社区 - BpSend.net 扫雷游戏啊下补丁 在扫雷游戏中,点关闭弹出一个确认框,确认之后再关闭,取消就不关闭 首先第一步就是确认关闭按钮响应的位置,一般都是 WM_CLOSE 的消息 ,消息响应一般都在过…

OSPF特殊区域(open shortest path first LSA Type7)

一、区域介绍 1、Stub区域 Stub区域是一种可选的配置属性。通常来说,Stub区域位于自治系统的边界,例如,只有一 个ABR的非骨干区域。在这些区域中,设备的路由表规模以及路由信息传递的数量都会大量减少。 kill 4 5类type 传递1 …

论文解读之Generative Dense Retrieval: Memory Can Be a Burden

本次论文解读,博主带来生成式稠密检索:记忆可能成为一种负担的论文分享 一、简介 生成式检索根据给定的查询,自回归地检索相关的文档标识符,在小规模的文档库中表现不错,通过使用模型参数记忆文档库,生成…

vue,使用unplugin-auto-import避免反复import,按需自动引入

项目库:https://github.com/unplugin/unplugin-auto-import 参考: https://juejin.cn/post/7012446423367024676 https://cloud.tencent.com/developer/article/2236166 背景: vue3项目中,基本所有页面都会引入vue3框架的api&…

[深度学习] 大模型学习1-大语言模型基础知识

大语言模型(Large Language Model,LLM)是一类基于Transformer架构的深度学习模型,主要用于处理与自然语言相关的各种任务。简单来说,当用户输入文本时,模型会生成相应的回复或结果。它能够完成许多任务&…

OCR图片中文字识别(Tess4j)

文章目录 Tess4J下载 tessdataJava 使用Tess4j 的 demo Tess4J Tess4J 是 Tesseract OCR 引擎的 Java 封装库,它让 Java 项目更轻松地实现 OCR(光学字符识别)功能。 下载 tessdata 下载地址:https://github.com/tesseract-ocr/…

Vue2/Vue3使用DataV

Vue2 注意vue2与3安装DataV命令命令是不同的Vue3 DataV - Vue3 官网地址 注意vue2与3安装DataV命令命令是不同的 vue3vite 与 Vue3webpack 对应安装也不同vue3vite npm install kjgl77/datav-vue3全局引入 // main.ts中全局引入 import { createApp } from vue import Da…

【JVM】总结篇-字节码篇

字节码篇 Java虚拟机的生命周期 JVM的组成 Java虚拟机的体系结构 什么是Java虚拟机 虚拟机:指以软件的方式模拟具有完整硬件系统功能、运行在一个完全隔离环境中的完整计算机系统 ,是物理机的软件实现。常用的虚拟机有VMWare,Visual Box&…

国内Ubuntu环境Docker部署Stable Diffusion入坑记录

国内Ubuntu环境Docker部署Stable Diffusion入坑记录 本文旨在记录使用dockerpython进行部署 stable-diffusion-webui 项目时遇到的一些问题,以及解决方案,原项目地址: https://github.com/AUTOMATIC1111/stable-diffusion-webui 问题一览: …

音频进阶学习九——离散时间傅里叶变换DTFT

文章目录 前言一、DTFT的解释1.DTFT公式2.DTFT右边释义1) 复指数 e − j ω n e^{-j\omega n} e−jωn2)序列与复指数相乘 x [ n ] ∗ e − j ω n x[n]*e^{-j\omega n} x[n]∗e−jωn复指数序列复数的共轭正交正交集 3)复指数序列求和 3.DTF…

【Leecode】Leecode刷题之路第99天之恢复二叉搜索树

题目出处 99-恢复二叉搜索树-题目出处 题目描述 个人解法 思路: todo代码示例:(Java) todo复杂度分析 todo官方解法 99-恢复二叉搜索树-官方解法 方法1:显式中序遍历 思路: 代码示例:&…

利用AI优化SEO提升关键词排名的有效策略

内容概要 随着数字化时代的到来,搜索引擎优化(SEO)在各类企业的在线营销战略中占据了越来越重要的位置。而人工智能(AI)技术的迅速发展为SEO带来了新的机遇和挑战。通过智能化的数据分析和智能内容生成,企…