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
    • 最新
    • 标签
主页 / user-11240

Chris Travers's questions

Martin Hope
Chris Travers
Asked: 2013-02-23 20:39:32 +0800 CST

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

  • 7

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

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

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

postgresql encryption
  • 1 个回答
  • 4573 Views
Martin Hope
Chris Travers
Asked: 2013-01-31 06:25:39 +0800 CST

外键或不外键..... (inet -> cidr)

  • 5

下面是我正在处理的一个项目的一个非常精简的版本。

CREATE TABLE cidr_block (
    id serial not null unique,
    block_def cidr primary key,
    dhcp_server_id int not null references computer_system (id),
    ...
);
CREATE TABLE ip_addr (
    computer_id int not null references computer_system (id),
    mac_addr macaddr not null unique,
    ip_addr inet not null unique,
);

这是一个网络配置数据库。现在,预计大多数(但不是全部)ip_addr.ip_addr 记录将位于 cidr_block.block_def 块中。其他可能不是外部链接到客户位置的 vpn 接口。没有简单的、声明性的方法来确保两个表之间适用行的 fkey。所以我想知道:

  1. 在适当的地方使用触发器创建 fkey 链接是否更可取?

  2. 仅仅加入预期的地方就足够了吗?如果一台计算机被赋予了一个错误的 IP 地址,它就不会从 dhcp 服务器获得一个,我们很快就会知道这一点。(写入触发相关 dhcp 服务器更新的触发通知)

  3. 还有另一种更好的方法吗?

database-design postgresql
  • 1 个回答
  • 221 Views
Martin Hope
Chris Travers
Asked: 2012-10-04 05:08:02 +0800 CST

PostgreSQL 上金融应用的身份验证方法选择

  • 18

首先是一些背景。

LedgerSMB 项目是一个在 PostgreSQL 上运行的开源财务会计软件项目。我们在用户定义的函数中实现了大量的业务逻辑,作为程序对象方法和数据库行为之间的主要映射工具。目前我们使用数据库用户作为身份验证用户,部分是出于选择(这允许集中的安全逻辑,以便可以编写其他工具并重用授予用户的权限),部分是出于必要(在我们从 SQL-Ledger 分叉后,有在该代码库上改进安全性的选择并不多)。

这使我们能够访问 PostgreSQL 可以访问的合理数量的单点登录选项,从 LDAP 到 Kerberos 5。我们甚至可以在涉及密码的地方使用 PAM。它还允许我们在与其他应用程序集成或允许其他客户端接口时重用权限。对于财务会计应用程序来说,这似乎是一场净赢。

有明显的成本。对于 Web 应用程序,我们非常受限于可以支持的 http auth 类型。例如,DIGEST 完全出局了。BASIC 工作,我们可以很容易地实现 KRB5(我计划支持它并为 1.4 开箱即用)。非常强大的身份验证措施无法直接对此进行适当管理,尽管我们可能会在必要时将它们填充进去(例如 BASIC + 客户端 SSL 证书,其 cn 与用户名和特定的根 ca 匹配)。

与此同时,我们遇到了相当多的批评,主要来自开发人群,偶尔来自 dba,他们告诉我应用程序应该是安全屏障,而不是数据库。我的观点仍然是较小的安全边界通常更好,业务逻辑和安全逻辑的重用是一起使用的,并且我觉得重用业务逻辑而不在同一级别重用安全逻辑是危险的的程序。

我在这里错过了任何主要的权衡吗?有没有我没有考虑的问题?

database-design postgresql
  • 1 个回答
  • 3575 Views
Martin Hope
Chris Travers
Asked: 2012-08-31 17:27:40 +0800 CST

子集聚合的建模约束?

  • 14

我正在使用 PostgreSQL,但我认为大多数高端数据库必须具有一些类似的功能,而且,它们的解决方案可能会激发我的解决方案,所以不要考虑这个 PostgreSQL 特定的。

我知道我不是第一个尝试解决这个问题的人,所以我认为值得在这里提问,但我正在尝试评估建模会计数据的成本,以使每笔交易都能从根本上平衡。会计数据是仅附加的。这里的整体约束(用伪代码编写)可能大致如下:

CREATE TABLE journal_entry (
    id bigserial not null unique, --artificial candidate key
    journal_type_id int references  journal_type(id),
    reference text, -- source document identifier, unique per journal
    date_posted date not null,
    PRIMARY KEY (journal_type_id, reference)
);

CREATE TABLE journal_line (
    entry_id bigint references journal_entry(id),
    account_id int not null references account(id),
    amount numeric not null,
    line_id bigserial not null unique,
    CHECK ((sum(amount) over (partition by entry_id) = 0) -- this won't work
);

显然,这样的检查约束永远不会起作用。它按行运行,并可能检查整个数据库。所以它总是会失败并且做起来很慢。

所以我的问题是模拟这个约束的最佳方法是什么?到目前为止,我基本上看过两个想法。想知道这些是否是唯一的,或者是否有人有更好的方法(除了将其留给应用程序级别或存储过程)。

  1. 我可以从会计界关于原始分录簿和最终分录簿(普通日记帐与总帐)之间区别的概念中借一页。在这方面,我可以将其建模为附加到日记条目的日记行数组,对数组强制执行约束(在 PostgreSQL 术语中,从 unnest(je.line_items) 中选择 sum(amount) = 0。触发器可以扩展和将这些保存到行项目表中,可以更轻松地执行单个列约束,并且索引等可能更有用。这是我倾向于的方向。
  2. 我可以尝试编写一个约束触发器,该触发器将强制每个事务执行此操作,并认为一系列 0 的总和将始终为 0。

我正在权衡这些与当前在存储过程中执行逻辑的方法。复杂性成本正在与约束的数学证明优于单元测试的想法进行权衡。上面 #1 的主要缺点是,作为元组的类型是 PostgreSQL 中的一个领域之一,在该领域中,人们会遇到不一致的行为和定期更改假设,因此我什至希望该领域的行为可能会随着时间而改变。设计未来的安全版本并不容易。

是否有其他方法可以解决这个问题,将每个表中的记录扩展到数百万条?我错过了什么吗?有没有我错过的权衡?

为了回应 Craig 关于版本的以下观点,至少必须在 PostgreSQL 9.2 及更高版本上运行(可能是 9.1 及更高版本,但可能我们可以直接使用 9.2)。

database-design postgresql
  • 2 个回答
  • 2555 Views

Sidebar

Stats

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

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

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

    • 3 个回答
  • Marko Smith

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

    • 3 个回答
  • Marko Smith

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

    • 4 个回答
  • 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
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • 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
    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