ADO 安全设计功能

以下部分介绍 ActiveX 数据对象 (ADO) 2.8 及更高版本中的安全设计功能。 这些更改是在 ADO 2.8 中进行的,以提高安全性。 ADO 6.0 包含在 Windows Vista 中的 Windows DAC 6.0 中,在功能上等同于 ADO 2.8,后者包含在 Windows XP 和 Windows Server 2003 中的 MDAC 2.8 中。 本主题提供有关如何在 ADO 2.8 或更高版本中最好地保护应用程序的信息。

重要

如果要从早期版本的 ADO 更新应用程序,建议先在非生产计算机上测试更新的应用程序,然后再将其部署到客户。 这样,就可以确保在部署更新的应用程序之前了解任何兼容性问题。

Internet Explorer 文件访问方案

在 Internet Explorer 的脚本网页中使用 ADO 2.8 及更高版本时,以下功能会影响其工作原理。

修订和改进的安全警告消息框现在用于提醒用户

对于 ADO 2.7 及更早版本,当脚本网页尝试从不受信任的提供程序运行 ADO 代码时,将显示以下警告消息:

This page accesses data on another domain. Do you want to allow this? To
avoid this message in Internet Explorer, you can add a secure Web site to
your Trusted Sites zone on the Security tab of the Internet Options dialog
box.

对于 ADO 2.8 及更高版本,不再显示上述消息。 相反,以下消息会显示在此上下文中:

This Website uses a data provider that may be unsafe. If you trust the
Website, click OK, otherwise click Cancel.

上述消息允许用户做出明智的决策,同时了解任一选择的后果:

  • 如果用户信任站点,单击“确定”将允许所有磁盘安全代码(除本主题后面介绍的磁盘可访问 API 除外的所有 ADO 方法和属性)在浏览器窗口中运行和执行。

  • 如果用户不信任该站点,单击“取消”将阻止 ADO 代码的整个数据访问过程运行和执行。

磁盘可访问的代码现在仅限于受信任的站点

ADO 2.8 中进行了其他设计更改,这些更改专门限制了一组有限的 API 的能力,这可能会暴露在本地计算机上读取或写入文件的可能性。 在运行 Internet Explorer 时,为安全起见,以下是被进一步限制的 API 方法:

对于这些可能可供磁盘访问的有限函数集,如果使用这些方法的任何代码在 Internet Explorer 中运行,ADO 2.8 及更高版本将发生以下行为:

  • 如果提供代码的网站之前已添加到“受信任的站点”区域列表中,则代码会在浏览器中执行,并授予对本地文件的访问权限。

  • 如果站点未显示在“受信任的站点”区域列表中,则会阻止代码并拒绝访问本地文件。

    注意

    在 ADO 2.8 及更高版本中,用户不会收到警报或建议将站点添加到“受信任的站点”区域列表。 因此,受信任的站点列表的管理是部署或支持需要访问本地文件系统的基于网站的应用程序的人员的责任。

对 Recordset 对象的 ActiveCommand 属性的访问被阻止

在 Internet Explorer 中运行时,ADO 2.8 现在阻止访问活动 Recordset 对象的 ActiveCommand 属性,并返回错误。 无论页面是否来自在“受信任的网站”列表中注册的网站,都会发生此错误。

OLE DB 提供程序和集成安全性的处理方式变更

在审查 ADO 2.7 及更早版本以发现潜在安全问题时,发现了以下场景:

在某些情况下,支持“集成安全性”DBPROP_AUTH_INTEGRATED 属性的 OLE DB 提供程序可能会允许脚本化网页重复使用 ADO 连接对象,从而无意间使用用户的当前登录凭据连接到其他服务器。 为防止这种情况,ADO 2.8 及更高版本会根据它们选择如何提供或不提供集成安全性来处理 OLE DB 提供程序。

对于从受信任的站点区域列表中列出的网站加载的网页,下表对 ADO 2.8 及更高版本在每个情况下如何管理 ADO 连接进行了细分。

用户身份验证、登录的 IE 设置 提供程序支持“集成安全性”,同时指定了 UID 和 PWD(SQLOLEDB) 提供程序不支持“集成安全性”(JOLT、MSDASQL、MSPersist) 提供者支持“集成式安全性”,设为 SSPI(未指定 UID/PWD)
使用当前用户名和密码自动登录 允许连接 允许连接 允许连接
提示输入用户名和密码 允许连接 连接失败 连接失败
仅在内联网区域自动登录 允许连接 提示用户显示安全警告 提示用户显示安全警告
匿名登录 允许连接 连接失败 连接失败

如果出现安全警告,消息框会通知用户:

This Website is using your identity to access a data source. If you trust this Website, click OK, otherwise click Cancel.

上述消息允许用户做出更明智的决定,并相应地继续。

注意

对于不受信任的站点(即“受信任的站点”区域列表中未列出的站点),如果提供程序也不受信任(如本节前面所述),用户可能会看到一行中的两条安全警告、有关不安全提供程序的警告以及有关尝试使用其标识的第二条警告。 如果用户单击“确定”以显示第一个警告,则会执行上表中所述的 Internet Explorer 设置和响应行为代码。

控制是否在 ADO 连接字符串中返回密码文本

尝试获取 ADO Connection 对象的 ConnectionString 属性的值时,会发生以下事件:

  1. 如果连接处于打开状态,则会对基础 OLE DB 访问接口进行初始化调用以获取连接字符串。

  2. 根据 DBPROP_AUTH_PERSIST_SENSITIVE_AUTHINFO 属性的 OLE DB 提供程序中的设置,密码与其他返回的连接字符串信息一同被包含在内。

例如,如果 ADO Connection 动态属性 持久安全信息 设置为 True,则返回的连接字符串中包含密码信息。 否则,如果基础提供程序已将属性设置为 False(例如 SQLOLEDB 提供程序),则会在返回的连接字符串中省略密码信息。

如果对 ADO 应用程序代码使用第三方(即非Microsoft)OLE DB 提供程序,则可以检查如何实现 DBPROP_AUTH_PERSIST_SENSITIVE_AUTHINFO 属性,以确定是否允许将密码信息与 ADO 连接字符串包含在一起。

加载和保存记录集或流时检查非文件类型设备

对于 ADO 2.7 及更早版本,文件输入/输出操作(如 打开保存)通常用于读取和写入基于文件的数据,在某些情况下,也允许使用指定非基于磁盘的文件类型的 URL 或文件名。 例如,LPT1、COM2、PRN.TXT、AUX 可用作系统上使用某些打印机和辅助设备之间的输入/输出别名

对于 ADO 2.8 及更高版本,此功能已更新。 若要打开和保存 RecordsetStream 对象,ADO 现在执行文件类型检查,以确保在 URL 或文件名中指定的输入或输出设备是实际文件。

注意

如本节中所述的文件类型检查仅适用于 Windows 2000 及更高版本。 它不适用于在早期 Windows 版本(如 Windows 98)下运行 ADO 2.8 或更高版本的情况。