Задать вопрос
  • Как настроить правило firewall на mikrotik?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Firewall rule:

    Chain - forward
    Dst. address - блокируемый сайт
    In interface - порт к коммутатору
    Action - drop
    Ответ написан
  • Что такое PRIMARY KEY, CONSTRAINT, FOREIGN KEY, REFERENCES, INSERT INTO и для чего они нужны?

    @Akina
    Сетевой и системный админ, SQL-программист.
    PRIMARY KEY - первичный ключ. Поле, комбинация полей либо выражение (последнее MySQL не поддерживает), которое не может быть NULL и не допускает дубликатов (уникально для каждой отдельной записи в пределах таблицы). Поддерживается путём создания соответствующего уникального индекса и наложением ограничения NOT NULL на все используемые в выражении поля. По факту - однозначно идентифицирует запись. Кроме того, в MySQL выражение первичного ключа является кластерным индексом. См. Индекс -> Уникальный индекс -> Первичный индекс.

    CONSTRAINT - ограничение. Правило, которое не допускает создания записи, для которой значение выражения ограничения имеет значения FALSE (можно TRUE или NULL).

    FOREIGN KEY - внешний ключ. Ограничение, которое требует, чтобы указанное выражение для текущей записи присутствовало среди значений указанного выражения референсной таблицы (допускается и внешний ключ на ту же таблицу). Точнее, чтобы такая проверка присутствия не возвращала FALSE (можно TRUE или NULL).

    REFERENCES - определяет референсную таблицу и референсное выражение.

    INSERT INTO - запрос, вставляющий новые записи в таблицу.
    Ответ написан
    Комментировать
  • VLAN в одном Aruba 1930 (JL685A) реально сделать без маршрутизации?

    @Akina
    Сетевой и системный админ, SQL-программист.
    1. Перенастроить одну из рабстанций, сделать на станциях непересекающиеся подсети.
    2. В сервер добавить вторую сетевую карту и подключить к коммутатору.
    3. Один из портов к серверу включить в VLANID=10, второй соответственно VLANID=11.
    4. Настроить интерфейсы сервера на соответствующие подсети.
    5. Убедиться, что на сервере выключена маршрутизация между интерфейсами.

    63e4cd2f2ef71408657730.png

    --------------------------------------

    Valentin Barbolin выложил ссылку на документацию, что позволяет предложить более простое решение.

    Для организации изоляции портов используется настройка Protected Ports (стр. 198).

    В показанной в вопросе схеме все три порта (2, 3 и 48) включаются как untagged в один и тот же VLAN (например, в VLANID = 100). После чего порты 2 и 3 настраиваются как protected. В итоге трафик с портов 2 и 3 может форвардиться только и исключительно в порт 48, поскольку он в данном VLANID - единственный незащищённый. В то же время трафик с порта 48 может форвардиться в любой порт данного VLAN.

    63e4df7182131904050298.png

    Да, абсолютной изоляции в этой схеме не добиться. Например, если компьютер запросит с сервер список известных NetBIOS-ресурсов, то в списке будет и второй компьютер. Хотя он и будет недостижим.
    Ответ написан
  • Как узнать CIDR или маску подсети по голому ip адресу?

    @Akina
    Сетевой и системный админ, SQL-программист.
    В общем случае нерешаемо.

    Максимум - можно получить сведения о диапазоне, в который входит целевой IP, по учётным данным регистратора. Но вот как выделенный диапазон порезал его арендатор, и в какой подсети находится целевой адрес, определить в общем случае невозможно.
    Ответ написан
    3 комментария
  • Выбрать строку из БД по значениям связанной таблицы?

    @Akina
    Сетевой и системный админ, SQL-программист.
    SELECT rule.id, rule.path, rule.content, rule.cat_id 
    FROM rule
    JOIN rule_options ON rule.id = rule_options.rule_id
    WHERE rule_options.option IN (4670, 5492)
    GROUP BY 1,2,3,4
    HAVING COUNT(DISTINCT rule_options.option) = 2;
    Ответ написан
    2 комментария
  • Как выбрать данные за два периода?

    @Akina
    Сетевой и системный админ, SQL-программист.
    SELECT name,
           SUM(CASE WHEN {date in period 1} 
                    THEN value 
                    ELSE 0 
                    END) AS sum_1,
           SUM(CASE WHEN {date in period 2} 
                    THEN value 
                    ELSE 0 
                    END) AS sum_2
    FROM table
    WHERE {date in period 1 or 2}
    GROUP BY name
    Ответ написан
    Комментировать
  • Порекомендуйте варианты построения и оборудования для ЛВС в строящемся административно-складском здании 1500м2?

    @Akina
    Сетевой и системный админ, SQL-программист.
    • Выделение отдельного помещения для размещения внешнего ввода (Интернет и телефонные линии), кросса, серверов и активного оборудования. Металлическая дверь, кодовый замок.
    • Три линии питания - две для питания оборудования, причём запитанные от разных лучей, или хотя бы от разных фаз, плюс одна для питания кондиционера (минимум 7 кВт), плюс дежурное освещение.
    • Система пожаротушения - газовая, углекислота или фреон. Порошок - нафиг, случись что, всё оборудование можно выбрасывать и закупать новое. Воды быть не должно в принципе - даже просто проходящих через помещение труб.
    • Обязательно стойка (или стойки). Лотки, органайзеры, включая органайзеры электропитания.
    • Обязательно бесперебойники - причём время удержания должно быть минимум часа полтора, причём с учётом рабочей деградации батарей.
    • СКС разводится от розеток возле рабочих мест и до патч-панелей стойки витой парой 5 или 5е категории, чистой одножильной медью, многожилка или омеднённый алюминий ни в коем случае. Какие-то промежуточные и местные коммутаторы - забудь как страшный сон. Прокладка - по запотолочным металлическим лоткам, последний метр в коробе, монтаж на встраиваемые в короб розетки (для рабочих мест в центре комнаты - напольные короба и встраиваемые в пол розеточные блоки). Прокладка до внешних камер соответственно проводом для внешней прокладки, розетки во влагозащищённых распаечных коробках (по опыту - минимум 100х150). С розетками внутри не жадничать - на одно рабочее место минимум 2 розетки (локальная сеть, телефон), плюс дополнительные для сетевых принтеров и для точек доступа, ну и учесть, что сотрудники любят переставлять мебель самым идиотским образом. Судя по чертежам и описанию - будет штук 200 розеток.
    • Коммутаторы - управляемые как минимум L2+, PoE для подключения точек доступа, видеокамер и IP-телефонов, обычные для подключения компов и сетевых принтеров. Модель не сильно важна, но лучше сразу иметь дохрена резервных портов, чем потом докупать. Клиентские порты гигабит однозначно. Но я бы рекомендовал брать с хотя бы парой 10-гигабитных портов. Вендор по вкусу (лично я бы ставил D-Link).
    • Маршрутизатор - согласен с предыдущими товарищами насчёт Микротика вменяемой старшей модели.
    • Точки доступа - лучше сразу брать комплект для бесшовного покрытия всего здания. Насчёт количества, размещения и необходимости внешних антенн вместо встроенных ничего не скажу - это только по месту решается.


    Ну по минимуму где-то так.
    Ответ написан
    6 комментариев
  • Как добавить запись в бд при условии, что она не была до этого добавлена?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Во-первых, надо создать в таблице уникальный индекс по полю, которое не должно содержать дубликатов.
    Во-вторых, надо использовать INSERT IGNORE INTO, чтобы дублирование одного значения не обваливало весь вставляемый массив. Либо REPLACE INTO, если при дублировании надо полностью заменить старую запись новой. Либо INSERT ODKU, если надо обновить старые данные новыми по некоей логике (например, вставить значения в поля, в которых раньше было NULL, а теперь пришло что-то определённое). Это - для MySQL, в других СУБД синтаксис с аналогичными возможностями будет иным.
    Ответ написан
  • Как адресуются пакеты адресату с серым ip?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Как роутеры провайдера узнают, на какой именно локальный серый ip отправлять пакет?

    Нет такого термина как "серый", это неопределённый до конца слэнг.

    Впрочем, неважно. Этот термин является подмножеством термина "немаршрутизируемые адреса". Т.е. адреса, маршрутизация которых запрещена. А потому любой маршрутизатор, получив для передачи пакет с немаршрутизируемым (в т.ч. и с "серым") адресом назначения, просто выбросит его. И даже не озаботится отсылкой уведомления о том, что пакет был убит.

    Соответственно на роутер провайдера может прийти только пакет с маршрутизируемым адресом назначения. А чтобы роутер перенаправил его на один из адресов внутренней сети, адрес назначения пакета должен быть адресом внешнего интерфейса (WAN) самого роутера.

    Что же касательно вопроса "кому будет передан" - правило маппинга портов включает чёткое и однозначное соответствие между тем, по какому протоколу и с каким портом назначения пришёл пакет, и на какой адрес во внутренней сети его следует перенаправить.
    Ответ написан
    Комментировать
  • Почему может тормозить простейший запрос?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Для начала отформатируем запрос - чтобы хоть что-то было видно.
    SELECT vk_user_id, COUNT(1) AS score 
    FROM vk_scores 
    WHERE page_id IN (
        SELECT page_id 
        FROM blitz_tasks 
        WHERE stage = 1533
        ) 
    GROUP BY vk_user_id

    Учитываем, что blitz_tasks.page_id определён как NOT NULL UNIQUE (кстати, а почему не как PRIMARY KEY?), значит, запрос элементарно переписывается на INNER JOIN:
    SELECT vk_scores.vk_user_id, COUNT(*) AS score 
    FROM vk_scores 
    JOIN blitz_tasks USING (page_id)
    WHERE blitz_tasks.stage = 1533
    GROUP BY vk_scores.vk_user_id
    Ответ написан
  • Как создать строку date с автозаполнением при создании?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Reference Manual / ... / Keywords and Reserved Words

    Прочитать. Выучить. Никогда не использовать слова из списка в качестве имён объектов (таблиц, полей и пр.).
    Ответ написан
    Комментировать
  • Как посчитать количество дней подряд?

    @Akina
    Сетевой и системный админ, SQL-программист.
    WITH cte AS (
        SELECT SUM(CASE WHEN balance < 0 THEN 0 ELSE 1 END) OVER (ORDER BY date) grp
        FROM test
        )
    SELECT COUNT(*) - 1 max_cnt
    FROM cte
    GROUP BY grp
    ORDER BY 1 DESC LIMIT 1;


    fiddle (исходные украдены у Дмитрий).
    Ответ написан
    5 комментариев
  • Как задать свой тип?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Можно использовать ENUM, как уже предложили.

    Можно просто добавить ограничение (CHECK constraint) - тогда любое не соответствующее ограничению значение приведёт к ошибке вставки/обновления:

    CREATE TABLE video (
      id INTEGER,
       ...,
      type VARCHAR CHECK (type IN ('FILM', 'SERIAL')),
      ...
    );
    Ответ написан
    Комментировать
  • Как получить значения и вставить в функцию?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Как-то вот так:
    SELECT *
    FROM table t1 
    JOIN table t2
    WHERE t1.id > t2.id
      AND ST_Intersect(t1.geom, t2.geom)
    Ответ написан
    Комментировать
  • Установка mysql - ошибка 1045(28000)?

    @Akina
    Сетевой и системный админ, SQL-программист.
    - ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)


    Выделенный фрагмент чётко указывает на причину - использованная строка запуска не настроена на передачу пароля.

    Дословно сообщение означает: пользователя 'root'@'localhost' не получилось аутентифицировать с пустым паролем. Всё, не больше и не меньше. А по какой причине - пароль не пуст, такого юзера нет, или вообще это роль, а не юзер - сообщение установить не позволяет.

    Как фиксить - уже сказано в комментарии, который сделал Максим Припадчев.
    Ответ написан
    Комментировать
  • Как сделать проверку базы данных, на наличие новых записей?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Если количество новых записей невелико (в пределах тысячи), то возможное решение - триггер на основной таблице, который копирует свежевставленные записи в дополнительную таблицу. Тупо один к одному. А процедура проверки на свежие записи столь же тупо выгребает из этой дополнительной таблицы всё туда упавшее, после чего чистит её.
    Ответ написан
  • Как работать с файлом SQL объемом 20 ГБ?

    @Akina
    Сетевой и системный админ, SQL-программист.
    В комментариях выше фиксируются следующие факты:
    • используемая СУБД - MySQL
    • (вероятно) дамп - MySQL либо MariaDB
    • дамп поделен на несколько частей
    • задача - периодическая

    Соответственно некоторые соображения в дополнение к сказанному ранее.

    Если дамп выполнялся штатной утилитой (вряд ли иначе), то он содержит кучу комментариев, которые позволяют без особых проблем поделить дамп на отдельные файлы - дамп только структуры и дамп только данных. Даже в автоматическом режиме (программно), и уж тем более вручную. Поскольку нужны данные только по пользователям, то после описанного выше разделения можно безболезненно вырезать всё ненужное из дампа структуры (лишние таблицы, всякие процедуры-функции-триггеры, индексы и внешние ключи - всё это нафиг не нужно при восстановлении, а если нужно для эффективности выборки, лучше создать индексы после заливки данных), а также просто убрать дампы данных ненужных таблиц. И скорее всего объём информации для восстановления после такой чистки уменьшится на порядок, а то и больше.
    Ответ написан
    Комментировать
  • Что лучше, по одной или несколько записей при INSERT?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Запись пакетом быстрее и менее нагрузочна, но выше вероятность потери при сбоях.

    PS. 40 записей в секунду - это в общем-то ни о чём..
    Ответ написан
    Комментировать
  • Как поставить кастомную скорость Ethernet?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Видел на ноутбуке (сетевая карта 100 на 100) как он по сети давал 125 на 75.

    Ты тупо не понял, что видел. Отключи кэширования со стороны дисковой и сетевой подсистем - и хрен ты увидишь такие значения.

    Хотелось бы на сервере и на потребителе выставить настройки сетевого порта 1950 на 50, чтобы при скачивании с сервера скорость была в два раза выше.

    Невозможно даже теоретически.

    Канал приёма и канал передачи в режиме полного дуплекса практически независимы, это два однонаправленных канала, и у каждого предельная скорость передачи составляет 1 Гбит. То есть свыше этой скорости передавать не получится - даже если другой канал простаивает, он просто не умеет слать в обратном направлении.

    А в полудуплексе они синхронны в рамках общей, суммарной, скорости в 1 Гбит - т.е. когда один канал работает, встречный отдыхает.

    -----------------

    Для увеличения скорости обмена можно доставить по второй сетевой карте и агрегировать эти два канала в один логический. Впрочем, до 1950 добраться всё равно не получится.

    Либо (самое правильное решение) докупить и поставить более высокоскоростные сетевые карты. Стоимость решения в случае 10G портов - порядка 9 тыр за порт.
    Ответ написан
    Комментировать
  • Какой sql запрос нужен чтобы получить последнюю дату события для каждого домена?

    @Akina
    Сетевой и системный админ, SQL-программист.
    WITH cte AS (
        SELECT *, ROW_NUMBER() OVER (PARTITION BY domain ORDER BY date DESC) AS rn
        FROM Crawl_Datetime
    )
    SELECT * 
    FROM cte
    WHERE rn = 1
    Ответ написан
    Комментировать