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

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

原始产品版本:SQL Server
原始 KB 编号: 327489

摘要

可以使用 OPENROWSET SQL Server 中的 或 OPENDATASOURCE 语句作为即席方法,从远程 OLEDB 提供程序(包括远程SQL Server实例)连接和访问数据。 仅当指定提供程序的 DisallowAdhocAccess 注册表选项显式设置为 0 并且启用了 Ad Hoc Distributed Query 高级配置选项时,这些语句才可用于访问 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>

    示例:如果尝试为适用于 ODBC 驱动程序的 Microsoft OLEDB 提供程序更改此项,密钥将为:

    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>

重启要求

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

默认行为

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

注意

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

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

另请参阅