【问题标题】:How to let other people in my office access my databse?如何让我办公室的其他人访问我的数据库?
【发布时间】:2019-01-29 15:26:17
【问题描述】:

我需要与同一办公室(在同一网络中)的同事共享我 PC 中 PostgreSQL 的数据库。我做了一些研究,但我仍然对此有一些疑问。

我自己的一点背景:我已经独立使用PostgreSQL有一段时间了,并且已经创建了一堆有用的数据库,现在需要与其他人分享。所以我对PostgreSQL的用法和语法很熟悉,但是对于它的数据库管理,我还是比较新的……我的PostgreSQL版本是10.6,我在Windows上工作。

在我最初的研究中,我发现this post 对我的问题很有帮助,但我需要对此进行更多说明。上述帖子的答案提到:

显然,用户需要访问数据库:

GRANT CONNECT ON DATABASE my_db TO my_user;

以及(至少)架构上的 USAGE 权限:

GRANT USAGE ON SCHEMA public TO my_user;

那么第一个问题出现了:我应该在哪里运行这些代码? 假设我在 pgAdmin 和我想共享的数据库中,我应该打开一个查询工具并在那里运行语法吗?

其次,用户名(如上面代码中使用的my_user)和我们自己的超级用户名是一样的吗?即如果我的超级用户名只是postgres(我相信这是安装过程中的默认设置),如果有人想授予我访问他的数据库的权限,他只需使用postgres 代替my_user

最后,如果我办公室外有用户,那么如何授予远程访问权限?

另外,我在这里添加了我的 pg_hba_conf:

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
host    replication     all             127.0.0.1/32            md5
host    replication     all             ::1/128                 md5

【问题讨论】:

  • 在本地网络上,用户可以在 postgres url 中指定您的 ip。办公室外的人可以在访问之前连接到办公室 vpn 并进入同一网络。对于 postgres 网址,请参阅此处:stackoverflow.com/questions/3582552/postgresql-connection-url
  • 感谢您的及时回复。所以我应该在我的代码示例中使用 ip 作为“my_user”?而我postgres url部分中的ip,是指我在Pgadmin中时url会话中的ip地址(如127.0.0.1:50787/browser)?
  • 不,127.0.0.1 是您的环回地址。为了让其他人访问您的数据库,他们需要使用您的 IPv4。
  • 感谢您的解释,现在更有意义了。那么他们应该如何使用我的 IPv4 呢?通过我上面写的示例代码?即 GRANT CONNECT ON DATABASE my_db TO my_user;
  • 数据库、用户和密码都是 postgres url 的一部分。因此,当用户连接时,该用户用户将直接访问数据库并运行查询。您需要创建一个有权访问该数据库的用户并首先共享详细信息,然后用户才能连接。不客气!!!

标签: postgresql database-permissions


【解决方案1】:

除非您更改了默认权限,否则您引用的两个 GRANT 语句都是不必要的: 默认情况下,PUBLIC(即每个人)在所有数据库上都拥有CONNECT 权限,在架构public 上拥有USAGE 权限。

如果您打算授予其他人访问权限,您可能需要 REVOKE CREATE 架构 publicPUBLIC 特权。

我建议您不要将您的 postgres 超级用户的凭据分发给您的同事,除非他们需要管理数据库并且他们对 PostgreSQL 有足够的了解,可以信任不会意外破坏数据库。

所以我会创建一个新的登录角色,并授予它对数据库中的表、视图和序列的所有必要权限。

您可能还需要做两件事才能使其正常工作:

  • postgresql.conf中设置listen_addresses = '*'并重启数据库。

  • pg_hba.conf 中添加允许用户进入并重新加载数据库的条目。

    允许用户myuser 从任何计算机连接到数据库mydbname 的条目是:

    host   mydbname   myuser   0.0.0.0/0   md5
    

    当然,您可以使用更严格的网络掩码。

具体回答您的问题:

  1. 您可以在 pgAdmin 的查询工具中运行这些语句。这与任何其他客户端一样有效。

  2. 您不需要授予postgres 任何权限,因为像postgres 这样的超级用户无需进行权限检查。您只需要告诉您的同事密码(并配置 PostgreSQL 以接受远程连接)。但正如我上面所写,我建议您专门为此目的创建一个新用户。

  3. 向办公室外的人授予访问权限也不例外(PostgreSQL 不知道办公室的终点)。您只需要让这些外部人员能够通过网络访问数据库机器(以及适当的pg_hba.conf 条目)。

【讨论】:

  • 非常感谢您的澄清!只是几个跟进: 1.似乎多个人可以同时使用相同的超级用户名和密码访问同一服务器(我知道这是最不推荐的方式并且有很多风险)? 2. 请给我一个示例代码“如果您打算授予其他人访问权限,您可能希望从 PUBLIC 撤销对公共模式的 CREATE 权限。”? 3.在我的问题的上述cmets中,有人评论说同事可以通过IP访问我的数据库,我想这是你建议的另一种方式?非常感谢!
  • 此外...我已经编辑了我的问题并添加了 pg_hba.conf。那么我应该只使用我自己的 IPv4 子 '127.0.0.1/32' 还是应该包括我同事的 IPv4 (我想分享到的地方)?那么复制部分的IP呢?我也要在那里换吗?谢谢。抱歉问题的轰炸....
  • 我添加了一个示例pg_hba.conf 条目。您必须添加同事机器的 IP 地址(或他们匹配的网络掩码)。如果您不使用流式复制,replication 条目无关紧要。
  • 嗨 Laurenz,一个后续问题,因为我将在几周内将访问我的服务器的权限授予其他用户。一旦我编辑了我的 pg_hba.conf 并创建了我希望允许访问的用户(换句话说,我最终都设置好了),我的同事是否需要在他们的机器上编辑他们的 pg_hba.conf (简单地说,有什么他们到底需要做什么)?或者他们只需要在他们的机器中添加一个服务器来使用我为他们创建的用户名和凭据来访问我的服务器?谢谢。
  • 不,pg_hba.conf 仅与传入连接相关。编辑后不要忘记重新加载服务器。
猜你喜欢
  • 2019-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多