Python或Windows环境下如何为SQLite数据库文件设置密码保护
Python 层面实现加密
原生Python自带的sqlite3模块不支持加密功能,可通过以下两种方案实现加密保护:
- 方案1:使用 SQLCipher 加密数据库(工业级常用方案)
SQLCipher是开源的SQLite加密扩展,支持对整个数据库文件做AES-256加密,对应的Python绑定库为pysqlcipher3。
安装命令:pip install pysqlcipher3
使用示例代码:
注意:已有的未加密数据库无法直接开启加密,需要先导出原有数据再导入到新建的加密库中。from pysqlcipher3 import dbapi2 as sqlite3 # 连接数据库(如果是新建库会自动创建加密文件) conn = sqlite3.connect('../sqlitedb/sample_db.db') # 设置加密密码,建议使用复杂度足够的字符串 conn.execute("PRAGMA key='你设置的加密密码'") # 验证密码正确后即可正常执行SQL操作 conn.execute("CREATE TABLE IF NOT EXISTS test (id INT)") conn.commit() conn.close() - 方案2:文件级自定义加解密(适合小体量数据库)
不想引入额外依赖的场景下,可以在关闭数据库连接后,用对称加密算法对整个db文件做加密,需要读写时先解密到临时内存/临时文件,操作完成后再加密回原文件,可通过cryptography库实现该逻辑。
Windows 系统层面安全措施
不需要修改代码的前提下,可通过系统原生功能实现访问限制:
- 方案1:NTFS EFS 文件加密
操作步骤:右键点击sample_db.db文件 → 选择「属性」→ 点击「高级」按钮 → 勾选「加密内容以便保护数据」→ 确认应用更改即可。
特点:仅你当前登录的Windows账户可以访问该文件,其他账户即使拿到文件也无法读取内容。 - 方案2:设置文件访问权限
操作步骤:右键点击db文件 → 选择「属性」→ 切换到「安全」选项卡 → 点击「编辑」按钮 → 删除所有无关的组/用户(比如Everyone、Users等)→ 仅添加你自己的Windows账户,勾选「完全控制」权限 → 保存生效。
特点:可精准控制可访问该文件的账户范围,无权限的用户无法打开、修改、删除该文件。 - 方案3:BitLocker 分区加密
如果数据库存放在非系统盘,可以右键点击对应磁盘分区 → 选择「启用BitLocker」→ 按照向导设置密码和恢复密钥完成加密。后续该分区内所有文件都会被加密,系统启动时需要输入BitLocker密码才能挂载访问分区。
注意事项
- 所有加密方案的密钥/密码请妥善保管,丢失后将无法恢复数据库内的所有数据
- 同时使用代码层面加密和系统层面加密可以提升安全等级,高并发场景下建议提前测试性能损耗是否符合业务要求
内容的提问来源于stack exchange,提问作者shee
相关产品推荐
相关产品推荐

