Postgresql 如何让我办公室的其他人访问我的数据库?
我需要与同一办公室(同一网络)的同事在我的PC上共享PostgreSQL数据库。我做了一些研究,但我仍然有一些问题 我自己的一点背景:我已经独立使用PostgreSQL有一段时间了,并且已经创建了一些有用的数据库,现在需要与其他人共享。所以我熟悉PostgreSQL的用法和语法,但对于它的数据库管理,我还是相当新的。。。我的PostgreSQL版本是10.6,我在Windows上工作 在我最初的研究中,我发现这对我的问题很有帮助,但我需要更多的澄清。上述帖子的答案如下: 用户需要访问数据库,显然:Postgresql 如何让我办公室的其他人访问我的数据库?,postgresql,database-permissions,Postgresql,Database Permissions,我需要与同一办公室(同一网络)的同事在我的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
权限,在schemaPUBLIC
上有USAGE
权限
如果您想给其他人访问权限,您可能需要从public
中撤销在schemapublic
上的创建
权限
我建议您不要将凭据分发给您的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
权限,在schemaPUBLIC
上有USAGE
权限
如果您想给其他人访问权限,您可能需要从public
中撤销在schemapublic
上的创建
权限
我建议您不要将凭据分发给您的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,并在访问之前进入同一网络