3

我有两个表文件和用户,我想查看每个用户的文件信息C:\Users\%USERNAME%\Documents

因此,例如,这将从“示例”文档中获取信息:

SELECT * 
FROM file 
WHERE path LIKE 'C:\Users\example\Documents\%%';

但是用户名来自用户

SELECT username FROM users;

返回

+--------------------+
| username           |
+--------------------+
| Administrator      |
| DefaultAccount     |
| example            |
| Guest              |
| WDAGUtilityAccount |
| SYSTEM             |
| LOCAL SERVICE      |
| NETWORK SERVICE    |
+--------------------+

或者,有:

SELECT directory FROM users;

+---------------------------------------------+
| directory                                   |
+---------------------------------------------+
|                                             |
|                                             |
| C:\Users\example                            |
|                                             |
|                                             |
| %systemroot%\system32\config\systemprofile  |
| %systemroot%\ServiceProfiles\LocalService   |
| %systemroot%\ServiceProfiles\NetworkService |
+---------------------------------------------+

它提供了路径的第一部分,但仍然无法将“文档”加入查询结束并运行文件查询。

那么,我如何遍历每个用户名。

我试过修改,但两个表都不能修改

4

2 回答 2

1

JOIN这是使用查询的绝佳机会:

SELECT f.*
FROM file f JOIN users u
WHERE f.path LIKE 'C:\Users\' || u.username || '\Documents\%%'

当您运行此查询时,osquery 将首先生成用户列表,然后将用户名替换为提供给file表的路径。

JOIN是一种非常强大的方法来组合各种表格的结果,值得花一些时间来试验和学习如何使用这种能力。

于 2019-07-06T19:25:18.877 回答
0

Zach 的回答很好,但有时用户目录的名称可能与其各自的用户名不同。

值得庆幸的是,我们directoryusers表中也有返回用户主目录的列。使用此列将防止目录/用户名不匹配导致查询输出出现问题:

SELECT f.*
FROM file f JOIN users u
WHERE f.path LIKE u.directory || '\Documents\%%';
于 2019-12-27T19:07:37.263 回答