【问题标题】:Do stored procedures have the ability to delete a file from the OS?存储过程是否能够从操作系统中删除文件?
【发布时间】:2009-08-18 17:06:08
【问题描述】:

出于好奇,存储过程是否能够从操作系统中删除文件?

如果不是,我将不得不制作一个 Windows 批处理文件,删除该文件,然后使用 OSQL 运行存储过程。

【问题讨论】:

  • 执行 xp_cmdshell '删除 .'
  • 我会在接下来的一周左右尝试这些建议,最终我会选择我最喜欢的答案。

标签: sql-server sql-server-2005 stored-procedures


【解决方案1】:

从技术上讲,如果具有正确的权限,您可以执行 xp_cmdshell 向操作系统发出命令(或调用批处理文件等),但这可能不是一个好主意。如果您确实使用该方法,请对权限非常严格。

为清晰起见进行了编辑。

【讨论】:

  • 您可以发出“whoami”来确定 SQL xp_cmdshell 背后的用户(这比在服务中查找更有趣)。也可能需要考虑一些政策。
  • +1 虽然最后一句话很奇怪,但 SQL Server 已经可以访问您的操作系统,任何拥有系统管理员权限的人都可以访问。
【解决方案2】:

试试这个

选项 1 使用 xp_cmdshell 删除文件

xp_cmdshell 'del y:\file.dat'

选项 2 使用 OLE 自动化删除文件

DECLARE @ResultOP int
DECLARE @OLE_Obj  int

EXEC @ResultOP = sp_OACreate 'Scripting.FileSystemObject', @OLE_Obj OUTPUT
EXEC @ResultOP = sp_OAMethod @OLE_Obj, 'DeleteFile', NULL, 'y:\file.dat'
EXEC @ResultOP = sp_OADestroy @OLE_Obj

【讨论】:

    【解决方案3】:

    您也可以为此使用 CLR 存储过程。这是托管存储过程存在的主要原因之一,以安全的方式与操作系统交互。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-16
      • 1970-01-01
      • 2020-10-31
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多