使用来自另一个 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\%%';
我有两个 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\%%';