如何让我办公室的其他人访问我的数据库?
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
的模式 public
的 CREATE
权限。
我建议您不要将 postgres
超级用户的凭据交给您的同事,除非他们需要管理数据库并且他们对 PostgreSQL 有足够的了解,值得信任,不会意外破坏数据库。
所以我会创建一个新的登录角色并授予它对数据库中的表、视图和序列的所有必要权限。
您可能还需要做两件事才能使其正常工作:
在postgresql.conf
中设置listen_addresses = '*'
并重启数据库
在 pg_hba.conf
中添加允许用户进入并重新加载数据库的条目。
允许用户 myuser
从任何计算机连接到数据库 mydbname
的条目是:
host mydbname myuser 0.0.0.0/0 md5
您当然可以使用更严格的网络掩码。
具体回答您的问题:
您可以在 pgAdmin 的查询工具中 运行 这些语句。这与任何其他客户端一样有效。
您不需要授予 postgres
任何权限,因为像 postgres
这样的超级用户可以免除权限检查。您只需将密码告诉您的同事(并将 PostgreSQL 配置为接受远程连接)。但正如我上面所写,我建议您专门为此目的创建一个新用户。
向您办公室以外的人授予访问权限没有什么不同(PostgreSQL 不知道您办公室的尽头在哪里)。您所需要的只是让这些外部人员能够通过网络访问数据库机器(以及适当的 pg_hba.conf
条目)。
我需要在我的 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
的模式 public
的 CREATE
权限。
我建议您不要将 postgres
超级用户的凭据交给您的同事,除非他们需要管理数据库并且他们对 PostgreSQL 有足够的了解,值得信任,不会意外破坏数据库。
所以我会创建一个新的登录角色并授予它对数据库中的表、视图和序列的所有必要权限。
您可能还需要做两件事才能使其正常工作:
在
postgresql.conf
中设置listen_addresses = '*'
并重启数据库在
pg_hba.conf
中添加允许用户进入并重新加载数据库的条目。允许用户
myuser
从任何计算机连接到数据库mydbname
的条目是:host mydbname myuser 0.0.0.0/0 md5
您当然可以使用更严格的网络掩码。
具体回答您的问题:
您可以在 pgAdmin 的查询工具中 运行 这些语句。这与任何其他客户端一样有效。
您不需要授予
postgres
任何权限,因为像postgres
这样的超级用户可以免除权限检查。您只需将密码告诉您的同事(并将 PostgreSQL 配置为接受远程连接)。但正如我上面所写,我建议您专门为此目的创建一个新用户。向您办公室以外的人授予访问权限没有什么不同(PostgreSQL 不知道您办公室的尽头在哪里)。您所需要的只是让这些外部人员能够通过网络访问数据库机器(以及适当的
pg_hba.conf
条目)。