AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 35296
Accepted
Chris Travers
Chris Travers
Asked: 2013-02-23 20:39:32 +0800 CST2013-02-23 20:39:32 +0800 CST 2013-02-23 20:39:32 +0800 CST

使用 pg_crypto 进行数据库加密和密钥管理

  • 772

我正在研究必须以可逆加密格式将虚拟机的 root 密码存储在数据库中的可能性。原因是机器有时需要本地登录,而我们不鼓励它们,我们需要能够查找 root 密码。当然,访问权限将严格限制为少数管理员。这些将不会被使用,除非虚拟机无法通过网络访问。在这方面同步用户和密码也存在类似的问题,即如果网络不通,sudoer 如何使用保证的最新密码登录?

计划轮换密钥的最佳方法是什么?我应该只使用每个管理员都有的密码吗?这在我心中提出了一些危险信号。有没有办法安全地管理密钥,以便管理员可以设置自己的密码?也许使用公钥加密并使用每个管理员的公钥加密对称密钥?

在这里,我只是在寻找有关加密敏感数据的密钥管理的解决方案的概要。如果我无法弄清楚如何从该级别实施,我可以提出更多问题。

postgresql encryption
  • 1 1 个回答
  • 4573 Views

1 个回答

  • Voted
  1. Best Answer
    Craig Ringer
    2013-02-24T22:50:47+08:002013-02-24T22:50:47+08:00

    请注意,我不是加密系统或安全专家。这就是我所看到的并且是有道理的,但我不能声称它没有超出我在下面概述的安全问题。与往常一样,如果重要,请进行适当的安全审核。

    在下文中,“凭据”可以指 ssh 密钥、密码或任何需要存储的内容。

    典型的模型是使用几个级别的加密。

    • 对于每个用户,生成并存储一个公钥/私钥对

    • 将用户密钥的公共部分明文存储在用户记录中

    • 将加密到用户密码短语的用户密钥的私有部分存储在用户记录中。

    • 将每个凭证加密为该凭证唯一的对称密钥

    • 将每个凭证的对称密钥加密为应该有权访问该密钥的每个用户的公钥,并将生成的加密材料存储在user_credentials映射表中。

    本质上,您维护一个密钥环,就像 gpg 密钥环,其中公共部分是明文,而私有部分被加密为密码。您应该确保每个用户选择的密码是强大的。

    现在您可以为每个加密凭证生成一个对称密钥。将此密钥加密为每个用户的公钥,并将其存储在用户凭据连接表中。切勿以未加密的方式存储此对称密钥,并为每个凭证使用不同的对称密钥。

    你会遇到这样的事情

    [user]
    user_id
    username
    login_password_salt
    login_password_hash
    public_key_text
    private_key_sym_encrypted_to_passphrase
    
    [user_credential]
    user_id
    credential_id
    credential_key_encrypted_to_user_public_key
    
    [credential]
    credential_id
    credential_data_encrypted_to_credential_key
    

    这样做有很多好处:

    • 如果您的数据库转储被泄露,您的凭据仍然是安全的,或者与您的密码和密钥强度一样安全。

    • 由于每个凭证都有不同的对称密钥,因此您可以控制哪些用户可以访问哪些凭证

    • 任何有权访问给定凭据的用户都可以授予其他用户访问权限;他们只是使用他们的密钥对其进行解密并将其加密为其他用户的公钥。您无需召集所有人一起添加凭据或添加新用户。

    • 因为您将每个凭证加密为对称密钥,然后将该密钥加密为用户密钥,所以您可以更改存储的凭证,而无需将其重新加密为每个用户的密钥。它只是使更新存储的凭据更加方便。

    但是,如果数据库主机受到威胁,攻击者可以在任何给定用户登录后轻松提取该用户可以访问的密码。他们通过包装函数或启用详细日志记录和搜索日志来捕获用户的密码。然后他们可以在被盗转储中或从实时数据库中解密密码。受感染的数据库主机在用户登录使用它之前是没有危险的,但随后一切都将丢失。

    这意味着数据库的主机是安全关键的。泄漏转储对安全性来说并不是致命的,但是能够修改数据库上运行的代码的人是致命的安全漏洞。

    除了在需要时使用您的凭证管理数据库提取 ssh 密钥材料、密码等,您还可以将其用作身份验证代理,它可以针对服务进行身份验证,而无需您的用户能够学习凭证用过的。例如,您的应用程序可能会解密 ssh 密钥,将其添加到 ssh 代理,然后使用解密的密钥通过代理登录服务器,而用户永远无法直接查看和访问密钥。

    • 5

相关问题

  • 我可以在使用数据库后激活 PITR 吗?

  • 运行时间偏移延迟复制的最佳实践

  • 存储过程可以防止 SQL 注入吗?

  • PostgreSQL 中 UniProt 的生物序列

  • PostgreSQL 9.0 Replication 和 Slony-I 有什么区别?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    授予用户对所有表的访问权限

    • 5 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve