我一直想知道在会话状态下检查每个请求或缓存(比如ACL)的帐户访问权限是否更好。
我目前的情况并不是特别关键任务,但我觉得必须退出并重新登录以刷新缓存凭据会很烦人。我还考虑使用带有TTL的临时数据存储。似乎它可能是两者中最好的。
答案 0 :(得分:1)
安全方面,最好每次检查数据库以获取权限。安全漏洞的存在是,如果在创建会话后用户的权限减少,他们可能仍然可以达到比他们应该更高的访问级别。
如果您在开发周期中足够早,可以采取一些措施来保证安全,而无需执行完整查询。如果您有role-based access control (RBAC),则可以存储包含用户角色的快速查找表。如果用户的角色在会话期间发生更改,则会在查找表中将权限标记为“脏”,从而导致查询新角色的数据库。只要用户的角色保持不变,就不需要查询数据库。然后,查找表基本上只是一个标志,如果用户的角色发生变化,您可以在后端设置该标志。如果粒度不太精细,即使使用单独的访问控制,也可以使用相同的技术。如果是,它开始变成你服务器上的膨胀。我们在工作中使用这种技术来加速交易。
如果您在开发周期较晚或者您认为简单性超过性能(简单通常更安全),那么除非负载对于DB太重,否则我每次都会查询数据库。