允许用户从SQL执行BCP导出命令的最安全方法是什么?

时间:2012-10-29 17:50:49

标签: sql-server security bcp xp-cmdshell sql-server-administration

我目前正在一个环境中,能够从手动运行的SQL脚本中导出表格以编程方式提供帮助。

从脚本执行导出将是从存储过程中运行整个过程的第一步,因此我必须能够从SQL启动导出。

组织目前在大多数服务器上具有以下配置 -

  • SQL Server 2005或2008
  • xp_cmdshell - 已停用
  • CLR - 已启用

最终,我希望能够调用一个传递以下参数的过程并让它执行导出。

  • 表名称
  • 文件路径/名称(在网络共享上)
  • 文件格式

目前BCP在功能方面似乎是一个完美的选择,但由于xp_cmdshell被禁用,我无法通过命令行调用它。

该组织非常小而且很乐意为安全解决方案而努力,到目前为止我的印象是他们对安全性有很好的控制。他们已经决定禁用xp_cmdshell,但如果我能提出一种安全的方法来允许使用它,我认为他们会很容易接受。

在我的研究中,我遇到了'EXECUTE AS'功能以及使用证书签署程序,但如果任何一种方法都可以帮助我们仍然无法解决问题我实现了我想要的目标。

另外,如果你有另一种解决方案可以让我达到同样的最终效果,我全都听见了!

1 个答案:

答案 0 :(得分:0)

正如Aaron Bertrand所指出的,问题是xp_cmdshell已禁用。

您可以考虑两种选择。

  1. 使用BULK INSERT。需要INSERT和ADMINISTER BULK OPERATIONS权限

  2. 创建类型为"操作系统(CmdExec)"的SQL代理作业运行BCP。您可能需要代码来创建/更新作业以传递参数。