尽管以具有访问权限的用户身份运行,Windows 任务计划程序仍无法访问 EFS 加密文件夹

尽管以具有访问权限的用户身份运行,Windows 任务计划程序仍无法访问 EFS 加密文件夹

我已将批处理文件设置为通过 Windows Server 2008 R2 中的任务计划程序运行。该批处理文件用于轮换和压缩 MySQL 日志,并且包含这些日志的文件夹使用 Windows 内置的 EFS 加密进行加密。我找到了一个可以压缩 (zip) 文件夹的 VBS 脚本,我正在使用它来压缩轮换后的旧日志文件。如果我在命令行中运行该批处理文件,它会运行良好。

问题是当我尝试让任务计划程序运行它时。我将其设置为每天运行一次,并以我自己的身份运行(我有访问权限并可以查看加密的日志文件等)。但是当任务运行时(无论是在预定时间还是我手动运行任务),它在运行 VBS 脚本时会卡住,说它未经授权。当批处理文件调用 CScript 来运行 VBS 脚本时,CScript 是否以同一用户(我自己)的身份运行?我只是从批处理文件中调用它,如下所示:

CScript  zipIt.vbs  %TEMPDIR%  %ARCHIVEDIR%\%TARGETZIP%

VBS脚本的具体内容如下:

Set objArgs = WScript.Arguments
InputFolder = objArgs(0)
ZipFile = objArgs(1)
CreateObject("Scripting.FileSystemObject").CreateTextFile(ZipFile, True).Write "PK" ^& Chr(5) ^& Chr(6) ^& String(18, vbNullChar)
Set objShell = CreateObject("Shell.Application")
Set source = objShell.NameSpace(InputFolder).Items
objShell.NameSpace(ZipFile).CopyHere(source)
wScript.Sleep 2000

我对 VBS 或 Windows 管理不是很了解,但我猜想这个脚本在加密文件夹中创建新文件时遇到了问题。因为当我关闭文件夹加密时,它可以在任务计划程序中正常工作。我曾考虑使用“Runas”和我自己凭据调用 CScript,但我不想将我的密码以明文形式存储在批处理文件中,因为其他用户可以访问这些文件(DatabaseAdmin 等)。在任务计划程序中,有一个“以最高权限运行”选项。这能解决问题吗?我避免这样做是因为我认为我应该尝试弄清楚如何让它以尽可能低的权限工作。

更新:在四处寻找时,我发现我实际上没有能力解密 MySQL 日志文件,即使我确实有对包含文件夹的这种能力(通过 cipher.exe /c 验证)。唯一具有解密权限的帐户是 SYSTEM。这可能是因为 MySQL 日志是由工具“MySQLAdmin flush-logs”创建的。据我了解,应用程序创建的文件归 SYSTEM 所有(对此不是 100% 确定)。也许我必须使用“runas”在脚本中调用 MySQLAdmin flush-logs。但我也有同样的问题,不想将我的凭据以明文形式存储在批处理文件中。我会在可以的时候进行测试。

任何帮助都将受到赞赏。

答案1

如果此日志文件从未被删除或重命名,那么您可以尝试使用 SysInternals 的 PsExec 工具以系统帐户运行密码来为您的帐户添加 EFS 访问权限。例如:

psexec -s cipher /adduser ...

但是,如果这是一个被替换的旋转文件,那么您将遇到此问题每一个由于 MySQL 是在系统帐户下运行,因此它不会创建任何文件。如果是这种情况,那么您应该考虑以具有已知密码和 EFS 证书的特定用户帐户运行 MySQL 服务器,无论是您自己的帐户还是专用帐户。这是您需要用来运行计划脚本的同一帐户。

相关内容