本文介绍如何禁用使用 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)
打开 SSMS,并在链接服务器下展开提供程序。
单击以选择要使用的 OLE DB 提供程序,然后选择“ 提供程序选项 ”按钮。
向下滚动并选择 “禁止临时访问 属性”复选框,然后选择“ 确定”。
使用注册表编辑器禁用即席访问
重要
此部分(或称方法或任务)介绍了修改注册表的步骤。 但是,注册表修改不当可能会出现严重问题。 因此,按以下步骤操作时请务必谨慎。 作为额外保护措施,请在修改注册表之前先将其备份。 如果之后出现问题,您就可以还原注册表。 有关如何备份和还原注册表的详细信息,请参阅:如何备份和还原 Windows 中的注册表。
保存链接服务器后,只能通过注册表设置设置设置属性 DisallowAdHocAccess
。
添加 DisallowAdHocAccess 值
若要添加 DisallowAdHocAccess
该值,请执行以下步骤:
启动“注册表编辑器”。
找到并选择注册表中的密钥: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Providers<ProviderName>
示例:如果尝试为 Microsoft OLEDB Provider for ODBC Drivers 更改此项,密钥将为:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Providers\MSDASQL
在 “编辑 ”菜单上,选择“ 添加值”,然后添加以下注册表值:
Value name: DisallowAdHocAccess Data type: REG_DWORD Radix: Hex Value data: 1
退出注册表编辑器。
启用即席远程访问
确保启用即席分布式查询高级配置选项后,需要为指定的提供程序将 DisallowAdhocAccess 注册表选项设置为 0。
若要修改现有 DisallowAdHocAccess
值,请执行以下步骤:
启动“注册表编辑器”。
找到并选择
DisallowAdHocAccess
注册表中的密钥下的值: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Providers<ProviderName>示例:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Providers\Microsoft.ACE.OLEDB.12.0
在 “编辑 ”菜单上,选择 DWORD,键入 1,然后选择“ 确定”。
退出注册表编辑器。 对于命名实例,注册表项不同:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\<Instance Name>\Providers\<ProviderName>
重启要求
将值从 1 更改为 0 不需要重启 SQL 服务,而从 0 更改为 1 的更改必须重启 SQL 服务才能使所做的更改生效。 DisallowAdHocAccess
默认行为
使用和禁用远程 OLE BD 数据源OPENROWSET
OPENDATASOURCE
的临时访问,并且默认禁用,无需进行其他配置。 仅当以前显式启用此远程访问时,才需要使用本文中讨论的过程。
注意
使用默认设置时,如果尝试在即席查询中调用这些函数,则会收到类似于以下消息的错误消息:服务器:Msg 7415、级别 16、状态 1、第 1 行即席访问 OLE DB 提供程序“Microsoft.Jet.OLEDB.4.0”被拒绝。 必须通过链接服务器来访问此访问接口。
换句话说,对于特定的 OLE DB 访问接口, DisallowAdHocAccess
属性设置为 1 时,必须使用特定 OLE DB 访问接口的预定义链接服务器设置。 不能再传入引用该提供程序OPENROWSET
的临时连接字符串或OPENDATASOURCE
函数。