以安全模式连接MDB
如果Access的安全模式已经建立,就必须使用一种允许在连接字符串中传递登录信息的连接技术。在Beta2中,ODBC通用提供程序就是最佳选择(对软件的最终版本来说,还是期望OLEDB解决方案)。与第2章使用的连接MDB文件的技术相比,有如下四个区别:
● 使用了SqlDataSource控件。
● 使用了通用OLEDB提供程序和本地JET提供程序。
● 在连接字符串中包含了UserID和Password属性。
● 在某些情况下,包含了用户组安全文件的名称。
Access具有两种安全类型。一个是所有用户都可使用的简单的数据库密码,可以通过Access中的Tool->Security->Set Database Password来指定密码。对这种配置来说,只要在连接字符串中包含Database Password属性并将连接字符串放入Web.config文件即可,如下所示。ASPX页面上的属性也在随后给出。
<add name="NorthwindConnectionString"
connectionString=" Provider=Microso£t. Jet. OLEDB .4.0;
Data Source=~/App_Data/MyFile.mdb;
Persist Security Info=True;
Database Password=MyPasswordForTheDatabase;
providerName="System.Data.OleDb" />
Access还提供了用户级安全,允许用户的定义并可以将访问数据库的特定对象的许可授予用户。如需配置这种类型的安全,可以依次运行MS Access中的User-Level Security Wizard来创建用户组信息文件。这个文件定义了允许特定数据库(或可选的所有数据库)的用户和许可。一旦在Access中创建了这个用户组文件,可以切换至VWD并指定用户组文件的路径为Jet OLEDB:连接字符串中的System Database属性,以及用于连接数据库的特有的证书(用户ID和密码),如下所示(同样地,用于Web.config文件)。请注意数据MDB文件和以.MDW为后缀名的相关安全文件都在连接字符串中定义。
<add name="NorthwindConnectionString"
connectionString=" Provider=Microsoft. Jet. OLEDB .4.0;
Data Source=~/App_Data/MyFileWithPassword.mdb;
Persist Security Info=True;
User ID=MyuserId;
Password=MyPassword;
Jet OLEDB:System Database=~/Data/Security.mdw
providerName="System.Data.OleDb" />
作为对第3章的回顾,回忆一下您接着在ASPX页面上使用了如下语法:
<asp:SqlDataSource ID="SqlDataSourcel" Runat="server"
ConnectionString="<%$ ConnectionStrings:NorthWindConnectionString %>"
SelectCommand=" ... ">
</asp:SqlDataSource>
同样地,本文不是专门讨论在Access中安装安全模式,但是如果有模式存在,那么您可以按照在前面段落中描述的那样连接数据库文件。
试一试 #1—— 用密码连接Access MDB
在添加Access安全模式之前,应当了解一下数据库安全的理论知识。安全模式可以防止使用MDB文件中的数据,甚至防止从Access打开任何MDB文件。如果使用安装在不用于生产MDB的机器上的Access,那么犯错误的可能性将会降低。
(1) 在C:/Websites/BegAspNet2Db/App_Data文件夹中,创建Northwind的一份副本,名为NorthwindPass.mdb。在Access 2003中,打开NorthWindPass为单独使用,如下所示。依次单击File->Open并浏览C:/Websites/BegAspNet2Db/App_Data文件夹。单击NorthWindPass。观察右下角Open按钮现在有一个下拉选项。展开Open按钮并单击Open Exclusive。通过单击Tools->Security->Set Database Password来添加密码。我们将使用north56wind。关闭MDB文件并重新打开以检查是否需要密码。关闭NorthWindPass.MDB并关闭Access。
(2) 接下来,添加连接字符串至Web.config文件,如下所示:
<connectionStrings>
<add name="AccessNorthwindPassword"
providerName="System.Data.OleDb"
connectionString="Provider=Microsoft.Jet.OLEDB.4.0;
Data Source=~/App_Data/NorthWindPass.mdb;
Persist Security Info=True;
Database Password=north56wind"
/>
</connectionStrings>
(3) 创建名为C:/Websites/BegAspNet2DB/ch04的文件夹并在其中创建名为TIO- 1-AccessPassword.ASPX的页面。在Source视图中,添加SqlData Source控件(不是AccessDataSource)并将其连接至Web.config中初期的连接字符串。设置选择命令从Customers表中读取消费者ID和姓名。添加GridView来显示这些值。保存页面,页面如下所示,并在浏览器中查看。
<body>
<form id="forml" runat="server">
<div>
<asp:SqlDataSource ID="SqlDataSourcel" Runat="server"
ConnectionString="<%$ connectionStrings:NorthwindConnectionString %>"
SelectCommand=" SELECT CustomerID, Name FROM Customers">
</asp:SqlDataSource>
<asp:GridView ID="GridViewl" Runat="server"
DataSourceID="SqlDataSourcel"
AutoGenerateColumns=true
>
</asp:GridView>
</div>
</form>
</body>
示例说明 #1—— 用密码连接Access MDB
与第2章的无密码的示例相比,在数据源控件中有四个关键的变化。第一个是在ASPX页面中。使用SqlDataSource而不是AccessDataSource的原因是因为AccessDataSource不接受连接字符串(只接受路径和文件名称)。而我们需要连接字符串来提交登录信息。
<asp:SqlDataSource …
现在将注意力转向Web.config文件。第二,SqlDataSource的默认提供程序是Microsoft SQL Server,所以您必须重写这个默认值。在本例中,指定另外的提供程序为通用OLEDB提供程序。
ProviderName="System.Data.Oledb"
第三,您使用通用的提供程序(OLEDB)。这意味着它只是将工作委托给本地的提供程序。因此,在连接字符串中,必须指定哪个本地提供程序将执行实际的工作。
ConnectionString="
Provider=Microsoft.Jet.OLEDB.4.0;
最后,您提供连接字符串所需的常规值,包括MDB的路径和名称、用户ID和密码。
Data Source=c:/websites/begaspnet2db/App_Data/NorthwindPass.mdb;
User ID=MyID;
Password=MyPassword;"
除了这四点语法区别之外,这个连接与第2章的相同。
试一试 #2—— 以用户组安全连接MDB文件
现在我们来创建使用用户级安全的Access数据库,并用ASPX页面与其连接。
(1) 打开Windows Explorer,在其中创建 C:/Websites/BegAspNet2Db/ App_Data/ Northwind.mdb的一份副本并将其命名为NorthwindWorkgroup.mdb。在Access 2003中打开这个新文件。单击Tools|Security|User-Level Security Wizard并执行如下步骤:
● 创建新的用户组文件,单击Next,将其作为默认用户组文件,并再次单击Next。
● 允许验证所有的对象,单击Next,将Full Data Users组添加至文件,并再次单击Next。
● 不要对Users组授予权限并单击Next。添加新的用户,名为“aspxpage”,密码为“north78wind”,并且一定要单击“Add this user to list”按钮,然后单击Next。
● 下拉列表选择Select aspxpage并将其赋给Full Data Users组;单击Next和Finish。
您可以保存和/或者打印安全设置报告,但是本练习不要求这么做。关闭MDB和Access,然后打开NorthwindWorkgroup并提供aspxpage和north78wind证书,测试您的安全模式。
(2) 切换至VWD并添加连接字符串至Web.config文件,如下所示:
<add name="AccessNorthwindWorkgroup"
connectionString="Provider="Microsoft.Jet.OLEDB.4.0" ;
Data Source="C:/WebSites/BegAspNet2Db/App_Data/NorthwindWork Group.mdb" ;
Persist Security Info=True;
User ID=aspxpage;
Password=north78 wind ;
Jet OLEDB:System Database=C:/WebSites/BegAspNet2Db/App_Data /Security.mdw"
providerName="System.Data.OleDb" />
(3) 创建名为TIO-2-AccessWorkgroup.aspx的文件。添加使用了Web.config文件中的AccessNorthwindWorkgroup连接字符串的SqlDataSource。添加GridView显示信息,如下所示。保存并在浏览器中进行测试。
<%@ Page Language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtmlll/DTD/xhtmlll.dtd">
<script runat="server">
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Ch04-Tio2-AccessWithWorkgroup</title>
</head>
<body>
<h2>Chapter 04 Tio #2 Access With Workgroup</h2>
<form id="forml" runat="server">
<div>
<asp:SqlDataSource ID="SqlDataSourcel" runat="server"
ConnectionString="<%$ ConnectionStrings :AccessNorthwindWorkgroup %>"
ProviderName="<%$
ConnectionStrings:AccessNorthwindWorkgroup.ProviderName %>"
SelectCommand="SELECT[ProductID],[ProductName]FROM[Alphabetical
List of Products]">
</asp:SqlDataSource>
<asp:GridView ID="GridViewl" Runat="server"
DataSourceID="SqlDataSourcel"
AutoGenerateColumns=true
>
</asp:GridView>
</div></form></body></html>
示例说明 #2—— 以用户组安全连接MDB文件
Access 2003支持两种安全模式类型。上一个练习演示了简单的密码。在本练习使用的模式中,首先创建了用户和组,然后授予特定的权限。这些证书都保存(当然也加密)在名为Security.mdw的文件中。在对Northwind创建了名为NorthWindWorkgroup的副本之后,执行了安全向导程序。本文并不是介绍Access安全,但是如果您执行了以上步骤,最后您将得到一个名为aspxpage、密码为north78wind的新用户,并且该用户在Full Data Users组当中。
在Web.config中添加了连接字符串,该字符串与上一个练习相比有三方面的不同。第一,您指定了用户名。第二,现在的Password属性引用了指定用户的密码,而不是上一个练习中的一般数据库密码。第三,指定了安全文件的位置。
回到ASPX页面中,您要做的事情不多。回想一下您使用的是SqlDataSource而不是AccessDataSource,所以可以指定能够传递证书的OLEDB提供程序。然后只要从Web.config文件中指定正确的连接字符串。