【发布时间】:2013-12-23 04:07:21
【问题描述】:
根据我一直在阅读的有关权限的信息,我了解到最好在将任何权限分配给角色之前撤消权限。 我有一个名为 appuser 的用户,我做了以下操作:
REVOKE ALL PRIVILEGES ON SCHEMA PUBLIC FROM GROUP PUBLIC;
GRANT SELECT
ON public.table1 TO appuser;
GRANT SELECT
ON public.table1_id_seq TO appuser;
GRANT SELECT
ON public.table2 TO appuser;
GRANT SELECT
ON public.table2_id_seq TO appuser;
我这样做是希望自动删除附加到任何新添加的用户的任何特权,这是公共角色成员资格的一部分。相反,我收到了一个错误,即 appuser 没有对架构的权限。然而,这是我对这个错误的误解。 1. PgAdminIII 在此架构的组角色下不显示公共角色 2. appuser 似乎不是名为 public 的组的成员(因为它不存在于界面中)。 3. appuser 的权限被明确授予,即使它是公共角色的一部分
那么...是否存在某种名为“Public”的隐式组角色会影响该用户的权限?我不明白发生了什么事。我还尝试从 pgAdminIII 命令行中找出在哪里显示组角色成员资格,但那里也没有运气。顺便说一句,我只是颠倒了第一个命令(即 GRANT ALL PRIVILEGES ON SCHEMA PUBLIC TO GROUP PUBLIC);然而,这基本上取消了我最初尝试做的事情(即简单地锁定表格)。
有什么想法吗?
更新:我有预感,我发现了问题所在。我认为 appuser 没有架构的权限。如果我没记错的话,必须先授予架构权限,然后才能访问架构下的任何对象。
【问题讨论】:
-
如果错误表明角色没有架构的权限,为什么您没有授予
appuser架构上的权限?毕竟,您为所有人撤销了它们,并且不给任何人。 -
你需要显示你正在执行的确切命令和你得到的确切错误,而不是对它们的叙述性解释。
-
@Milen - 我认为你一针见血。什么是额头拍打。我要测试一下这个上午
-
@Peter - 在我发布这个之后,我实际上正在寻找命令。由于这是我继承的迁移过程,我仍在学习所有部分的位置。我会在做更多研究后发布更新。
标签: postgresql permissions database-administration