我目前正在构建一个必须符合 SOX 审计要求的应用程序。其中之一是,所有插入、更新和删除(但您可以忽略删除)都需要留下难以改变的痕迹,即使不是标准用户(或非 DBA)也无法更改。
这意味着,我需要通过插入、更新和删除触发器在数据库级别执行审计。
我的问题是;这是一个webapp……典型的设计模式是将用户存储为“逻辑”,例如;在“用户”表中。我需要的是让应用程序在初始登录后以登录用户身份实际运行。
我的想法(这可能不是最好的)是执行以下操作:
- 通过标准用户名(webapp)加载登录页面
- 检查名为“stored_users”的表的逻辑用户名/密码。
- 如果他们输入了正确的用户/通行证;检索数据库用户名,生成会话密码(存储在 redis 上的 KVSession 中),更新 postgres 数据库上的用户并使用它登录。
- 在定义的不活动时间后,销毁密码会话,重置用户的数据库密码并将其注销。
这听起来像是确保以下内容的安全方法吗?
- 我的用户总是使用 postgres 用户;所以我可以通过 CURRENT_USER 等强制执行触发器。
- 通过始终使用随机临时密码重新生成 postgres 用户密码来确保安全
我真的很想听听其他人对此事的看法;因为我真的在谷歌上找不到这个(或者我没有搜索正确的术语)。用户登录的主流思维方式似乎是将它们存储为逻辑记录并拥有一个全局连接用户。