Using JWT to establish a trusted context for Row Level Security
9 months ago
- #Row-Level Security
- #JWT
- #PostgreSQL
- 行级安全(RLS)是通过应用策略定义的过滤器来限制行访问的功能
- RLS需要可信上下文环境,这是一组RLS策略可以查询用于行过滤的键值对
- 传统的RLS上下文解决方案依赖角色机制,虽然通过认证获得信任但使连接池和管理复杂化
- 基于密码学的上下文方案(如使用JWT数字签名)可以独立于认证建立信任关系
- JWT(JSON Web Token)是推荐的签名上下文标准,具有JSON序列化和算法支持等优势
- 实验性扩展'jwt_context'实现了该方案,允许RLS策略使用JWT签名的上下文
- 基础架构包含应用生成令牌、数据库验证和RLS策略应用三个环节
- 高级架构可能涉及独立的上下文生成系统和连接池优化方案
- 签名验证密钥通过GUC参数配置(jwt.secret用于HMAC算法,jwt.pubkey用于RSA/ECDSA算法),需注意安全性
- 现有方案的弱点包括超级用户访问风险、自定义C代码漏洞和令牌泄露问题
- 未来改进方向包括协议层支持以简化连接池集成