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

Postgresql 如何让我办公室的其他人访问我的数据库?,postgresql,database-permissions,Postgresql,Database Permissions,我需要与同一办公室(同一网络)的同事在我的PC上共享PostgreSQL数据库。我做了一些研究,但我仍然有一些问题 我自己的一点背景:我已经独立使用PostgreSQL有一段时间了,并且已经创建了一些有用的数据库,现在需要与其他人共享。所以我熟悉PostgreSQL的用法和语法,但对于它的数据库管理,我还是相当新的。。。我的PostgreSQL版本是10.6,我在Windows上工作 在我最初的研究中,我发现这对我的问题很有帮助,但我需要更多的澄清。上述帖子的答案如下: 用户需要访问数据库,显然

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

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

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

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

GRANT CONNECT ON DATABASE my_db TO my_user;
以及(至少)架构上的使用权限:

GRANT USAGE ON SCHEMA public TO my_user;
第一个问题是:我应该在哪里运行这些代码? 假设我在pgAdmin上,并且在我想要共享的数据库中,我是否应该打开一个查询工具并在那里运行语法

其次,用户名(如上面代码中使用的
my_user
)是否与我们自己的超级用户名相同?i、 e.如果我的超级用户名只是
postgres
(我相信这是安装过程中的默认名称),如果有人想授予我访问其数据库的权限,他只需使用
postgres
作为
我的用户

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

此外,我在这里添加了我的pg_hba_配置:

# 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
权限,在schema
PUBLIC
上有
USAGE
权限

如果您想给其他人访问权限,您可能需要从
public
撤销
在schema
public
上的
创建
权限

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

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

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

  • postgresql.conf
    中设置
    listen\u addresses='*'
    ,然后重新启动数据库

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

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

    host   mydbname   myuser   0.0.0.0/0   md5
    
    当然,您可以使用更严格的网络掩码

要具体回答您的问题,请执行以下操作:

  • 您可以在pgAdmin中的查询工具中运行这些语句。这和其他客户一样有效

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

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


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

    如果您想给其他人访问权限,您可能需要从
    public
    撤销
    在schema
    public
    上的
    创建
    权限

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

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

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

    • postgresql.conf
      中设置
      listen\u addresses='*'
      ,然后重新启动数据库

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

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

      host   mydbname   myuser   0.0.0.0/0   md5
      
      当然,您可以使用更严格的网络掩码

    要具体回答您的问题,请执行以下操作:

  • 您可以在pgAdmin中的查询工具中运行这些语句。这和其他客户一样有效

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

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


  • 在本地网络上时,用户可以在postgres url中指定您的ip。办公室以外的人可以连接到办公室vpn,并在访问之前进入同一网络