如何结合Dotenvx保护DuckDB的Secrets
DuckDB 1.4版本增加了数据库加密功能, 截止目前为止,DuckDB涉及到Secrets的主要包括如下:
- 原生Secret:如S3和兼容存储服务的的AK/SK,http资源访问的token,huggingface和数据库访问的账号密码等
- DuckLake:主要是MySQL/PostgreSQL元信息数据库的账号密码,S3服务的AK/SK等,这个是DuckLake的核心配置
- 加密数据库:是对整个数据库的加密,使用AES 256进行加密,加密密码由用户提供
DuckDB虽然提供了Secret的管理能力,但是并没有达到安全的需求,而且用户使用体验也有一些问题,如:
- Temporary Secrets:临时Secret,保存在内存中,进程退出后就会丢失,所以要每次都要创建,如S3的AK/SK,我都是每次创建,反复copy创建Secret的SQL。
- Persistent Secrets: 持久化Secret,默认以未加密的方式保存在
$HOME/.duckdb/stored_secrets目录下
鉴于DuckDB的Secret管理的加密特性缺失,所以也有不少人建议使用KMS来进行加密,而且好像也没有第三方的扩展来支持这一点。
此外如果你稍不留意的话,你创建的Secret的SQL语句就会被记录到$HOME/.duckdb_history文件中,这个文件也是明文保存的。