Postgres角色与权限

Postgres角色与权限

💡 原文英文,约3800词,阅读约需14分钟。
📝

内容提要

在Postgres中,控制数据访问非常重要。Postgres提供灵活的权限模型,用户通过角色和权限管理数据访问。每个数据库对象都有所有者,所有者可以授予其他用户权限。角色可以是用户或用户组,用户组便于管理权限。通过设置默认权限,可以简化新对象的权限管理。这些概念有助于有效保护Postgres数据库。

🔎

延伸解读

所有者权限与授权链

文章通过示例表明,对象所有者拥有完全控制权,可以授予或撤销权限。非所有者即使拥有管理角色(如Supabase的postgres),若未被授予权限,也无法直接操作对象。授权时可以使用with grant option让被授权者继续转授权限,形成授权链。理解这一点有助于避免权限不足的错误,并合理规划权限委派。

默认权限简化未来对象管理

默认权限允许预先定义未来创建对象时自动授予的权限。例如,可以设置当某用户创建新表时,自动将select权限授予另一角色。这避免了每次创建对象后手动授权的繁琐,特别适合频繁创建对象的场景。但需注意,默认权限仅影响之后创建的对象,且需在正确的schema中设置。

组角色与成员继承

组角色(nologin)用于集中管理权限。将用户加入组后,用户可继承组的权限,并可通过set role临时扮演组来创建对象。通过with set/inherit/admin选项,可以精细控制成员是否能扮演组、继承权限或管理组成员。这比单独授权更高效,尤其适合团队权限管理。

public角色与权限排查

public角色是所有角色的隐式成员,默认拥有connect、temporary、execute等权限。即使显式撤销了某角色的execute权限,该角色仍可能通过public角色执行函数。因此,在排查权限问题时,需检查public角色的权限,必要时撤销其默认权限。此外,revoke命令不会警告不存在的权限,操作后应显式验证。

❓

Q&A

Postgres中的角色和权限是如何管理的?

Postgres通过角色和权限模型管理数据访问,角色可以是用户或用户组,所有者可以授予其他用户权限。

如何在Postgres中创建新角色?

可以使用create role命令创建新角色,并为其设置登录权限和密码。

Postgres中如何设置默认权限?

可以通过alter default privileges命令设置默认权限,以便在创建新对象时自动授予权限。

什么是Postgres中的超级用户角色?

超级用户角色具有强大的权限,能够绕过所有权限检查,应该谨慎使用。

如何在Postgres中授予权限给其他角色?

可以使用grant命令将特定权限授予其他角色,例如grant select on table to role。

Postgres中的public角色有什么作用?

public角色是所有角色的隐式成员,提供一些基本的权限,如连接数据库和创建临时表。

🏷️

标签

➡️

继续阅读