如何使用 Java Spring 在 MySql 中实现多租户

How can I achieve multitenancy in MySql by using Java Spring

如何通过 MySql Java Spring 最佳实践实现多租户并建议使用任何其他数据库而不是 MySql 进行多租户写入和读取报告目的。

  1. 为每个租户提供自己的 MySQL 用户名和密码。
  2. 然后给每个租户一个或多个自己的数据库。
  3. 然后只授予每个租户的用户名访问他们拥有的数据库的权限。

托管提供商上数以百万计的 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'@'%';

然后刷新权限使它们 'take.'

  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