Примеры обращения к базе данных Сервера Dr.Web

Далее приводятся примеры SQL-запросов к базе данных PostgreSQL. Запросы к другим базам данных могут содержать некоторые отличия, обусловленные особенностями самой базы данных и тонкостями ее использования.

Для облегчения понимания примеры составлены без учета иерархии групп и станций, а также используют менее оптимальные с точки зрения производительности, но более простые для восприятия конструкции.

Чтобы обратиться напрямую к базе данных

1.Откройте Центр управления вашего Сервера Dr.Web.

2.Перейдите в раздел Администрирование → SQL-консоль.

3.Введите необходимый SQL-запрос. Примеры запросов приведены далее.

4.Нажмите кнопку Выполнить.

Примеры SQL-запросов

1.Найти станции под управлением серверных версий ОС Windows, на которых установлены вирусные базы, выпущенные до 2024.07.16-00:00:00 UTC.

SELECT

 stations.name Station,

 groups_list.name OS,

 station_products.crev Bases

FROM

 stations

INNER JOIN groups_list ON groups_list.platform =(

  CAST(stations.lastos AS INTEGER) & ~15728640

 )

AND (

   (

    CAST(stations.lastos AS INTEGER) & 2130706560

   ) = 33554560

 )

INNER JOIN station_products ON station_products.id = stations.id

AND station_products.product = '10-drwbases'

AND station_products.crev < 13020240716000000;

Данные о платформах станций антивирусной сети хранятся в виде числовых кодов.

Чтобы получить соответствие кода и названия платформы станции

1.Откройте Центр управления вашего Сервера Dr.Web.

2.Перейдите в раздел Администрирование → SQL-консоль.

3.Введите следующую команду:

SELECT DISTINCT lastos FROM stations

4.Нажмите кнопку Выполнить.

Вы увидите список кодов платформ, которые были распознаны на станциях данной антивирусной сети.

5.Сохраните результат выполнения запроса в файл с помощью кнопок на панели инструментов или оставьте вкладку открытой для последующего использования полученных данных.

6.Откройте раздел Администрирование → Lua-консоль.

7.Введите команду следующего вида:

return { ['<код>'] = dwcore.platform_str(<код>)}

где <код> — один из числовых кодов, полученных с помощью SQL-запроса.

8.Нажмите кнопку Выполнить.

2.Найти станции, имеющие в разделе Антивирусная сеть → Статистика → Состояние записи с серьезностью Высокая или Максимальная.

SELECT

 stations.name Station

FROM

 stations

WHERE

 id IN (

  SELECT

    DISTINCT id

  FROM

     station_status

  WHERE

     severity >= 1342177280

 );

Данные о серьезности состояния станций хранятся в виде числовых кодов:

0 — минимальная,

268435456 — низкая,

805306368 — средняя,

1342177280 — высокая,

1879048192 — максимальная.

Вы также можете проверить коды состояния станций следующим способом:

1.Откройте Центр управления вашего Сервера Dr.Web.

2.Перейдите в раздел Администрирование → Lua-консоль.

3.Введите следующую команду:

require 'statusmessages' return statusmessages.severity

4.Нажмите кнопку Выполнить.

3.Получить соответствие сообщений о состоянии станции и количества станций в каждом из этих состояний.

SELECT

 code Code,

COUNT(code) Num

FROM

 (

  SELECT

    DISTINCT id,

     code

  FROM

     station_status

 ) AS t

GROUP BY

 Code

ORDER BY

 Code;

Данные о сообщениях о состоянии станций хранятся в виде числовых кодов.

Чтобы получить соответствие кодов и сообщений о состоянии станции

1.Откройте Центр управления вашего Сервера Dr.Web.

2.Перейдите в раздел Администрирование → Lua-консоль.

3.Введите следующий код:

local sm = require 'statusmessages'

local messageByCode = require 'stats/message_by_code'

local codes = {}

for _,v in pairs(sm) do

local n = tonumber(v)

if n ~= nil then

   code = sm.get_code( n )

   codes[code] = messageByCode( code )

end

end

return codes

4.Нажмите кнопку Выполнить.

4.Получить 10 наиболее популярных угроз, обнаруженных с 2024.06.01 по 2024.07.01 на станциях, входящих в группу с идентификатором '373a9afb-9c9a-4d4d-b9b1-de817b96bcc5' или в любые вложенные в нее группы.

SELECT

 cat_virus.str Threat,

COUNT(cat_virus.str) Num

FROM

 station_infection

INNER JOIN cat_virus ON cat_virus.id = station_infection.virus

WHERE

 station_infection.infectiontime BETWEEN 20240601000000000

AND 20240701000000000

AND station_infection.id IN (

  SELECT

     sid

  FROM

     station_groups

  WHERE

     gid = '373a9afb-9c9a-4d4d-b9b1-de817b96bcc5'

    OR gid IN (

      SELECT

         child

      FROM

         group_children

      WHERE

         id = '373a9afb-9c9a-4d4d-b9b1-de817b96bcc5'

     )

 )

GROUP BY

 cat_virus.str

ORDER BY

 Num DESC

LIMIT

10;

5.Получить 10 наиболее заражаемых станций.

SELECT

 Station,

 Grp,

 Num

FROM

 (

  SELECT

     stations.id,

     groups_list.id,

     stations.name Station,

     groups_list.name Grp,

    COUNT(stations.id) Num

  FROM

     station_infection

    INNER JOIN stations ON station_infection.id = stations.id

    INNER JOIN groups_list ON groups_list.id = stations.gid

  GROUP BY

     stations.id,

     groups_list.id,

     stations.name,

     groups_list.name

  ORDER BY

     Num DESC

  LIMIT

    10

 ) AS t;

6.Удалить членство всех станций из пользовательских групп, которые не являются первичными для этих станций.

DELETE FROM

 station_groups;

INSERT INTO station_groups(sid, gid)

SELECT

 stations.id,

 groups_list.id

FROM

 stations

INNER JOIN groups_list ON stations.gid = groups_list.id

AND groups_list.type NOT IN(1, 4);

7.Найти объекты антивирусной сети, в которых указанный домен присутствует в белом списке компонента SpIDer Gate, в персональных настройках.

SELECT

 stations.name Station

FROM

 station_cfg

INNER JOIN stations ON stations.id = station_cfg.id

WHERE

 station_cfg.component = 38

AND station_cfg.name = 'WhiteVirUrlList'

AND station_cfg.value = 'domain.tld';

SELECT

 groups_list.name Grp

FROM

 group_cfg

INNER JOIN groups_list ON groups_list.id = group_cfg.id

WHERE

 group_cfg.component = 38

AND group_cfg.name = 'WhiteVirUrlList'

AND group_cfg.value = 'domain.tld';

SELECT

 policy_list.name Policy

FROM

 policy_cfg

INNER JOIN policy_list ON policy_list.id = policy_cfg.id

WHERE

 policy_cfg.component = 38

AND policy_cfg.name = 'WhiteVirUrlList'

AND policy_cfg.value = 'domain.tld';

8.Получить из аудита события неудачного входа администраторов в Центр управления с соответствующими кодами ошибки авторизации.

SELECT

 admin_activity.login Login,

 admin_activity.address Address,

 activity_data.value ErrorCode,

 admin_activity.createtime EventTimestamp

FROM

 admin_activity

INNER JOIN activity_data ON admin_activity.record = activity_data.record

WHERE

 admin_activity.oper = 10100

AND admin_activity.status != 1

AND activity_data.item = 'Error';

9.Найти станции под ОС Windows, на которых не установлены необходимые исправления безопасности.

Вариант 1:

SELECT

 stations.name Station

FROM

 stations

WHERE

 id NOT IN (

  SELECT

     station_env_kb.id

  FROM

     station_env_kb

    INNER JOIN stations ON stations.id = station_env_kb.id

  WHERE

     (

      CAST(stations.lastos AS INTEGER) & 2130706432

     )= 33554432

    AND station_env_kb.name IN (

      SELECT

         id

      FROM

         env_strings

      WHERE

         str IN(

          'KB4012212', 'KB4012213', 'KB4012214',

          'KB4012215', 'KB4012216', 'KB4012217',

          'KB4012598'

         )

     )

 );

Данные о платформах станций антивирусной сети хранятся в виде числовых кодов.

Вариант 2, где '24e27d73-d21d-b211-a78c-85419c46f0e6' — UUID системной группы Windows:

SELECT

 stations.name Station

FROM

 stations

WHERE

 id NOT IN (

  SELECT

     station_env_kb.id

  FROM

     station_env_kb

    INNER JOIN stations ON stations.id = station_env_kb.id

  WHERE

     stations.osgroup IN

     (

      SELECT

         child

      FROM

         group_children

      WHERE

         id='24e27d73-d21d-b211-a78c-85419c46f0e6'

      UNION ALL

      SELECT

        '24e27d73-d21d-b211-a78c-85419c46f0e6'

     )

    AND station_env_kb.name IN (

      SELECT

         id

      FROM

         env_strings

      WHERE

         str IN(

          'KB4012212', 'KB4012213', 'KB4012214',

          'KB4012215', 'KB4012216', 'KB4012217',

          'KB4012598'

         )

     )

 );