获取Postgres服务器安装的ID

时间:2017-10-16 08:18:38

标签: postgresql

我们想要创建一个许可证系统,其中连接到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与我们的应用程序捆绑在一起)。

我可以访问的信息有多变,比如安装时间等等吗?

1 个答案:

答案 0 :(得分:0)

您可以使用数据库系统标识符作为a_horse_with_no_name说明。但是:

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

  • 如果将数据库转储并重新加载到新实例,则sysid 会发生更改,即使数据库内容相同也是如此。

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

  • 重新生成sysid或将其设置为您想要的任何内容都是微不足道的。

  • pg_upgrade

  • 不保留sysid

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

目前无法通过SQL访问它只是使用pg_controldata无效。

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

在PostgreSQL中没有任何你想要的东西,我不确定可以是因为人们经常做的事情。克隆数据库,快照和恢复,复制QA /登台实例的数据库等等。

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

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

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