• Как пробросить компьютер в другую сеть?

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

    Именно из Интернета? или из сетки 192.168.1.0/24?

    У меня только такая идея: вставить в нужный компьютер в сети Б(которая без интернета) вторую сетевую карту и подключить её к сети А(с интернетом), выдать адрес из диапазона 192.168.1.1-254, дальше как-нибудь настроить одновременную работу обеих карт, метрики там, всё такое.

    Ну правильная идея. Причём карты будут работать одновременно, и ничего настраивать не нужно. Ведь, как я понимаю, в 198.148.46.0/24 ни дефолтного шлюза, ни статических маршрутов нет.

    Другой вопрос - если сеть изолирована от Инета, то, наверное, не просто так? и, значит, следует на этом двухинтерфейсном компе принять все необходимые меры безопасности. В том числе запретить маршрутизацию и локальный транзит (пакеты на адрес второго интерфейса из сети первого).
    Ответ написан
    2 комментария
  • Гибридные, транковые порты на коммутаторах, это всё порты для коммутаторов? Не для конечных устройств?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Гибридные, транковые порты на коммутаторах, это всё порты для коммутаторов? Не для конечных устройств?

    В общем - нет. Как правило - да.

    Для более осмысленного ответа необходимо как минимум понять, что именно Вы разумеете под терминами "гибридный" и "транковый" (и даже - не считаете ли Вы, что это одно и то же).

    подружить 2 VLAN (2 сети) на одном конечном устройстве?

    Так вланы, и в них сети, разные, или разные сети в одном влане?
    Ответ написан
  • Как вставить все значения у всех таблиц через JOIN?

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

    INSERT INTO main (table1_id, table2_id) 
    WITH 
    cte1 AS ( SELECT id, ROW_NUMBER() OVER (ORDER BY id) rn FROM table1 ),
    cte2 AS ( SELECT id, ROW_NUMBER() OVER (ORDER BY id) rn FROM table2 )
    SELECT cte1.ID, cte2.ID
    FROM cte1
    JOIN cte2 USING (rn);
    Ответ написан
  • Не получается настроить внутреннею сеть между двумя виртуальными Linux машинами в VirtualBox?

    @Akina
    Сетевой и системный админ, SQL-программист.
    pfSense
    Интерфейс WAN, который должен смотреть в Инет - VMNet8 (NAT), адрес по DHCP, либо VMNet0 (direct), статический адрес.
    Интерфейс LAN - любой внутренний VMNet (например, VMNet2), статический адрес.

    Cервер Metasploitable, интерфейс в этом сегменте - тот же VMNet (VMNet2), адрес статический.
    Клиенты Ubuntu и Kali - тот же VMNet, адреса статические либо динамические, дефолт-шлюзом LAN-адрес pfSense. Статический маршрут в подсеть частного клиента Ubuntu через адрес Metasploitable в этом сегменте.

    Второй интерфейс сервера Metasploitable - в другой внутренний VMNet (скажем, VMNet3), статический адрес из другой подсети.
    Клиент Ubuntu за ним - к тому же VMNet (VMNet3), адрес статика или динамика. Дефолтным шлюзом адрес Metasploitable из этого сегмента.
    Ответ написан
    Комментировать
  • Магия в топологии сети, объясните как такое возможно?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Пинг, вернее, ответ на него - самая низкоприоритетная из всех задач коммутатора. Так что если он занят чем-то более важным, то просто не ответит. Бывает, что даже на пинги устройству, подключенному непосредственно к коммутатору, получают только половину ответов. Это нормально.
    А другие пингуемые нагружены, видимо, меньше, или производительность у них больше - вот потерь и нет.
    Ответ написан
    Комментировать
  • Что я делаю не так, почему MySQL ругается?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Юзеры в диалогах независимы, потому и связывать их надо независимо.

    create table if not exists dialogs (
        id int primary key auto_increment, 
        user_id_one int not null, 
        foreign key (user_id_one) references users (id), 
        user_id_two int not null, 
        foreign key (user_id_two) references users (id)
    )
    Ответ написан
    Комментировать
  • Как найти следующую строчку в mysql?

    @Akina
    Сетевой и системный админ, SQL-программист.
    WITH
    cte AS (
      SELECT *, COALESCE(LEAD(id) OVER (ORDER BY id),
                         MIN(id) OVER ()) next_row_id
      FROM comments
    )
    SELECT * 
    FROM cte
    Ответ написан
    Комментировать
  • Можно ли в хранимых процедурах создать временную функцию?

    @Akina
    Сетевой и системный админ, SQL-программист.
    CREATE FUNCTION не входит в список конструкций, разрешённых к использованию в stored objects (procedures, functions, triggers, event procedures) и prepared statements.

    Ответ: НЕЛЬЗЯ.

    PS. В MySQL нет временных функций, все функции - статические. Встроенные, регистрируемые либо хранимые.
    Ответ написан
    1 комментарий
  • PHP не создаёт запись MySQL, ошибки не выводит, что делать?

    @Akina
    Сетевой и системный админ, SQL-программист.
    No index used in query/prepared statement ...

    что это означает?

    Это означает, что, по мнению PHP/mysqli, нет подходящего индекса для обработки запроса, сервер будет шерстить всю таблицу, что неэффективно. В общем, он просто старается сделать тебя счастливым (твоё мнение при этом никого не интересует).
    Возможные решения:
    1. Создать индекс users (username)
    2. Изменить настройки mysqli_report() (см. ответ SagePtr)

    без неё обойтись нельзя, т.к. одинаковые ники будут вызывать ошибки в некоторых уголках сайта
    что делать?

    Тогда альтернатив вообще нет.

    Создать уникальный индекс users (username).

    После этого код с проверкой на существование можно смело выбросить (дубликат в принципе не будет записываться сервером). Но обязательно добавить код для обработки ошибки дублирования при добавлении.
    Ответ написан
    Комментировать
  • Как правильно реализовать систему групп у пользователя?

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

    Перевернись, не с той стороны смотришь. Наоборот, юзеру должны отображаться посты только его групп.
    Решается элементарно.
    На текущей структуре это будет

    FROM post
    JOIN user ON user_id = {текущий пользователь} AND FIND_IN_SET(post.group_id, user.group_ids_csv)

    Однако функция в связи - это прощай индексы и здравствуй фуллскан.

    ID username group
    1 admin 1,2,3


    Дурацкая схема хранения.
    Если есть связь M:N, то должна быть связующая таблица (user_id, group_id).
    Ответ написан
  • Как сделать жесткое исключение NOT IN в mysql?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Разумнее использовать WHERE NOT EXIST, который скорее всего будет более эффективен:
    SELECT [DISTINCT] number
    FROM table t1
    WHERE service NOT IN (1,2,3)
      AND NOT EXISTS (
        SELECT NULL
        FROM table t2
        WHERE t1.number = t2.number
          AND t2.service IN (1,2,3)
    )

    Индекс по (number, service) - весьма желателен.

    Если service - целочисленное поле со значениями от единицы и более, то для даных конкретных условий можно построить и более эффективный запрос:
    SELECT number
    FROM test
    GROUP BY number
    HAVING MIN(service) > 3
    Ответ написан
    Комментировать
  • Ошибка #1064. Как объявлять переменные в mysql 8.0?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Нет такого понятия как местные переменные.

    Есть переменные локальные. Они определяются в рамках блока кода в хранимой конструкции (функция, процедура, триггер и пр.), имеют определённый тип, и существуют только в том блоке, в котором определены. Имя начинается НЕ с символа @.

    Есть переменные, определённые пользователем. Имя начинается с символа @. Не требуют определения, существуют в течение всей сессии.

    В показанном коде - мешанина. Попытка определить пользовательскую переменную, что приводит к ошибке синтаксиса. Показанный код был бы корректен в MS SQL (SQL Server), но не в MySQL.

    В общем, собак - убрать. Всех.
    Ответ написан
  • Триггер UPDATE с условием?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Пример
    CREATE FUNCTION fn_test() 
    RETURNS TRIGGER
    AS $fn_test$
    BEGIN
        IF OLD.val1 <> NEW.val1 THEN   -- задать условие
            NEW.id := NEW.id * 10;     -- выполнить действие
        END IF;
        RETURN NEW;
    END;
    $fn_test$ LANGUAGE plpgsql;

    CREATE TRIGGER tr_test
    BEFORE UPDATE ON test
    FOR EACH ROW
    EXECUTE FUNCTION fn_test();

    DEMO

    Или так:
    CREATE FUNCTION fn_test() 
    RETURNS TRIGGER
    AS $fn_test$
    BEGIN
        NEW.id := NEW.id * 10;     -- выполнить действие
        RETURN NEW;
    END;
    $fn_test$ LANGUAGE plpgsql;

    CREATE TRIGGER tr_test
    BEFORE UPDATE ON test
    FOR EACH ROW
    WHEN (OLD.val1 <> NEW.val1)   -- задать условие
    EXECUTE FUNCTION fn_test();

    DEMO
    Ответ написан
    2 комментария
  • Как посчитать количество сотрудников в штате за каждый месяц в каждом году?

    @Akina
    Сетевой и системный админ, SQL-программист.
    WITH RECURSIVE
    cte AS ( SELECT CAST(DATE_FORMAT(@range_from, '%Y-%m-01') AS DATE) month_start,
                    LAST_DAY(@range_from) month_end
             UNION ALL
             SELECT month_start + INTERVAL 1 MONTH,
                    LAST_DAY(month_start + INTERVAL 1 MONTH)
             FROM cte
             WHERE month_start < DATE_FORMAT(@range_till, '%Y-%m-01')
    )
    SELECT cte.month_start, COUNT(employee.id) employees_amount
    FROM cte
    LEFT JOIN employee ON employee.date_employment <= cte.month_end
                      AND (    employee.date_dismissal >= cte.month_start
                            OR employee.date_dismissal IS NULL )
    GROUP BY 1;

    https://dbfiddle.uk/?rdbms=mariadb_10.4&fiddle=8be...
    Ответ написан
    4 комментария
  • Чем отечественным заменить Mikrotik?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Официальный сайт реестра российской радиоэлектронной продукции (РРПО) — https://gisp.gov.ru/documents/10546664/

    Выбирай всё, что душа пожелает... ну а что именно тебе нужно - коммутатор, маршрутизатор или ещё что,- разбирайся самостоятельно.
    Ответ написан
    Комментировать
  • Как вернуть опредленное значение, если запрос выдает название колонки?

    @Akina
    Сетевой и системный админ, SQL-программист.
    SELECT COALESCE( 
        (
            SELECT busy FROM `all_reservs` WHERE dates ='27.06.22' AND number='22' LIMIT 1
        ), 
        'no'
    ) AS busy;

    Если запрос вернёт запись (с одним полем), скаляризация преобразует её в значение, и COALESCE вернёт это значение.
    Если запрос не вернёт запись, скаляризация вернёт NULL, и COALESCE вернёт 'no'.
    LIMIT страхует от возврата более чем одной записи. По-хорошему ещё надо добавить ORDER BY.
    Ответ написан
    1 комментарий
  • Как сделать ORDER BY совместно с GROUP BY в MySQL?

    @Akina
    Сетевой и системный админ, SQL-программист.
    SELECT t1.*
    FROM table AS t1
    NATURAL JOIN (
        SELECT user_id, MAX(timestamp) AS timestamp
        FROM table AS t2
        GROUP BY 1
    ) AS t3


    Если вдруг для юзера время может иметь дубликаты - будут выведены все соотв. записи.
    Ответ написан
    Комментировать
  • MSSQL and mysql в чем отличие?

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

    Не надо путать причину и следствие. Причина - это что ты ни хрена не понимаешь. А следствие - оно тебе кажется убожеством.
    offtop
    В скобках отмечу, что если ты не только ни хрена не понимаешь, но и жалуешься на это, и считаешь это достаточным обоснованием того, чтобы назвать убожеством - то ты и не хочешь понимать, и не пытаешься понять. В смысле не пытаешься по-настоящему, прочтение пары страниц из мануала под этот термин не проходит.


    отличаются ли запросы sql MSSQL от Mysql

    Да. Точнее, самые простейшие базовые запросы могут выглядеть одинаково. Но не более, чуть только хоть какая-то сложность, и одинаковость заканчивается. Синтаксис различается, и весьма сильно. А кое-где даже подходы к решению задачи различаются, и код с одной СУБД на другую не адаптируется совсем - только полное переписывание.

    возможно ли сменить БД без нарушения функциональности софта.

    Если запросы хардкодом - крайне маловероятно. Если тексты запросов - ресурс, вероятность несколько выше. Если вся лигика находится на сервере, общение с ним выполняется исключительно обращением к представлениям и вызовом процедур, а само приложение является чистым интерфейсом - скорее всего возможно.
    Ответ написан
    Комментировать
  • Как группировать записи по диапазону в mysql?

    @Akina
    Сетевой и системный админ, SQL-программист.
    SELECT ..
    FROM ..
    GROUP BY (unixtime_column MOD 60*60*24) DIV 60*60
    Ответ написан
    8 комментариев
  • Безопасен ли домашний проброс портов?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Покупаешь ещё один роутер (конечно, уж не совсем дерьмо). Каскадишь. Батя прячется за ним (у него двойной NAT, "две защиты за те же деньги", ибо второй роутер ты покупаешь на свои) и не даёт тебе пароля, а ты сидишь только за первым, и если твой комп поимеют, то до батиного не доберутся.
    Ответ написан
    6 комментариев