• Как поместить два устройства на одном коммутаторе в разные подсети?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Если то, что обозначено на схеме словами Switch1 - неуправляемый коммутатор, то может спасти MAC-based VLAN на порте роутера, подключенном к этому неуправляемому коммутатору. Впрочем, единый широковещательный домен никуда не денется.
    Ответ написан
  • Как сделать SQL запрос из двух таблиц?

    @Akina
    Сетевой и системный админ, SQL-программист.
    В синтаксисе MySQL:
    SELECT c.name category_name, p.id post_id, p.name post_name, p.title post_title
    FROM posts p
    JOIN categories c ON p.category_id = c.id
    UNION ALL
    SELECT name, NULL, NULL, NULL
    FROM categories 
    ORDER BY category_name, post_id IS NOT NULL

    Соответственно если в поле post_id обнаруживается NULL, то в этой записи категория, и она рисуется как категория. Если же там не NULL - то это пост, и он рисуется со смещением.

    Дурь, конечно, но для сельской местности сойдёт..
    Ответ написан
    1 комментарий
  • Как можно поднять терминальный сервер на Astra Linux?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Комментировать
  • Как удалить ненужные и добавить нужные кодировки MySQL8?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Во-первых, всё указанное - ни разу не кодировки. Это COLLATION - набор правил сравнения строковых значений.

    Во-вторых, убирать/удалять ничего не нужно. То, что не используется, ресурсов не потребляет.

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

    Adding a Character Set
    Adding a Collation to a Character Set

    Ну и вообще желательно изучить весь раздел Character Sets, Collations, Unicode.
    Ответ написан
    6 комментариев
  • PyMySQL не хочет принимать определенный запрос, в чем может быть проблема?

    @Akina
    Сетевой и системный админ, SQL-программист.
    DELIMITER - это не SQL-запрос, а команда клиента. PyMySQL - это не клиентская программа, а библиотека доступа, которая ни про какой DELIMITER не знает и знать не должна. Отсюда и ошибка. Опять же - нет никакого смысла напихивать в код лишнюю логику, без которой можно спокойно обойтись.

    А если от всей лишней шелухи избавиться, то от всей логики останется один-единственный оператор. Который сделает использование DELIMITER и вовсе ненужным.

    CREATE TRIGGER setUUID 
    BEFORE INSERT ON users
    FOR EACH ROW 
    	SET NEW.uuid = COALESCE(NEW.uuid, UUID());
    Ответ написан
    1 комментарий
  • Как реализовать first_value(field) с фильтром на field внутри окна?

    @Akina
    Сетевой и системный админ, SQL-программист.
    SELECT 
      *,
      FIRST_VALUE(CASE WHEN banner_id IN (13,14,15,17)
                       THEN banner_id 
                       END) OVER (PARTITION BY id
                                  ORDER BY CASE WHEN banner_id IN (13,14,15,17)
                                                THEN banner_id 
                                                END DESC NULLS LAST) max_banner_id_1,
      FIRST_VALUE(CASE WHEN banner_id IN (4,177,178)
                       THEN banner_id 
                       END) OVER (PARTITION BY id
                                  ORDER BY CASE WHEN banner_id IN (4,177,178)
                                                THEN banner_id
                                                END DESC NULLS LAST) max_banner_id_2
    FROM test
    ORDER BY banner_id
    Ответ написан
    1 комментарий
  • Подсчёт кол-ва детей у сотрудников access?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Неправильный тип связи. Должно быть "все записи из Список и только соответствующие из Дети".

    Топнуть правым батоном точно в соединяющую линию, выбрать Параметры объединения. Итогово должна быть стрелка от Список к Дети.

    После этого - группировка по всем полям из Список и количество из Дети.
    Ответ написан
    Комментировать
  • В каких случаях нужно делать перекрёстный обжим сегодня?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Всё современное оборудование имеет Auto MDI/MDIX detection и не требует кроссовых кабелей.

    Кроссовые кабели обязательны при соединении двух оконечных или двух транзитных устройств, не поддерживающих автоопределения, и рекомендуются при соединении двух устройств, если оба являются оконечными (клиентскими) либо оба транзитными, и одно из них не поддерживает автоопределение.
    Ответ написан
    Комментировать
  • Как настроить правило 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 комментариев