首页 > 解决方案 > 如何让我办公室的其他人访问我的数据库?

问题描述

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

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

在我最初的研究中,我发现这篇文章对我的问题很有帮助,但我需要更多的澄清。上述帖子的答案提到:

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

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

标签: postgresqldatabase-permissions

解决方案


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

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

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

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

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

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

  • 添加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条目)。


推荐阅读