我有一个 JSP/MySQL Web 服务,用户可以在其中与“进程”交互——他们可以为给定进程上传数据、配置、查看报告等。他们还可以创建新流程或运行比较多个流程的报告。
目前,进程 ID 在 URL(GET 参数)中指定,因此任何用户都可以与任何进程交互。 我被要求为该服务添加安全性和多租户。 为简单起见,假设每个租户都可以完全访问一组流程,但多个租户可能可以访问流程。
我的首选方法:
- 添加用户表(PK_User_Id、password_hash、name 等)
- 添加访问表(FK_User_Id、FK_Process_Id)
- 将 Tenant_Id 存储在 Session 中的 SSL 登录页面
- 一个流程选择页面,可让您选择您有权访问的 Process_Id,并将其存储在 Session 中
- 几乎每个页面都会根据 Session 的 Process_Id 创建其 SQL 查询
- “跨进程”页面(如创建、选择和比较)将使用会话的 User_Id 代替
我的老板认为这不足以满足外部代码审计的要求。他担心一个任性的开发人员仍然可以编写一个查询,将一个客户的数据暴露给另一个客户,或者其他东西。
他希望我也使用 ANSI SQL 的内置 ROLES(应用程序必须与 DB 无关)为每个用户创建一个 db 角色。该角色将详细说明该角色可以访问哪些表,共享表中的哪些行等。这样,在登录时,连接将是“安全的”,并且开发人员的错误不会导致问题。
- 这可能吗?
- 是否存在与 MySQL 一起使用的与 DB 无关的“角色”?
- 如果主键是“foo”,角色是否可以指定允许您向表中添加行?
- 按照行业标准,我的系统是否“足够安全”?