使用另一个表中的变量循环SQL查询
我有两个表file&users,我想查看使用另一个表中的变量循环SQL查询,sql,sqlite,osquery,Sql,Sqlite,Osquery,我有两个表file&users,我想查看C:\users\%USERNAME%\Documents 例如,这将从“示例”文档中获取信息: SELECT * FROM file WHERE path LIKE 'C:\Users\example\Documents\%%'; 但是用户名来自用户 SELECT username FROM users; 返回 +--------------------+ | username | +--------------------+
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 |
+---------------------------------------------+
它提供了路径的第一部分,但仍然无法将“文档”连接到查询的结尾,也无法运行文件查询
那么,如何循环遍历每个用户名呢
我已经尝试过修改,但两个表都无法修改这是使用
联接
查询的绝佳机会:
SELECT f.*
FROM file f JOIN users u
WHERE f.path LIKE 'C:\Users\' || u.username || '\Documents\%%'
运行此查询时,osquery将首先生成用户列表,然后将用户名替换为提供给文件
表的路径
JOIN
是一种非常强大的组合各种表的结果的方法,值得花一些时间来试验和学习如何使用这种能力。Zach的答案很好,但有时用户的目录可以被命名为不同于其各自的用户名
谢天谢地,我们在users
表中还有directory
列,它返回用户的主目录。使用此列将防止目录/用户名不匹配导致查询输出出现问题:
选择f*
从文件f加入用户u
其中f.path类似于u.directory | |'\Documents\%';
这两个表是如何关联的?发布示例数据。我已经发布了示例数据,以及在原始发布中获取数据的查询。因此,这两个表的相关列是表文件的路径和表用户的目录?是的,我想将来自用户的文档附加到每个目录,然后运行SELECT*from文件,其中路径类似于“连接目录”