使用物理Postgres的用户没有“逻辑”用户登录系统(Login system using phy

2019-10-18 08:40发布

我目前正在建设一个与SOX审计要求,以符合应用。 其中一个原因是,所有插入,更新和删除(但删除了可以忽略),需要留下痕迹,那是困难的,如果不是不可能的标准用户(或者非DBA)来改变。

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

我的问题是; 这是一个web应用...的典型设计模式是用户存储为“逻辑”,例如; 在“用户”表。 我需要什么,是应用程序实际运行作为登录的用户在首次登录后。

我的想法(这很可能不是最好的)是做到以下几点:

  1. 通过一个标准的用户名加载登录页(Web应用程序)
  2. 检查一个名为“stored_users”为自己的逻辑的用户名/密码表。
  3. 如果输入正确的用户名/密码; 检索数据库的用户名,生成会话密码(存储在Redis的KVSession),更新Postgres的数据库用户,并用它登录。
  4. 定义的非活动时间后,破坏了密码会话,用户重置密码数据库和日志出来。

这是否听起来像一个安全的方式,以确保以下?

  1. 我的用户始终使用的是Postgres用户; 这样我就可以通过强制执行等CURRENT_USER触发器..
  2. 通过始终以随机的,临时密码再生postgres用户的密码安全

我很想听听别人怎么在这个问题上说的; 因为我实在找不到这对谷歌(或者我不是寻找合适的条件)。 这似乎为用户登录的普遍心态是将它们存储为逻辑记录,并具有全球连接的用户。

Answer 1:

为了实现自己的目标

所有插入,更新和删除,需要留下痕迹,那是困难的,如果不是不可能的标准用户更改。

你可以创建:

1)两个模式:一个用于共同的表,一个用于安全的东西一样登录/通(散列)表中,用户会话日志,更改日志表等

2)两个用户:一个共同的用户,只能在公共模式(无DDL),一个超级用户使用DML。

3),将检查提供的用户名/密码登录对抗/通行证表,记录成功的登录功能/失败的尝试到用户会话日志(你需要SECURITY DEFINER函数)

4)设置审核的触发对公共架构表,将检查用户权限和记录任何修改,由用户(由SECURITY DEFINER这里太功能)。



文章来源: Login system using physical postgres users not “logical” users