【发布时间】:2018-10-24 03:11:37
【问题描述】:
我正在尝试将存储选择过程从 SQL Server 调用到 Excel。
在 SSMS 中可以写成
@val1=1;
@val2=2;
Execute SP_DoStuff(@param1=@val1,@param2=@val2);
查看类似的问题,一个常见的答案是连接参数并作为动态 SQL 运行。例如: Use values in cells as parameters in stored procedure in power query editor
答案就在眼前
Source = Sql.Database("xxxxxxxxxxxxxxxxx", "xxxxxxxxxxx", [Query=
"#(lf)#(lf)EXEC#(tab) [dbo].[TestParameter]#(lf)
#(tab)#(tab)@from = '" & YourDateMethod & "'#(lf)
#(tab)#(tab)@isValid = 1,#(lf)
#(tab)#(tab)@someInt = 90"
])
in Source
除非我在这里遗漏了什么,否则由于 YourDateMethod 的字符串连接,这个已建立的方法看起来很容易注入。
有没有一种方法可以安全地将 Excel 中的值输入到参数中?
例如 odbc 允许使用令牌进行准备
Execute SP_DoStuff(@param1=?,@param2=?);
然后喂?作为运行时的值
【问题讨论】:
-
也许改用 VBA。电源查询方法总是使用连接,比如reevessmith.wordpress.com/2014/08/19/…
-
请看here
-
值得注意的是,如果您使用 Excel 连接到一般的 SQL 数据库,那么您天生对任何事物都是开放的。 Excel 不是一个安全的环境,任何有知识或有兴趣操作 SQL 数据库的人都可以轻松地利用 Excel 中连接到数据库的任何排列。 Excel 的目标通常是防止用户意外搞砸任何事情,而不是恶意行事。
-
谢谢大家。 @Wedge 同意,依靠 Excel 没有完全安全的方法可以做到这一点。即使使用参数,最终用户仍然可以编辑查询或获取明文凭据。在这种情况下,最低权限安全看起来是最好的解决方案。最后,我严格限制了 SQL 用户并使用了字符串连接。
标签: sql-server excel powerquery