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

时间:2019-01-28 06:30:34

标签: postgresql database-permissions

我需要与同一办公室(同一网络)中的同事共享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

1 个答案:

答案 0 :(得分:3)

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

如果您打算授予其他人访问权限,则可能希望从REVOKE处获得CREATE的模式public的{​​{1}}特权。

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

因此,我将创建一个新的登录角色,并为它授予数据库中表,视图和序列的所有必要特权。

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

  • postgres中设置listen_addresses = '*'并重新启动数据库。

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

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

    mydbname

    您当然可以使用限制性更强的网络掩码。

为您的问题提供具体答案:

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

  2. 您不需要授予host mydbname myuser 0.0.0.0/0 md5 任何特权,因为像postgres这样的超级用户可以免于权限检查。您只需要告诉您的同事密码(并将PostgreSQL配置为接受远程连接)即可。但是,正如我在上文所述,我建议您专门为此目的创建一个新用户。

  3. 授予办公室外人员访问权限没有什么不同(PostgreSQL不知道您的办公室在哪里结束)。您所需要做的就是使这些外部人员可以通过网络访问数据库计算机(以及相应的postgres条目)。