【问题标题】:how do I integrate the aspnet_users table (asp.net membership) into my existing database如何将 aspnet_users 表(asp.net 成员资格)集成到我现有的数据库中
【发布时间】:2010-05-22 19:37:50
【问题描述】:

我有一个已经有用户表的数据库

列:
用户 ID - int
登录名 - 字符串
第一个 - 字符串
最后 - 字符串

我刚刚安装了 asp.net 成员表。现在我的所有表都加入到我的用户表中,外键输入“userId”字段

如何将 asp.net_users 表集成到我的架构中?以下是我想到的想法:

  1. membership_id 字段添加到我的用户表中,并在新插入时将该新字段包含在我的用户表中。这似乎是最干净的方式,因为我不需要破坏任何现有的关系。

  2. 打破所有现有关系并将我的用户表中的所有字段移动到 asp.net_users 表中。这似乎很痛苦,但最终会导致最简单、标准化的解决方案

有什么想法吗?

【问题讨论】:

    标签: sql-server database-design asp.net-membership


    【解决方案1】:

    我经常使用各种形式的提供程序堆栈并取得了巨大的成功。

    我将继续尊重您对 SqlProvider 堆栈的经验是有限的,并且在您看来阻力最小的路径是拼接到 aspnet_db。

    抽象提供程序堆栈提供了清晰分离的功能集,它们以直观的方式相互补充和交互......如果您花时间了解它的工作原理。

    通过扩展,虽然并不完美,但 SqlProviders 为作为 asp.net 运行时基础的广泛的个性化和安全设施提供了一个非常强大的后备存储。

    您越努力理解这些工具的工作原理,就越少关注如何修改(阅读:破坏)现有架构,而更多地关注如何设想现有数据如何适应现有架构,您的努力就越少最终将花费以最终获得一个强大、易于理解的安全和个性化系统,而您不必设计、编写、测试和维护。

    不要误会我的意思,我并不是说不要自定义提供程序。这就是抽象工厂模式的全部意义所在。但在您自己承担将其拼接到数据库/模式/关键基础设施系统之前,您应该更好地理解它。

    一旦你达到了这一点,你就会开始看到,如果你专注于学习如何让系统在开发时间上拥有数千小时的开发时间,并且每天每分钟都有无数的用户为你工作您将在您和您的利益相关者真正感兴趣的事情上完成更多实际工作。

    所以 - 我建议您将用户导入 aspnet_db/sqlprovider 堆栈并利用所提供的工具。

    aspnet_db 中的 userId 是一个 guid,出于多种原因应该保持这种状态。如果您需要保留原始的完整用户标识符 - 将其存储在移动 pin 字段中以供参考。

    会员资格是您要放置与安全和识别相关的信息的地方。用户名、密码等

    个人资料是您想要放置易变元数据的地方,例如名称和网站偏好。

    无论如何——我想说的是,在你破解它之前,你需要更好地了解数据库和提供者。首先了解如何按照提供的方式使用它,您的体验将更加富有成效。

    祝你好运。

    【讨论】:

    • @code 诗人 - 我很欣赏你的想法,但你仍然没有处理我有 10 个表已经加入我自己的用户表的现实。我需要一个迁移策略
    • @ooo - 发布您的架构,我很乐意为您提供建议。可能有一个甜蜜点,两者可以有机地联系起来。
    • @code 诗人 - 基本上我有上面的用户表和其他 10 个表(我认为这些表的详细信息与问题无关),其中这些表都有一个外来的 user_id 列键入我现有的用户表。我不确定是否有任何其他信息与辩论有关
    • @ooo - 这不是辩论 - 我只是想提供帮助。我想查看架构的原因是尝试了解全局。很可能对 aspnet_db 中的存储过程进行简单修改就可以让您上路。现有密码在哪里,您有办法以纯文本形式读取它们以透明地建立 aspnet 帐户吗?所有其他表都是简单的孩子吗,例如没有不能支持级联删除的复杂 fk 关系?其他表是简单的元数据吗?一些规范化可以简化问题吗?哪些表会更好
    • @ooo - 适合作为个人资料数据?架构是否存在任何可能导致问题的微妙但严重的问题?这些都是可以通过简单查看您可以在 3 分钟内在 SMSS 中创建的图表来确定的。这是我问的唯一原因。
    【解决方案2】:

    根据我的经验,“ASP.NET 成员资格提供程序”引入的复杂性比它所解决的要多。所以我会选择选项 2:自定义用户表。

    附:如果有人成功使用“ASP.NET 会员提供程序”,请发表评论!

    【讨论】:

    • 我已经成功使用了“ASP.NET 成员资格提供程序”,但没有使用内置的 SqlMembershipProvider。我创建了自己的自定义成员资格提供程序来处理我的表模式。我没有实现 MembershipProvider 的所有方法,只是我需要的那些。
    • 我几乎总是用关联的自定义角色 HTTPModule 编写自己的成员资格和角色提供者。提供者的基础设施很棒,但内置的提供者远非有限。这很容易实现,并且不会将我束缚在几乎永远无法满足实际业务需求的数据库结构中。如果您想编写自己的自定义提供程序,也很容易......(smelser.net/blog/post/2008/10/29/Ill-be-your-Provider.aspx
    猜你喜欢
    • 1970-01-01
    • 2011-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-14
    相关资源
    最近更新 更多