使用物理postgres用户登录系统而不是“逻辑”用户

时间:2013-07-11 18:10:19

标签: security postgresql authentication database-design auditing

我目前正在构建一个必须符合SOX审核要求的应用程序。其中之一是,所有插入,更新和删除(但删除都可以忽略),需要留下一条难以(如果不是不可能)标准用户(或非DBA)更改的路径。

这意味着,我需要通过插入,更新和删除触发器在数据库级强制执行审计。

我的问题是;这是一个webapp ...典型的设计模式是将用户存储为“逻辑”,例如;在“用户”表中。我需要的是,应用程序在初次登录后实际以登录用户身份运行。

我的想法(可能不是最好的)是做以下事情:

  1. 通过标准用户名(webapp)
  2. 加载登录页面
  3. 检查名为“stored_users”的表格,以获取其逻辑用户名/密码。
  4. 如果他们输入正确的用户/通行证;检索db用户名,生成会话密码(在redis上存储在KVSession中),更新postgres DB上的用户并使用它登录。
  5. 在定义的不活动时间后,销毁密码会话,重置用户的db密码并将其注销。
  6. 这听起来像是确保以下内容的安全方式吗?

    1. 我的用户总是使用postgres用户;所以我可以通过CURRENT_USER等强制执行触发器。
    2. 安全性始终使用随机临时密码重新生成postgres用户密码
    3. 我真的很想听听别人对此事的看法;因为我在谷歌上找不到这个(或者我没有找到合适的条款)。用户登录的主流思维方式似乎是将它们存储为逻辑记录并具有全局连接用户。

1 个答案:

答案 0 :(得分:1)

实现目标

  

所有插入,更新和删除都需要留下一条路径   标准用户即使不是不可能也很难改变。

你可以创建:

1)两个模式:一个用于公共表,一个用于安全性,如登录/传递(哈希)表,用户会话日志,更改日志表等。

2)两个用户:一个普通用户,只能在公共架构上使用dml(无ddl),一个超级用户。

3)登录功能,将检查提供的用户/通过登录/通过表并将成功/失败尝试记录到用户会话日志中(您需要SECURITY DEFINER功能)

4)在公共模式表上设置一组审计触发器,用于检查用户权限并记录用户所做的任何更改(SECURITY DEFINER函数也在此处)。