首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL应用程序中的安全多租户

MySQL应用程序中的安全多租户
EN

Stack Overflow用户
提问于 2011-04-24 17:40:22
回答 3查看 2.3K关注 0票数 1

I有一个JSP/MySQL服务,用户可以在这里与“进程”交互--他们可以上传数据、配置、查看特定进程的报告等。它们还可以创建新进程或运行比较多个进程的报告。

当前,进程id是在URL ( GET参数)中指定的,因此任何用户都可以与任何进程交互。I被要求在这个服务中增加安全性和多租户。为了简单起见,假设每个租户都可以完全访问一组进程,但是进程可以被多个租户访问。

我最喜欢的方法是:

FK_Process_Id)

  • An

  • 添加一个用户表(PK_User_Id、password_hash、name等)

  • 添加一个访问表(FK_User_Id, SSL登录页,该页面存储会话
  • A中的Tenant_Id进程-选择页面,该页面允许您选择您可以访问的Process_Id,并存储在Session
  • Almost 中,每个页面将根据会话的Process_Id
  • "Cross-process“页面创建其SQL查询,如Create、Select、并且比较将结束会话的User_Id而不是

我的老板认为这不安全,不足以满足外部代码审核。他担心任性的开发人员仍然会编写一个查询,将一个客户的数据暴露给另一个客户,或者什么的。

他希望我也使用ANSI的内置角色(应用程序必须保持DB不可知论)为每个用户创建一个db角色。角色将详细说明角色可以访问哪些表、共享表中的哪些行等等。这样,在登录时,连接将是“安全的”,开发人员的错误不会导致问题。

  • 是可能的吗?
  • 是否有一种与DB无关的“角色”可以与MySQL?
  • 一起工作?角色可以指定您可以在主键‘foo’?
  • 按行业标准是“足够安全”的情况下向表中添加行吗?

F 229

EN

回答 3

Stack Overflow用户

发布于 2018-08-23 17:39:33

下面是我对具有单个数据库的MySQL多租户所做的工作,以确保数据是私有的:

  1. 为每个租户创建一个mysql用户
  2. 向每个表添加tenant_id列
  3. 使用触发器自动将当前的mysql用户放入插入
  4. 的tenant_id列,为只显示tenant_id = mysql_user (不包括视图中的tenant_id列)的行创建一个视图(不包括视图中的tenant_id列)

H19限制租户mysql用户只能访问这些视图H 210G 211

由于应用程序正在使用租户的mysql用户,因此不可能意外地获得另一个租户的数据。

我能够在周末将一个大型的单租户mysql应用程序转换为多租户,只需很少的改动。我在这里记录了设计:https://opensource.io/it/mysql-multi-tenant/

票数 2
EN

Stack Overflow用户

发布于 2012-04-01 18:54:59

  1. 使用PostgreSQL代替,因为它支持真正的模式,与MySQL
  2. 不同,如果必须使用MySQL,请执行以下操作:

代码语言:javascript
复制
- 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

现在用户只能看到自己的租户信息。

票数 0
EN

Stack Overflow用户

发布于 2012-04-23 13:48:33

我们在so question上对多租户安全性和处理请求进行了类似的讨论。但简而言之,我认为在会话中存储tenantID是一个巨大的安全风险。用户可以从一个租户转到另一个租户,tenantID将保持不变,tenantID也不应该通过url发送。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5772128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档