代码之家  ›  专栏  ›  技术社区  ›  Chris Barry

使用内置的ASP.NET身份验证提供程序是个坏主意,因为guid被用作主键等

  •  1
  • Chris Barry  · 技术社区  · 15 年前

    我正处于一个项目的阶段,在这个项目中,我需要扩展ASP.NET MVC网站中的用户成员资格字段。

    我经历了这些不同的思考过程。

    1. 使用“用户名”将用户加入记录。非常糟糕的想法,因为用户想要更改他们的用户名等。

    2. 然后我想我可以将userid的guid连接到其他表。

    3. 然后我想,如果将来需要将ID作为一个简单的ID,那么使用guid可能会很糟糕。所以我设置了一个链接表来连接guid到ints。

    4. 决定我不需要它,所以回到使用guid将事情链接在一起,这使得请求更加简单。

    5. 阅读大量讨论使用guid作为聚集索引时性能是可怕的。

    我现在很困惑,这是否意味着默认的ASP.NET身份验证对性能来说很糟糕?

    我知道人们不应该过早地考虑性能,但我希望这个应用程序最终会非常受欢迎,所以如果我必须“推出自己的”身份验证提供商,我想也许我现在应该这样做。

    由于ASP.NET成员资格的原因为我做了所有事情,因此我从中抽象出来,因此任何指向实际执行此操作方向的链接都将非常感谢。

    谢谢大家。

    2 回复  |  直到 15 年前
        1
  •  1
  •   Remus Rusanu    15 年前

    guid是比int或bigints更糟糕的选择,这在很多地方都有讨论和记录。他们可怕吗?不是真的。有一些应用程序对每一个密钥和外键都使用guid的恐怖故事,以及你拥有的东西,但它们都是例外。

    guid的独特性有其优点,如果使用得当,它们可以毫无问题地完成工作。我更愿意使用使用guid的默认提供者实现,而不是使用自己的guid。把你自己正确的和 更好的 比默认值重要。我不是用贬义的方式说这个,但是如果您需要了解guid对性能的影响的指导,那么您可能还没有准备好自己动手。

    使用默认值,测试它,测量然后决定,我的2c。

        2
  •  2
  •   Russ Cam    15 年前

    只需实现自己的成员资格提供程序并使用 int identity(1,1) 如果您关心默认ASPNET成员资格提供程序使用 GUID PK。

    写你自己的会员供应商是非常直接和诚实的,如果 GUID pk是唯一与默认实现有关的东西,那么 download the source for the built-in provider 并将代码更改为使用整数而不是guid。最多不应超过一小时。要完成此图片,请在数据库上运行aspnet_sql.exe以获取成员资格数据库,然后更改表和存储过程以匹配对源所做的更改。

    这里是 MSDN documentation on implementing a Membership Provider