关于成员角色的数据提供模型打算按下面的顺序进行讲述:
1. 给成员关系提供数据的模型
2. 给角色管理提供数据的模型
3. 深层探讨给成员关系和角色管理提供数据的模型: ASP.NETDB.MDF数据库.
4. 工具 aspnet_regsql.exe 的使用方法.
OK, 这里就从成员关系提供模型开始:
1. 成员关系提供模型 ( SqlMembershipProvider ).
在 ASP.NET 2.0 使用的成员关系中, 默认使用ASPNET.MD数据库来存放"成员-角色"关系,为了建立该数据库可以有两种方法.
方法一: 使用VS2005中自带的网站管理工具(Website Administration Tool): 可从解决方案中单击 ASP.NET Configuration 按钮直接启动该工具;还可通过从VS2005菜单选择Website命令, 然后单击 ASP.NET Configuration 启动该工具. (注, 建议使用这个工具前先弄明白其中的原理, 这里不再详细介绍该工具的使用, 请参考相关资料 ).
方法二: 使用数据库注册工具 (SQL Server Registration Tool aspnet regsql.exe): 使用该工具也可以在 SQL Server 2000/2005中建立数据结构模式. 使用方法将在后面讲到.
在使用第一种(网站管理)工具时, 当选择类似"选择验证模式"或"安全配置向导"时, 系统会自动在 App_Data 目录下建立aspnetdb.mdf 数据库.
而如果想将 "成员-角色"关系存放到其他数据库里, 例如存放在 SQL Server 2000中, 就需要利用 aspnet_regsql.exe工具来完成这个功能.
在使用这两种工具时请注意其差别: 当使用管理员工具时, 如果选择身份证模式为 From the internet, 系统会自动在 web.config 里添加如下代码:
<authentication mode="Forms" />
如果使用数据库注册工具 (aspnet_regsql.exe), 需要手动在 web.config里添加上述代码, 另外还需要理发数据库的连接方式.
SqlMembershipProvider 使用两张表来存储用户相关的信息.
(1). Aspnet_Users 表: 每一个注册的用户的基本资料都会存储在该表里.其中 UserID 列是每一个用户的身份表示, 它使用 GUID 确保用户ID的惟一.
(2). Aspnet_membership表: 它使用 UserID 来连接aspnet_Users 里的用户记录. Aspnet_Membership 表存储和用户相关的信息, 使用 Email, Password, question, answer等等.
SqlMembershipProvider模型存储位置在 Microsoft.NET\Framework\v2.0.50727\CONFIG目录下的 machine.config文件中 (其实后面将要讲到的所有模型定义都在此文件中).
默认的SqlMembershipProvider模型代码如下:
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
其中name="AspNetSqlMembershipProvider" 表示系统默认使用的 Provider 模型为 SqlMembershipProvider, 事实上在管理工具的 Provider 页也可以很明显地看到这个选项.
虽然默认模型给编程人员带来了很大的方便, 但是它并不能够完全适应我们自己的应用程序, 例如系统默认要求密码最小为 7 位 ( minRequiredPasswordLength="7" ), 其中还要求特殊字符必须包含一位( minRequiredNonalphanumericCharacters="1" ) , 但是我们的应用程序也许并不需要如此高的要求, 此时就要重写此模型..
又比如, 我们可能不但要求密码最少7位, 特殊字符必须包含一个, 而且还有额外的更高要求, 此时我们就可以设置 passwordStrengthRegularExpression 属性, 将其设置为正则表达式, 这样, 使得不满足正则表达式的密码同样不符合要求, 在这种情况下也同样需要重写 Provider 模型
下面演示如何重写 Provider 模型.
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
这样密码除了仅仅需要5位, 不需要包含特殊字符外, 还将requiresQuestionAndAnswer设置为false, 这样就不需要问题/答案的提示了, 这里使用了自定义的 CustomerMembershipProvider.
在默认的提供模型中还有一个重要的属性 connectionStringName="LocalSqlServer" , 表示系统使用的数据库连接为 LocalSqlServer, 该连接值同样可以在 web.config文件中找到, 如下:
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
这就表示系统默认使用的是 SQLEXPRESS 数据库. 而如果我们使用的是 SQL Server 2000, 则需要我们进行某种转换或重写 LocalSqlServer 配置;后面将会有详细的介绍.
OK, 成员关系提供模型 ( SqlMembershipProvider ) 暂时就讲到这里. 下面我们开始另一个模型的讲述, 更这个模型很多原理是相同的.
2. 角色管理提供模型 ( SqlRoleProvider).
由于角色管理模型和成员关系模型类似, 这里只列出主要部分.
ASP.NET使用 ASPNETDB.MDF中的两张表存入角色数据.
(1). Aspnet_Rolse: 该表存放系统角色列表.
(2).Aspnet_UsersInRoles: 该表记录用户所属于的角色.
同样系统在 machine.config 里提供了默认的角色管理配置, 代码如下:当然, 我们也可能根据需要重写此配置, 方法同用户关系提供模型的重写, 此处略.
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
3. 深层探讨给成员关系和角色管理提供数据的模型: ASP.NETDB.MDF数据库.
默认情况下, ASP.NET提供的成员和角色是 SqlMembershipProvider 和 SqlRoleProvider 模型. 相应 的使用基于 SQL Server 2005服务器的 ASP.NETDB.MDF 数据库存储成员角色的数据.
具体地说, 这些数据分别存放在预定义的表格里, 并通过预定义的存储过程执行方法. 为了在应用程序里使用默认的 membership和 role 关系, 需要在自己的应用程序里定义该预定义的表和存储过程, 只有这样才能够使用 SqlMembershipProvider 和 SqlRoleProvider 模型类的属性和方法.
如果还没有数据库, ASP.NET 将在应用程序的 App_Data 目录下建立 ASPNETDB.MDF 数据库, 不过这种方法缺乏灵活性, 通常开发人员面对的情况是我们需要将 ASP.NET2.0成员和角色关系加入到自己已有的数据库里, 即我们为应用程序设计的数据库里.
这样一来, 我们的应用程序将同时拥有两个数据库--ASNETDB.MDF和我们自己已经建立的数据库. 这显然对于维护和发布应用程序都是不便的, 一个较为理想的方法是将两个数据库整合到一个数据库.
例如我们可能已经建立了一个应用程序, 但该应用程序并没有成员和角色管理, 可是最近由于一些需要, 站点的某些内容要求只有特定的用户才能够访问, 或者一些内容被限制在具有某种角色的用户才能够访问, 这样不管在哪种情况下, 都需要在现有的数据库里添加相应的成员角色结构. 如果我们想保留ASP.NET2.0的成员和角色管理功能, 则我们的应用程序将使用两个数据库, 这为数据库维护带来很多不便. 因此数据库合并是必要的也是必须的.
那么怎样样才能够合并两个数据库呢? 即如何才能将一个数据库中的某些表结构导入到另一个数据库中呢? 这里我们的 aspnet_regsql.exe 工具该出场了.
4.工具 aspnet_regsql.exe 的使用方法.
利用 ASP.NET Server 的注册工具 ( aspnet_regsql.exe )将应用程序角色关系添加到现有的数据库是一个很简单的工作. 该工具位于 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 ( 系统盘 )
中. 然后运行 aspnet_regsql.exe; 此时将出现 ASP.NET Server 的安装向导. 从该向导里我们可以为我们的应用程序配置数据结构, 或者从数据库里删除该成员结构. 按着安装向导操作过程非常简单, 此处不再啰嗦。
另外, 此工具的功能远远不致这一项, 比如它可能设置几种类型的选项, 如指定 SQL 连接, 指定使用 SQL Server 来管理信息的 ASP.NET 应用程序服务, 批示将哪个数据库或表用于SQL 缓存依赖项, 以及添加或移除对使用 SQL Server 来存储和会话状态的支持.
.....................
希望这些对大家更深入的认识 ASP.NET 成员角色有所帮助.
下一讲述主要会结合登录控件组详细介绍ASP.NET中成员角色的应用. 希望大家关注.
不行了. 睡觉了 ZZZzzzzzzzzzzzzzzzzz~~~~~~~~~~~~~~~~~~~~~~