如何在数据库中管理多个站点管理员和用户?

时间:2009-08-06 12:43:07

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

我必须为拥有数百万用户的应用程序设计数据库。现在该网站将拥有多个管理员,如HRadmin,SuperAdmin,SalesAdmin。我只能拥有一个管理员角色。

我担心的是,如果我处理一个表中的所有用户相关数据,意味着所有用户,无论是管理员还是用户,凭据都将存储在单个表中,搜索对于唯一用户名和其他事情来说可能非常慢。

人们建议,为管理员和用户提供不同的页面,在查询字符串中添加关键字并在代码中提取它以查找实际的管理员角色。

我应该如何在数据库中实现这一点,以便前端不会变得笨重。我使用的是asp.net2.0和sql server 2005.

5 个答案:

答案 0 :(得分:3)

由于您使用的是ASP.NET和SQL Server 2005,请查看使用ASP.NET Membership。有一个工具可以为您构建数据库表,并包括对多个用户,角色和配置文件字段的支持。

以下是对ASP.NET成员资格的广泛了解:http://www.4guysfromrolla.com/articles/120705-1.aspx

答案 1 :(得分:0)

我同意,使用ASP.NET成员资格提供程序。您只需要在用户登录时进行一次查找 - 然后您可以使用forms authentication创建一个包含身份验证和角色详细信息的安全cookie。只要你有一个索引良好的表,即使你有数百万行,单个查找应该很快。

答案 2 :(得分:0)

如果您使用ASP.NET成员资格 - 请同时阅读Performance Considerations for Applications Using Services

拥有数百万用户需要进行一些优化,例如我们使用文章中描述的CacheRolesInCookie

答案 3 :(得分:0)

相信我你只想要一个用户表,特别是如果你要检查唯一的用户名。正确的索引应该使它正常工作。您可能还需要一个相关的表来定义每个人拥有的角色(他们可能有多个角色。)

答案 4 :(得分:0)

在查询字符串中添加关键字是一个非常非常错误的想法。如果我知道使用哪个关键字成为管理员,我可以伪造自己的管理员权限?如果用户已登录,您可以将他的凭据放在会话或cookie中(我喜欢会话,因为cookie可以在客户端更改),这可能会为您节省大量的数据库请求(我不知道任何系统不断更新您的凭据,据我所知,当您使用Active Directory时,即使Windows缓存它们也是如此。

如果您担心在表中查找用户名需要很长时间,您应该优化数据库表。在用户名上添加一个索引(或将其用作主键),您将不会遇到搜索用户名的性能问题(同样,在用户名上执行许多搜索时,SQL Server会尝试自己对其进行优化)。

同样使用不同的页面似乎可以加快速度,但是当您需要对代码进行更改时,您会遇到很大的问题,因为您必须在多个位置修复相同的内容。有时可重用性和可维护性应该超过速度!