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.

通过上述消息,用户可做出明智的决定,同时知道任一选择带来的后果:

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

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

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

ADO 2.8 中进行了其他设计更改,它们专门限制有限的一组 API 的能力,这可能会暴露在本地计算机上的文件中读取或写入内容的潜力。 下面是在运行 Internet Explorer 时已经进一步限制来提高安全性的 API 方法:

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

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

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

    注意

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

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

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

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)
使用当前用户名和密码自动登录 允许连接 允许连接 允许连接
提示输入用户名和密码 允许连接 连接失败 连接失败
只在 Intranet 区域自动登录 允许连接 显示安全警告提示用户 显示安全警告提示用户
匿名登录 允许连接 连接失败 连接失败

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

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 提供程序时),则返回的连接字符串中省略密码信息。

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

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

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

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

注意

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