postgresql - 如何让我办公室的其他人访问我的数据库?
问题描述
我需要与我在同一办公室(在同一网络中)的同事共享我的 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
解决方案
除非您更改了默认权限,否则您GRANT
引用的两个语句都是不必要的:默认情况下PUBLIC
(即每个人)都具有CONNECT
对所有数据库的USAGE
权限和对 schema的权限public
。
如果您打算授予其他人访问权限,您可能需要对架构REVOKE
的特权。CREATE
public
PUBLIC
我建议您不要将postgres
超级用户的凭据分发给您的同事,除非他们需要管理数据库,并且他们对 PostgreSQL 有足够的了解,可以信任不会意外破坏数据库。
所以我会创建一个新的登录角色,并授予它对数据库中的表、视图和序列的所有必要权限。
要使其正常工作,您可能还需要做两件事:
设置
listen_addresses = '*'
并postgresql.conf
重新启动数据库。添加
pg_hba.conf
允许用户进入并重新加载数据库的条目。允许用户从任何计算机
myuser
连接到数据库的条目将是:mydbname
host mydbname myuser 0.0.0.0/0 md5
当然,您可以使用更具限制性的网络掩码。
为您的问题提供具体答案:
您可以在 pgAdmin 的查询工具中运行这些语句。这与任何其他客户端一样有效。
您不需要授予
postgres
任何权限,因为像这样的超级用户postgres
可以免于权限检查。您只需要告诉您的同事密码(并将 PostgreSQL 配置为接受远程连接)。但正如我上面所写,我建议您专门为此目的创建一个新用户。授予办公室以外的人访问权限也没有什么不同(PostgreSQL 不知道您的办公室在哪里结束)。您所需要的只是让这些外部人员能够通过网络访问数据库机器(以及适当的
pg_hba.conf
条目)。
推荐阅读
- apache-spark - Google data proc 记录有关资源不足但未失败的错误
- mysql - 代理 SQL 错误“在 SET NAMES 期间检测到断开的连接”
- reactjs - 将文件夹中的特定文件添加到 .gitignore
- python-3.x - 从数组中删除包含字母和数字的字符串
- git - git:如何解释第一个日志输出行
- python - 如何在python中对带有月份和年份的字符串列表进行排序
- python - 右键单击->从上下文菜单运行python脚本+暴露的变量
- django - Django/Postgres 中的数据库性能
- java - java二叉搜索树插入递归似乎总是返回空根
- javascript - 如何更新glightbox滑块的内容?