使用临时名称标识数据源

当引用 OLE DB 数据源的频率不足以保证配置链接服务器时,可使用临时名称作为表引用。在 SQL Server 中,可以使用 OPENROWSET 和 OPENDATASOURCE 函数来提供临时名称。

只有通过链接服务器才能控制谁可以访问特定数据源。由于无法对临时名称实施这种控制,因此默认情况下,对 SQL Server Native Client OLE DB 访问接口以外的所有 OLE DB 访问接口都禁用了临时名称。

重要说明重要提示

对于每个 SQL Server 实例,sysadmin 固定服务器角色的成员可以通过使用 DisallowAdhocAccess 访问接口选项和“即席分布式查询”服务器配置选项,对 OLE DB 访问接口启用或禁用临时连接器名称的使用。如果启用了即席访问,则任何登录到该实例的用户都可以执行包含临时连接器名称的 SQL 语句,这些名称引用了网络中可以通过该 OLE DB 访问接口访问的任何数据源。为了控制对数据源的访问,sysadmin 角色的成员可以对该 OLE DB 访问接口禁用即席访问,从而限制用户只能访问由管理员定义的链接服务器名称所引用的那些数据源。默认情况下,对 SQL Server Native Client OLE DB 访问接口启用了即席访问,对所有其他 OLE DB 访问接口禁用了即席访问。

OPENROWSET 和 OPENDATASOURCE 都提供普通连接信息。您可以使用这些函数来指定访问 OLE DB 数据源所需的所有信息;但是,不能交替使用 OPENROWSET 和 OPENDATASOURCE:

  • 不管 OLE DB 访问接口是通过指定表(或视图)名返回行集,还是通过指定返回行集的查询返回行集,您都可以使用 OPENROWSET。可以在 Transact-SQL 语句中使用 OPENROWSET 来代替表名或视图名。

  • 只有在访问接口显示行集并使用 catalog**.schema.object 批注时,才能使用 OPENDATASOURCE。可以在 Transact-SQL 语法中能够使用链接服务器名称的位置使用 OPENDATASOURCE。因此,在 catalog.schema.**object 批注中,OPENDATASOURCE 可用作涉及表或视图的由四个部分组成的名称的第一部分。

在无法配置永久链接服务器的特殊情况下,只能将 OPENROWSET 和 OPENDATASOURCE 用于访问外部数据。OPENROWSET 和 OPENDATASOURCE 并非提供链接服务器中的所有可用功能,例如登录映射管理、查询链接服务器的元数据的功能和配置各种连接设置(如超时值)的功能。

安全说明安全说明

当连接其他数据源时,SQL Server 将模拟适用于 Windows 身份验证登录帐户的登录名;但是,SQL Server 不能模拟 SQL Server 身份验证登录帐户。因此,对于经过 SQL Server 身份验证的登录名,SQL Server 可以通过使用运行 SQL Server 服务的 Windows 帐户的安全上下文,访问另一数据源(如文件)和非关系数据源(如 Active Directory)。对于此类登录帐户没有权限但运行 SQL Server 服务的帐户却拥有权限的其他数据源,这样做可能会授予此类登录帐户访问该数据源的权限。当您使用经过 SQL Server 身份验证的登录名时,应考虑这种可能性。

OPENROWSET 和 OPENDATASOURCE 的参数不支持变量。必须将这些参数指定为字符串文字。如果必须将变量作为参数传入,可以动态构造包含变量的查询字符串并使用 EXECUTE 语句执行该查询字符串。