如何让我办公室的其他人访问我的数据库?

How to let other people in my office access my databse?

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

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

在我最初的研究中,我发现 this post 对我的问题有帮助,但我需要更多的说明。上面post的回答提到:

The user needs access to the database, obviously:

GRANT CONNECT ON DATABASE my_db TO my_user;

And (at least) the USAGE privilege on the schema:

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

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

具有 USAGE 权限

如果您打算授予其他人访问权限,您可能需要 REVOKE 对来自 PUBLIC 的模式 publicCREATE 权限。

我建议您不要将 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 条目)。