mysql - 跨多个项目/服务器使用用户数据库?

标签 mysql mariadb

我有一个项目和某种子项目。现在我希望子项目使用与主项目相同的用户数据进行登录。本质上我有点想使用主项目的用户表(也许还有与用户相关的第二个表)。但这不是一条单向道路,我希望用户也能够在子项目上创建帐户,这对主项目也有效。

问题:这些项目为其 SQL 数据库使用不同的专用服务器。 (不过都是 MariaDB,版本 10 或 10.1)

我考虑了以下选项:

1) 我可以在子项目中打开 2 个 mysql 实例,一个用于访问子项目数据,另一个用于访问主项目中的用户数据。但这也带来了很大的缺点,a)好吧,我打开了 2 个连接,这可能还会带来性能损失,b)我根本无法在用户表上使用任何 JOIN。

2) 我听说有一种 FEDERATED 引擎,当某些查询涉及使用 FEDERATED 引擎的表时,可以使用该引擎自动进行远程调用。但是,MariaDB 似乎不再支持该引擎。 (我也不是来测试它,看看它可能带来什么其他缺点。我在某处读到这种方法存在潜在的安全问题,因为很容易读出主服务器的连接信息?)

3)我从未使用过复制,但如果我正确理解这个系统,我可以有第二个本地数据库基本上是主服务器的用户表的从属,对吗?但是,我担心这迟早会导致问题,特别是如果我考虑到将来可能会有更多的子项目使用主项目的用户表。当多台服务器尝试同时添加(或编辑)内容时,拥有许多维护完全相同数据的服务器听起来像是很多潜在的麻烦制造者。

4) 通过 OpenID 或 Oauth 的中央登录表单目前并不是一个理想的选择。现在我希望每个项目都提供自己的注册/登录表单。

这些(或其他)方法中哪一个是最佳的,并且对于该用例来说易于设置/维护?

最佳答案

虽然我已投票结束此问题,因为它是基于意见的,但我仍然会提出我的意见:创建一个中间服务来进行身份验证,并且该中间服务担心细节。

中间服务与两个数据库进行通信。它首先检查数据库 A,然后检查数据库 B。它可能会缓存结果。它可能会赋予一个数据库高于其他数据库的优先级。这就是您隐藏在您编写的方便的 REST API 后面的业务逻辑。

现在,您的主项目和子项目针对现已运行的中间服务发出 REST 请求。这些请求可以非常简单:这些凭证有效吗?如果是,则在您的项目中建立一个 session 。如果 session 可移植性很重要,请使用通用库来识别每个 session 的值。

这种架构感觉最符合逻辑——各个部分是分开的,业务逻辑包含在各自的单元中,没有太多机会出现不适当的冗余——但它正危险地接近于编写您自己的身份验证。您可能会考虑继续硬着头皮实现中间身份验证系统以使用已建立的协议(protocol)(例如 OAuth)或直接使用 OAuth 系统。

关于mysql - 跨多个项目/服务器使用用户数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52176251/

相关文章:

php - 使用数据库中的列填充数组

mysql - SQL - 价格随时间增加

MySQL 准备语句表 3

mysql - 如何在 MariaDB 10.2.6 中升级 MySQL

mysql - 如何将文本末尾替换为列中的前面

mysql - 有没有办法在 MariaDB 中将空字符串替换为 NULL 值?

mysql - SQL从两个表中获取结果

php - 使用 jquery ajax 检索并显示多个不同的 mysql 查询

mysql - mariadb外键插入错误

mysql - 尝试在 Bitnami 的 WordPress 多层堆栈中导入/导出 MariaDB 数据库时出现 2002 代码错误