gpt4 book ai didi

sql-server - 设计用户表以进行单点登录以跨子域使用

转载 作者:行者123 更新时间:2023-12-02 13:18:04 25 4
gpt4 key购买 nike

我们有一个网站,其中包含以下子域:

  1. example.com - 主站点
  2. food.example.com
  3. fashion.example.com

每个域和子域都有不同的数据库,如下所示:

  1. exampleDB - 带有用户表的主数据库
  2. 食物数据库
  3. 时尚数据库

你尝试过什么?

  1. 目前,对于单点登录,我们计划在主站点中重定向用户进行注册。

  2. 子域中的订单处理从主数据库获取 UserID 并将其存储在相应子域的订单表中。

  3. 出于报告目的,我们将没有 FK 约束UserID 存储在 Orders 表中,因为我们有单独的数据库。

我可以看到here堆栈交换站点有单独的数据库,但它是否有单独的 users table 也有吗?

StackExchange 网络配置文件是否存储在单独的数据库中?

我可以从here看到每个站点的用户表都有 StackExchange Network 配置文件的 AccountId。

示例:

  1. Here是 Nick Craver 网络个人资料,ID:7598

  2. 他在历史站点中的个人资料具有与相同 ID 链接的帐户 ID:7598 检查 this查询。

我在 data dumbs 中的任何位置都看不到 Accounts 表,那么AccountId 被存储了吗?如何使用 AccountId 在多个站点中完成 SSO?

我的问题:我们是否需要在主数据库中使用单个用户表,或者我们必须为子域的数据库和链接主数据库用户ID创建单独的用户表,但不需要FK约束?哪个是购物网站的最佳设计?

任何帮助都会很棒。

最佳答案

您提到的 UserID 仅在单个数据库中的特定用户表中相同。它实际上不是您域中任何用户的标识符。要跨多个数据库识别用户,您需要为每个用户提供一个域级 ID。一种简单的方法是向全局唯一 ID(GUID,请参阅 https://msdn.microsoft.com/en-us/library/system.guid(v=vs.110).aspx )的用户类(表)添加一个名为 UID 或类似内容的属性(列),并将其用作域级 ID 来识别用户,而不是使用它。用户身份。这样您就可以在域中的多个数据库中自由存储用户信息。所以:

  • 您只能在每个子域的数据库中保存域级 ID,并使用该 ID 从主域数据库查询完整的用户配置文件。优点:内存消耗更少。权衡:在分布式系统中,从子域查询用户信息需要更长的时间,因为信息驻留在主数据库中。
  • 您可以在所有数据库中保存完整的用户信息,包括主数据库和子数据库。优点:查询速度更快。缺点:消耗更多内存,并且当用户信息发生更改时,您必须在所有数据库之间同步它。

关于sql-server - 设计用户表以进行单点登录以跨子域使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37455622/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com