我有两个表文件和用户,
我想查看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 |
+---------------------------------------------+
哪个提供了路径的第一部分,但仍然无法将“文档”加入查询的末尾,也无法运行文件查询。
所以,如何遍历每个用户名。
我尝试修改,但是两个表都不能修改
答案 0 :(得分:0)
这是使用JOIN
查询的绝佳机会:
SELECT f.*
FROM file f JOIN users u
WHERE f.path LIKE 'C:\Users\' || u.username || '\Documents\%%'
运行此查询时,osquery将首先生成用户列表,然后将用户名替换为file
表提供的路径。
JOIN
是组合各种表结果的一种非常强大的方法,值得花一些时间进行实验并学习如何使用此功能。
答案 1 :(得分:0)
Zach的回答很好,但是有时用户目录的名称可以不同于其各自的用户名。
非常感谢,我们在directory
表中还有users
列,该列返回用户的主目录。使用此列将防止目录/用户名不匹配导致查询输出出现问题:
SELECT f.*
FROM file f JOIN users u
WHERE f.path LIKE u.directory || '\Documents\%%';