I有一个JSP/MySQL服务,用户可以在这里与“进程”交互--他们可以上传数据、配置、查看特定进程的报告等。它们还可以创建新进程或运行比较多个进程的报告。
当前,进程id是在URL ( GET参数)中指定的,因此任何用户都可以与任何进程交互。I被要求在这个服务中增加安全性和多租户。为了简单起见,假设每个租户都可以完全访问一组进程,但是进程可以被多个租户访问。
我最喜欢的方法是:
FK_Process_Id)
我的老板认为这不安全,不足以满足外部代码审核。他担心任性的开发人员仍然会编写一个查询,将一个客户的数据暴露给另一个客户,或者什么的。
他希望我也使用ANSI的内置角色(应用程序必须保持DB不可知论)为每个用户创建一个db角色。角色将详细说明角色可以访问哪些表、共享表中的哪些行等等。这样,在登录时,连接将是“安全的”,开发人员的错误不会导致问题。
F 229
发布于 2018-08-23 17:39:33
下面是我对具有单个数据库的MySQL多租户所做的工作,以确保数据是私有的:
H19限制租户mysql用户只能访问这些视图H 210G 211
由于应用程序正在使用租户的mysql用户,因此不可能意外地获得另一个租户的数据。
我能够在周末将一个大型的单租户mysql应用程序转换为多租户,只需很少的改动。我在这里记录了设计:https://opensource.io/it/mysql-multi-tenant/
发布于 2012-04-01 18:54:59
- make one mysql user per tenant
- add an indexed column to each table, `tenant` VARCHAR(16) NOT NULL
- add a trigger to each table that sets tenant to the mysql connection username ON BEFORE INSERT
- create a view for each table that sets WHERE tenant = mysql connection username. DO NOT include the tenant column in the select list
- grant permission to the tenant user for views, but not for tables
现在用户只能看到自己的租户信息。
发布于 2012-04-23 13:48:33
我们在so question上对多租户安全性和处理请求进行了类似的讨论。但简而言之,我认为在会话中存储tenantID是一个巨大的安全风险。用户可以从一个租户转到另一个租户,tenantID将保持不变,tenantID也不应该通过url发送。
https://stackoverflow.com/questions/5772128
复制相似问题