цикл по SQL-запросу, используя переменную из другой таблицы - PullRequest
2 голосов
/ 04 июля 2019

У меня есть две таблицы файлов и пользователей,

Я хочу просмотреть информацию о файле для каждого пользователя для C: \ Users \% USERNAME% \ Documents

так, например это получит информацию из документов 'example':

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

Который предоставляет первую часть пути, но все еще не может присоединиться к «Документам» до конца очереди, а также выполнить запрос файла.

Итак, как мне просмотреть каждое из имен пользователей?

Я пытался изменить, но ни одна таблица не может быть изменена

1 Ответ

0 голосов
/ 06 июля 2019

Это прекрасная возможность использовать запрос JOIN:

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

Когда вы выполняете этот запрос, osquery сначала генерирует список пользователей, а затем подставляет имя пользователя в путь, указанный в таблице file.

JOIN - это действительно мощный способ объединения результатов различных таблиц, и стоит потратить некоторое время, чтобы поэкспериментировать и научиться использовать эту силу.

...