请原谅我的沮丧,但 Windows 文件访问权限确实极其糟糕:
在 SQL-Server Management Studio 中,我使用存储过程来创建跟踪文件,如下所示:
DECLARE @TraceID INT;
DECLARE @MaxFileSize BIGINT = 50; -- File size limit in MB
DECLARE @TraceFilePath NVARCHAR(256) = N'C:\SQLTraces\Trace_OrderPart'; -- Base trace file path
-- Step 1: Create a new trace
EXEC sp_trace_create
@traceid = @TraceID OUTPUT,
@options = 2, -- File rollover enabled
@tracefile = @TraceFilePath,
@maxfilesize = @MaxFileSize,
@stoptime = NULL; -- No automatic stop
...
-- Step 4: Start the trace
EXEC sp_trace_setstatus @TraceID, 1; -- Start the trace
这确实创建了一些所谓的*.trc
文件,但是当我尝试使用 SQL Server Profiler 打开它们(参见 SSMS,“工具”菜单)时,我得到的是:
您可能会想:“没问题”。只需将文件复制到其他地方并在那里打开即可。然而,这不起作用,所以我尝试修改目录文件访问权限:我从这个开始:
我取消选中复选框并单击“将更改应用于此文件夹、子文件夹和文件”,我提供管理员权限,他完成所有操作,最后,当我再次单击目录时,我(再次)得到以下内容:
我尝试使用 WSL 强制执行它,但这也不起作用:
“谁有权访问此目录以及拥有什么样的访问权限?”
Prompt>/mnt/c$ ls -ltra | grep "SQLTrace"
drwxrwxrwx 1 scampsd scampsd 4096 Dec 2 14:40 SQLTraces
=>“scampsd”拥有完全访问权限。
我是谁?
Prompt>/mnt/c$ cd ~
Prompt>~$ pwd
/home/scampsd
=> 我是“scampsd”。
我该怎么做才能强制授予我访问该目录的权限?
访问权限不受复选框控制;它们由选项卡(或工具)
Read Only
控制。打开“安全 > 编辑...”并添加具有修改或更高权限的自己,或运行:Security
icacls.exe
代表
(M)
“修改”权限组,(OI)(CI)
标志使得条目自动被所有文件和子文件夹继承(因此通常不需要明确的递归更改)。WSL 文件系统代理在您自己的 Windows 帐户下运行,并且只具有与您相同的访问权限。与 Interix(或者可能是 WSL1,我猜?)不同,WSL2 VM 的内部存在一个独立的世界,具有自己的 UID 等(并且整个 WSL2 VM 完全由您控制 - 例如 VM 磁盘存储在您的用户配置文件中),因此与主机的所有通信也必须在您的帐户下运行,以防止它被滥用为简单的访问控制绕过。
WSL 中显示的 /mnt/c 文件权限毫无意义;没有从 NTFS ACL 到 Linux ACL 的转换。无论如何,由于几个不匹配的语义,这将是一次非常有损的转换;即使您使用了
getfacl
而不是ls -l
,某些东西(例如继承或 10+ 细粒度权限)也无法通过 Linux 实现的“POSIX 草案 ACL”来表达。(一些类 Unix 系统实现了与 Windows 95% 相同的 NFSv4 ACL,但不幸的是 Linux 没有。)