如何使用 Java Spring 在 MySql 中实现多租户 [关闭]

Posted

技术标签:

【中文标题】如何使用 Java Spring 在 MySql 中实现多租户 [关闭]【英文标题】:How can I achieve multitenancy in MySql by using Java Spring [closed] 【发布时间】:2018-02-26 05:13:48 【问题描述】:

如何使用 mysql Java Spring 最佳实践实现多租户,并建议使用任何其他数据库代替 MySql 进行多租户写入和读取以用于报告目的。

【问题讨论】:

在此处查看具有完整源代码的有效解决方案。 sunitkatkar.blogspot.com/2018/04/… 【参考方案1】:
    为每个租户提供自己的 MySQL 用户名和密码。 然后给每个租户一个或多个他们自己的数据库。 然后授予每个租户的用户名访问他们拥有的数据库的权限。

这种多租户方法被托管服务提供商上的数百万个 WordPress 安装使用,因此经过现场测试和验证。

要创建用户,请执行此操作。给出用户的机器地址

  CREATE USER 'userid'@'localhost' IDENTIFIED BY 'password';
  CREATE USER 'userid'@'%' IDENTIFIED BY 'password';

然后创建数据库(这使数据库与用户同名;这样可以方便多租户。

  CREATE DATABASE userid;

然后只授予用户对该数据库的权限。

  GRANT ALL PRIVILEGES ON userid.* TO 'userid'@'localhost';
  GRANT ALL PRIVILEGES ON userid.* TO 'userid'@'%';

然后刷新权限以使其“接受”。

  FLUSH PRIVILEGES;

如果您想要一个对所有数据库具有只读访问权限的全局报告用户,您可以这样设置。

  GRANT SELECT ON *.* TO 'globalreportid'@'localhost';
  GRANT SELECT ON *.* TO 'globalreportid'@'%';
  GRANT SHOW DATABASES TO 'globalreportid'@'localhost';
  GRANT SHOW DATABASES TO 'globalreportid'@'%';

请注意,您可以设计一个只使用一个数据库的多租户应用程序,并在不同的表中具有列来标识每一行的相关租户。这是大多数多用户 Web 应用程序的工作方式。在这种情况下,执行不同租户不应看到彼此数据的规则取决于您的应用程序。但是,这不是数据库级别的多租户。

如果您希望有十几个左右的租户使用您的系统,那么在多租户应用程序中为每个租户创建单独的数据库通常不是一个好主意。

数据库安全是一个复杂的话题。您可以在此处阅读有关 MySQL 安全性的信息。 https://dev.mysql.com/doc/refman/5.7/en/security.html

【讨论】:

但是如何在运行时使用 java spring 切换租户以根据 tanant id 保存数据,以及如何实现向可以查看所有租户数据的超级用户报告。 如果您想澄清您的问题,请编辑您的问题,而不是使用 cmets。

以上是关于如何使用 Java Spring 在 MySql 中实现多租户 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

使用 Spring Boot Java 端口 8080 上的 Tomcat 失败

如何启动mysql数据库服务器,Java核心知识点

如何在 Spring 批处理中读取 MS Access db(.mdb 文件)并加载到 mysql db

[Java web]Spring+Struts2+Hibernate整合过程

如何在ubuntu后台系统中部署jar包

如何在不使用 CrudRepository 的情况下将 java spring boot 应用程序中定义的实体反映在数据库中