我需要与同一办公室(同一网络)中的同事共享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
答案 0 :(得分:3)
除非更改了默认权限,否则引用的两个GRANT
语句都是不必要的:
默认情况下,PUBLIC
(即每个人)在所有数据库上均具有CONNECT
特权,在模式USAGE
上具有public
特权。
如果您打算授予其他人访问权限,则可能希望从REVOKE
处获得CREATE
的模式public
的{{1}}特权。
我建议您不要将PUBLIC
超级用户的凭据分发给您的同事,除非他们需要管理数据库并且他们对PostgreSQL有足够的了解,可以信任以免意外破坏数据库。
因此,我将创建一个新的登录角色,并为它授予数据库中表,视图和序列的所有必要特权。
要使其正常运行,您可能还需要做两件事:
在postgres
中设置listen_addresses = '*'
并重新启动数据库。
在postgresql.conf
中添加允许用户进入并重新加载数据库的条目。
允许用户pg_hba.conf
从任何计算机连接到数据库myuser
的条目将是:
mydbname
您当然可以使用限制性更强的网络掩码。
为您的问题提供具体答案:
您可以在pgAdmin的查询工具中运行这些语句。效果与其他任何客户端一样好。
您不需要授予host mydbname myuser 0.0.0.0/0 md5
任何特权,因为像postgres
这样的超级用户可以免于权限检查。您只需要告诉您的同事密码(并将PostgreSQL配置为接受远程连接)即可。但是,正如我在上文所述,我建议您专门为此目的创建一个新用户。
授予办公室外人员访问权限没有什么不同(PostgreSQL不知道您的办公室在哪里结束)。您所需要做的就是使这些外部人员可以通过网络访问数据库计算机(以及相应的postgres
条目)。