SQL Server 2017 开放式设置与 Excel 2016
Posted
技术标签:
【中文标题】SQL Server 2017 开放式设置与 Excel 2016【英文标题】:SQL Server 2017 OPENROWSET with Excel 2016 【发布时间】:2020-01-17 23:07:35 【问题描述】:我对 SQL Server 和OPENROWSET
权限感到完全困惑。
我们的团队有一个广告组。该组包含在 DEV 服务器的 Windows 管理员本地组中。此同一个 AD 组对 SQL Server 2017 的本地安装具有 SysAdmin 权限。
正在尝试运行命令:
SELECT *
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0','Excel 12.0;Database=C:\Work\test.xls;HDR=YES',['sheet1$'])
对我有用,但对我的任何队友都不适用。
如果有关于使用 OPENROWSET
命令的安全要求的最终文档 - 我还没有找到它(请 - 不要让我访问 docs.microsoft.com - 该文档不是以任何方式编写的我理解)。
我发现了其他问题,包括如果我更改 Excel 工作簿中工作表的名称 - 命令失败(是的 - 我在进行更改后关闭了工作表)。
最后 - 关于OPENROWSET
使用的一些反馈 - 一般是个好主意吗?一个坏主意?几乎是中立的,但要为这些问题做好准备?
我希望这个问题足够具体,可以回答 - 我可能已经花了 20 多个小时试图弄清楚如何理解它是如何工作的,以便我可以让它工作并始终如一地使用它。
谢谢!
【问题讨论】:
【参考方案1】:所以诚实地解决 SQL Server 的安全/权限和错误可能是我工作中最令人沮丧的方面。
关于您的困境的前几个问题和想法。
您是否真的要让您的团队连接到您的数据库 系统管理员权限?我不会那样做,句号。 会刷新数据吗?如果是,我建议你摄取这些数据 进入一个带有进程的sql表,可能是python,ssis,dts包, powershell,随心所欲。如果数据在那个 excel 文件中始终是静态的,我建议也许让它像一个链接服务器一样(希望)减少权限问题?此外,根据我的记忆,这样查询起来更容易。
无论如何,这篇文章(非 msdn 链接)可能会有所帮助?我以前做过一次这样的事情,困难的时间稍微少了一点,但后来又涉及到向 sql server 添加驱动程序(通常)。但是,那么我不必允许多个用户 sysadmin - 我认为任何事情都比这更好。
https://www.sqlshack.com/query-excel-data-using-sql-server-linked-servers/
有时问题不在于运行查询的用户,而是 SQL Server 使用它运行的帐户来获取文件的权限。本文也讨论了这方面。我不确定这是您的问题,正如您所说它适用于我,但不适用于您,但至少可以阅读文章的那部分?
【讨论】:
感谢您的回复 - 您链接的文章为我提供了整个 OLEDB 子系统的不同视图。不幸的是 - 没有关于我的情况的详细信息,但确实提供了“分布式查询”的官方术语。回答您的问题 - 用户只是 TEST 中的系统管理员,我们在 PROD 中有更多的安全控制。其次 - 数据是动态的。我们实际上是在读取一个文件名(每次都不同),然后每次使用该文件名打开一个包含不同数据的 Excel 表格。非常动态 - 所以链接服务器将无法工作。我们考虑过SSIS SSIS 将是解决这个问题的方法。最简单的方法是使用 Cozyroc 插件,它可以相当容易地处理动态文件和列。我定制了一个,它在没有 Cozyroc 的情况下在数据库表中保存文件和字段信息,但它非常复杂并且包含 C# 脚本。我发现 python 非常简单,你也许可以利用它。请记住,批量导入是最快的摄取方式,这是 SSIS 主要使用的方式(快速加载)。祝你好运! 非常感谢您的建议 - 这不是我想听到的,但是...我仍然感谢您的帮助!以上是关于SQL Server 2017 开放式设置与 Excel 2016的主要内容,如果未能解决你的问题,请参考以下文章