【问题标题】:Get ID for Postgres Server Installation获取 Postgres 服务器安装的 ID
【发布时间】:2017-10-16 08:18:38
【问题描述】:

我们希望创建一个许可系统,其中连接到 Postgres 服务器的多个用户共享相同的密钥。

这意味着许可证密钥必须以某种方式包含为哪个服务器创建它的信息,因此该密钥将无法在第二台服务器和客户端上工作。

所以我正在寻找一个尽可能唯一的 ID。到目前为止运气不佳。

SELECT version();

返回如下字符串:

PostgreSQL 9.3.3 on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-54), 64-bit

对于每个 Postgres 安装,这可能有点不同,但这还不够好(尤其是因为我们希望将 Postgres 与我们的应用程序捆绑在一起)。

是否有任何我可以访问的信息更加多样化,比如安装时间等?

【问题讨论】:

  • pg_controldata 的输出呢?我认为“数据库系统标识符”非常独特
  • @a_horse_with_no_name 这是否意味着您在重大数据库升级后失去了许可证?
  • 注意pg_controldata是一个shell命令; PostgreSQL 不会在 SQL 级别公开 sysid 或其他控制/检查点数据。

标签: postgresql


【解决方案1】:

正如 a_horse_with_no_name 所指出的,您可以使用数据库系统标识符。然而:

  • 当您通过pg_basebackup、SAN 快照等克隆数据库时,sysid 不会更改。时间线 ID 可能会增加,但并非总是如此,具体取决于用于复制。

  • 如果您将数据库转储并重新加载到新实例,即使数据库内容相同,sysid 确实会发生变化。

  • 如果许多 PostgreSQL 读/写主实例都是从某个容器模板或类似模板中的通用预配置 postgres 克隆而来,则它们可能具有相同的 sysid。

  • 重新生成 sysid 或将其设置为您想要的任何值都很简单。

  • pg_upgrade 未保留 sysid

所以就个人而言,我不建议使用 sysid。如果我必须进行灾难恢复并将转储恢复到新的 initdb'd 数据库中并且您的软件将我锁定在外,我会寻找新的供应商和律师。

目前无法通过 SQL 访问它并没有帮助,只能使用 pg_controldata

绝对使用版本字符串。对于来自同一组软件包、分布式二进制文件或其他任何内容的任何一组部署,它都是相同的。

在 PostgreSQL 中并没有你真正想要的东西,而且我不确定 是否可以 因为人们经常做的事情。克隆数据库、快照和恢复、为 QA/暂存实例复制数据库等。


我的个人建议:不要这样做。当许可证系统威胁到业务连续性时,我不得不在业务紧急情况下打破这样的系统。 (这很少很难)。当我参与购买时,我强烈反对使用主动执行许可证的工具。加密狗更糟糕。请注意,甚至 Microsoft 都使用“软”许可证强制执行,它可以帮助您跟踪合规性并警告您,但如果系统认为您不合规,则不会尝试破坏系统.这就是法律制度的目的。

哦,如果您真的觉得必须这样做,Microsoft Windows 系统有一个 SID。但是,如果您的客户必须重新安装操作系统,他们会讨厌您。

同样,还有硬件 TPM。但是如果他们将操作系统备份映像恢复到新硬件并且数据库拒绝启动,他们会更加讨厌你。

【讨论】:

    猜你喜欢
    • 2013-10-30
    • 1970-01-01
    • 2016-11-14
    • 1970-01-01
    • 1970-01-01
    • 2011-06-30
    • 2019-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多