幕后揭秘:我们是如何构建密码角色的

幕后揭秘:我们是如何构建密码角色的

💡 原文英文,约900词,阅读约需3分钟。
📝

内容提要

PlanetScale最近推出了数据库密码角色功能,允许用户选择不同的访问权限(只读、只写、读写、管理员)。该功能通过Vitess访问控制列表实现,确保用户角色即时生效,并简化了ACL管理和调试。

🔎

延伸解读

静态ACL的局限与PlanetScale的取舍

Vitess原生支持通过静态配置文件管理用户授权,但该方式依赖定时重载,无法保证密码角色即时生效。PlanetScale的设计原则是避免在vttablet节点上保留认证和授权状态,因此静态文件方案会导致角色更新延迟、多节点状态不一致、Pod重启后状态丢失等问题。这些限制促使PlanetScale寻找更动态的解决方案。

动态凭证存储如何实现即时生效

PlanetScale将每个密码的显示名称、角色和哈希值存储在外部凭证数据库中。当用户连接时,查询前端根据存储的角色信息,将用户映射到Vitess ACL中预定义的用户名(如planetscale-reader),从而动态重写安全主体。这种方式无需刷新间隔,角色变更可立即生效,且所有Pod共享同一外部状态,保证了ACL状态的一致性。

对运维与调试的实际影响

由于所有PlanetScale数据库使用相同的基础ACL配置,且认证授权数据集中存储,调试和修复ACL问题变得更加简单。运维人员无需管理每个vttablet Pod上的配置文件,也避免了因文件更新不同步导致的角色不一致风险。这种设计提升了系统的可维护性和可靠性,尤其适合多租户云数据库环境。

❓

Q&A

PlanetScale的数据库密码角色功能有哪些访问权限选项?

PlanetScale的数据库密码角色功能提供只读、只写、读写和管理员四种访问权限选项。

Vitess是如何实现用户授权的?

Vitess通过静态配置文件和访问控制列表(ACL)来实现用户授权。

为什么静态配置文件不适用于PlanetScale客户?

因为PlanetScale设计原则是避免在vttablet节点上保留认证和授权状态,静态配置文件无法保证用户角色的即时生效。

如何确保用户创建的密码角色能够立即生效?

通过动态用户凭证存储,PlanetScale允许即时创建或删除用户角色映射,无需刷新间隔。

PlanetScale如何简化ACL管理和调试?

由于所有认证和授权数据存储在外部数据存储中,所有数据库的ACL状态一致,从而简化了ACL管理和调试。

用户在PlanetScale创建密码时需要存储哪些信息?

用户创建密码时需要存储显示名称、角色和密码哈希信息。

🏷️

标签

➡️

继续阅读