我遇到一个奇怪的问题,即如果从存储过程中调用批处理文件,则该批处理文件将无法完全工作,但是如果手动运行,则一切正常。
批处理文件仅创建几个目录,然后按如下所示设置权限:
md "\\SERVER\Share\Job\%1\Material"
md "\\SERVER\Share\Job\%1\Costs"
md "\\SERVER\Share\Job\%1\Project"
icacls "\\SERVER\Share\Job\%1\Material" /inheritance:r
icacls "\\SERVER\Share\Job\%1\Material" /grant "SYSTEM":F
icacls "\\SERVER\Share\Job\%1\Material" /grant "DOMAIN\Domain Admins":(CI)(OI)M
icacls "\\SERVER\Share\Job\%1\Material" /grant "DOMAIN\SG_Material":(CI)(OI)M
icacls "\\SERVER\Share\Job\%1\Costs" /inheritance:r
icacls "\\SERVER\Share\Job\%1\Costs" /grant "SYSTEM":F
icacls "\\SERVER\Share\Job\%1\Costs" /grant "DOMAIN\Domain Admins":(CI)(OI)M
icacls "\\SERVER\Share\Job\%1\Costs" /grant "DOMAIN\SG_Costs":(CI)(OI)M
icacls "\\SERVER\Share\Job\%1\Project" /inheritance:r
icacls "\\SERVER\Share\Job\%1\Project" /grant "SYSTEM":F
icacls "\\SERVER\Share\Job\%1\Project" /grant "DOMAIN\Domain Admins":(CI)(OI)M
icacls "\\SERVER\Share\Job\%1\Project" /grant "DOMAIN\SG_Project":(CI)(OI)M
下面的SQL存储过程将'foldernumber'传递给批处理文件(%1)
DECLARE @CMDSQL VARCHAR(1000)
SET @CMDSQL = 'C:\CreateFolders.bat ' + @foldernumber
EXEC master..xp_CMDShell @CMDSQL
运行“ CreateFolders.bat 1125”会正确创建一个名为1125的文件夹,创建子文件夹(“材料”,“成本”,“项目”)并设置所有权限。
如果随后使用SQL启动存储过程,则批处理文件将运行,创建“变量”文件夹及其子文件夹,但不应用权限。
几件事值得一提:
感觉存储过程没有以足够高的特权运行,但是我不确定如何进行更改(如果可能的话)。
答案 0 :(得分:0)
最终弄清楚了。
我更改了批处理文件以删除继承并在一行上授予SYSTEM权限。
因此,此:
icacls "\\SERVER\Share\Job\%1\Project" /inheritance:r
icacls "\\SERVER\Share\Job\%1\Project" /grant "SYSTEM":F
icacls "\\SERVER\Share\Job\%1\Project" /grant "DOMAIN\Domain Admins":(CI)(OI)M
icacls "\\SERVER\Share\Job\%1\Project" /grant "DOMAIN\SG_Project":(CI)(OI)M
对此:
icacls "\\SERVER\Share\Job\%1\Project" /inheritance:r /grant "SYSTEM":F
icacls "\\SERVER\Share\Job\%1\Project" /grant "DOMAIN\Domain Admins":(CI)(OI)M
icacls "\\SERVER\Share\Job\%1\Project" /grant "DOMAIN\SG_Project":(CI)(OI)M
不能100%知道它为什么能工作,但是可以!