配置权限以从 SQL Server 中的 OLEDB 数据源访问远程数据

本文介绍如何禁用使用 OPENROWSET SQL Server 中的功能或 OPENDATASOURCE 功能的即席查询。

原始产品版本:SQL Server
原始 KB 数: 327489

总结

可以使用 OPENROWSET SQL Server 中的或 OPENDATASOURCE 语句作为即席方法,从远程 OLEDB 提供程序(包括远程 SQL Server 实例)连接和访问数据。 仅当 DisallowAdhocAccess 注册表选项显式设置为 0 时,这些语句才可用于从 OLE DB 数据源访问远程数据,并且 启用了即席分布式查询 高级配置选项。 如果未设置这些选项,则默认行为不允许临时访问。

本文提供有关通过 SQL Server Management Studio 和注册表设置以及默认行为配置 DisallowAdhocAccess 的其他详细信息。

使用 SQL Server Management Studio 禁用即席访问

DisallowAdHocAccess SQL Server Management Studio 中指定提供程序的属性(SSMS)

  1. 打开 SSMS,并在链接服务器展开提供程序

  2. 单击以选择要使用的 OLE DB 提供程序,然后选择“ 提供程序选项 ”按钮。

  3. 向下滚动并选择 “禁止临时访问 属性”复选框,然后选择“ 确定”。

使用注册表编辑器禁用即席访问

重要

此部分(或称方法或任务)介绍了修改注册表的步骤。 但是,注册表修改不当可能会出现严重问题。 因此,按以下步骤操作时请务必谨慎。 作为额外保护措施,请在修改注册表之前先将其备份。 如果之后出现问题,您就可以还原注册表。 有关如何备份和还原注册表的详细信息,请参阅:如何备份和还原 Windows 中的注册表

保存链接服务器后,只能通过注册表设置设置设置属性 DisallowAdHocAccess

添加 DisallowAdHocAccess 值

若要添加 DisallowAdHocAccess 该值,请执行以下步骤:

  1. 启动“注册表编辑器”。

  2. 找到并选择注册表中的密钥: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Providers<ProviderName>

    示例:如果尝试为 Microsoft OLEDB Provider for ODBC Drivers 更改此项,密钥将为:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Providers\MSDASQL

  3. “编辑 ”菜单上,选择“ 添加值”,然后添加以下注册表值:

    Value name: DisallowAdHocAccess
    Data type: REG_DWORD
    Radix: Hex
    Value data: 1
    
  4. 退出注册表编辑器。

启用即席远程访问

确保启用即席分布式查询高级配置选项后,需要为指定的提供程序将 DisallowAdhocAccess 注册表选项设置为 0

若要修改现有 DisallowAdHocAccess 值,请执行以下步骤:

  1. 启动“注册表编辑器”。

  2. 找到并选择 DisallowAdHocAccess 注册表中的密钥下的值: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Providers<ProviderName>

    示例: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Providers\Microsoft.ACE.OLEDB.12.0

  3. “编辑 ”菜单上,选择 DWORD,键入 1,然后选择“ 确定”。

  4. 退出注册表编辑器。 对于命名实例,注册表项不同: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\<Instance Name>\Providers\<ProviderName>

重启要求

将值从 1 更改为 0 不需要重启 SQL 服务,而从 0 更改为 1 的更改必须重启 SQL 服务才能使所做的更改生效。 DisallowAdHocAccess

默认行为

使用和禁用远程 OLE BD 数据源OPENROWSETOPENDATASOURCE的临时访问,并且默认禁用,无需进行其他配置。 仅当以前显式启用此远程访问时,才需要使用本文中讨论的过程。

注意

使用默认设置时,如果尝试在即席查询中调用这些函数,则会收到类似于以下消息的错误消息:服务器:Msg 7415、级别 16、状态 1、第 1 行即席访问 OLE DB 提供程序“Microsoft.Jet.OLEDB.4.0”被拒绝。 必须通过链接服务器来访问此访问接口。

换句话说,对于特定的 OLE DB 访问接口, DisallowAdHocAccess 属性设置为 1 时,必须使用特定 OLE DB 访问接口的预定义链接服务器设置。 不能再传入引用该提供程序OPENROWSET的临时连接字符串或OPENDATASOURCE函数。

另请参阅