【发布时间】:2015-07-04 08:41:41
【问题描述】:
我在 Windows 7 SP1 64 位上使用 PostgreSQL 9.4,在撤销角色时遇到问题。 假设我有三个用户:taylor、michelle 和超级用户 postgres。 作为 postgres,我将角色 'utente' 授予带有管理员选项的 taylor
--postgres@localhost:5432
GRANT utente TO taylor WITH ADMIN OPTION;
然后,作为泰勒,我将角色 utente 授予米歇尔
--taylor@localhost:5432
GRANT utente TO michelle;
最后,作为 postgres,我撤销了 taylor 的角色 utente
--postgres@localhost:5432
REVOKE utente FROM taylor
这个角色也应该从米歇尔那里递归撤销,因为她只从泰勒那里得到了这个角色。但事实并非如此,泰勒失去了这个角色,但米歇尔保留了它。我尝试使用 RESTRICT 选项运行命令,这应该会阻止它被执行,但它不起作用,命令以完全相同的方式执行,taylor 失去了角色,michelle 保留了它。 谁能给我解释一下?
谢谢。
【问题讨论】:
-
“这个角色也应该从米歇尔那里被递归撤销,因为她只从泰勒那里得到了这个角色”。这是一个很大的假设。在许多情况下,这样做是非常错误的事情。想象一下,泰勒设置了米歇尔的用户帐户,然后离开了公司。您不希望撤销泰勒的访问权限。
-
事实上,默认情况下它应该应用 RESTRICT 选项并且不执行命令,告诉我有将被撤销的依赖权限/角色。如果我使用 CASCADE 选项,它应该删除我要撤销的用户授予的所有角色,但它不会这样做。我不明白为什么。
-
你有没有试过做
REVOKE ADMIN OPTION FOR taylor CASCADE;之前做REVOKE utente FROM taylor CASCADE;? -
是的,但它也是如此。
标签: sql database postgresql postgresql-9.4