bel*_*daz 4 postgresql authentication jdbc connections
以下似乎可能是一种相当普遍的情况,但我还没有看到任何解决方案。
我有一个 PostgreSQL 数据库,其中包含特定于 的视图,$user以便根据某些特定于数据库的 ACL 逻辑来限制数据。数据库通常通过 JDBC 访问,特别是在 Web 界面的 JSP 中。用户通过 LDAP 密码认证登录网站。
我想要的是利用从 JDBC 连接到数据库的视图。但通常这个中间层连接是使用通用用户创建的,而不是特定于登录网站的人。我相信在 Oracle 中“正确”的方法是Proxy Authentication,但 AFAIAA 没有与 PostgreSQL 等效的方法。那么该怎么做呢?
想到了一些想法:
还有其他(希望更好)的建议吗?
通常的解决方案是在 Web 应用程序中对用户进行身份验证,然后在已使用固定用户名通过数据库进行身份验证的 JDBC 会话上发出SET ROLE或SET SESSION AUTHORIZATION以“成为”用户。
在这两种情况下DISCARD ALL,任何连接池在将连接返回到池时应该运行的命令将自动重置授权。确保您的连接池DISCARD ALL在返回的连接上运行。
这些很像链接的 Oracle 文档中给出的三个“代理身份验证”案例中的第一个。
PostgreSQL 不支持其他两种形式,其中客户端身份验证传递到数据库。支持相对简单,但没有人希望它足以实施它或资助其他人实施它所需的工作。
SET ROLE要使用,SET ROLE您必须以具有所有用户角色成员身份的用户身份连接到数据库,但该用户可以没有特权。DB 用户应该在时间NOINHERIT设置ALTER ROLE或设置选项CREATE ROLE。因此,您通常将 webapp 用户创建为 webapp 用户所属的 db 角色,例如
CREATE ROLE newusername
NOLOGIN
ROLE mywebappuser;
Run Code Online (Sandbox Code Playgroud)
(ROLE mywebapp相当于运行后续GRANT newusername TO mywebappuser;)。
SET SESSION AUTHORIZATION要使用,SET SESSION AUTHORIZATION您必须以超级用户身份连接,这通常是不可取的,因为它将完全控制权交给 webapp 用户。
不像SET ROLE没有组成员资格的要求。
| 归档时间: |
|
| 查看次数: |
3716 次 |
| 最近记录: |