使用来自另一个 table 的变量遍历 SQL 查询

Loop through SQL query using variable from another table

我有两个 tables 文件和用户,我想查看 C:\Users\%USERNAME%\Documents

每个用户的文件信息

例如这将从 'example' 文档中获取信息:

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

但用户名来自用户

SELECT username FROM users;

returns

+--------------------+
| 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 |
+---------------------------------------------+

它提供了路径的第一部分,但仍然无法加入 'Documents' 到查询结尾以及 运行 文件查询。

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

我试过修改,但是table都修改不了

这是使用 JOIN 查询的好机会:

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

当你运行这个查询时,osquery会首先生成用户列表,然后将用户名代入提供给file table.

的路径中

JOIN 是一种结合各种 table 结果的非常强大的方法,值得花一些时间进行试验并学习如何使用这种能力。

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

幸运的是,我们在 users table 中也有 directory 列,其中 returns 是用户的主目录。使用此列将防止 directory/username 不匹配导致查询输出出现问题:

SELECT f.*
FROM file f JOIN users u
WHERE f.path LIKE u.directory || '\Documents\%%';