Ответы пользователя по тегу SQL
  • Как сделать SQL инъекцию на МОЙ сервер?

    ayazer
    @ayazer
    Sr. Software Engineer
    если id будет равно "1' or `id`='2", то вы получите

    SELECT * FROM `users` WHERE `id` = '1' or `id`='2'
    Ответ написан
    7 комментариев
  • Перенос таблиц из одной бд в другую в postgresql?

    ayazer
    @ayazer
    Sr. Software Engineer
    итак, вопрос на самом деле можно привести к "как построить процесс внесения изменений в базу, чтоб все случайно не угробить и не было больно".

    1. можно использовать тулзы для генерации дифоф а-ля https://github.com/djrobstep/migra

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

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

    3. в момент когда данных становится много - оно теряет актуальность т.к. на практике все миграции все-равно выполняется ручками (т.е. не запустил-и-забыл). (дальше мой опыт касается больше майскля, т.к. в постгресе у нас нет многотерабайтных таблиц) основная проблема тут - изменения таблицы = лок = аутейдж, чего допускать нельзя. потому для того, чтоб внести изменения - надо создать новую таблицу с новой схемой, перелить в нее все старые данные, синхронизировать все новые данные, поменять таблицы местами и дропнуть старую. тут помогает тулкит перконы и гитхаба (pt-online-schema-change и gh-ost), которые это все автоматизируют. Но обе они заточены под майскл, для постгреса надо искать и тестировать (ну или может кто-то уточнит)
    Ответ написан
    Комментировать
  • Как исправить ошибку "System.InvalidOperationException: "Недопустимая попытка чтения при отсутствии данных.""?

    ayazer
    @ayazer
    Sr. Software Engineer
    вы неправильно ридер используете.

    SqlDataReader loginReaderData = LoginData.ExecuteReader();
    
     while (loginReaderData.Read())
     {
        var id = loginReaderData["ID"];
        // ...    
      }


    Но судя по примеру - вам вообще не ридер нужен, а нужно https://docs.microsoft.com/en-us/dotnet/api/system...

    string sqlExpression = "SELECT ID FROM Users WHERE ID = 1";
    SqlCommand loginData = new SqlCommand(sqlExpression, connection);
    var id = (string)loginData.ExecuteScalar();
    //...
    Ответ написан
    Комментировать
  • Возможна ли SQL injection длиной в 4 символа или менее?

    ayazer
    @ayazer
    Sr. Software Engineer
    sql injection это сам факт того, что можно повлиять на запросы в базу. и глубоко безразлично сколько там символов, от этого это не перестанет быть проблемой.

    но например
    select count(id)>1 from auth.users where login='admin';--' and hash=123;
    Ответ написан
    Комментировать
  • Как ведет себя JOIN & WHERE?

    ayazer
    @ayazer
    Sr. Software Engineer
    Он выгребет только то что надо. А еще может поменять порядок джойнов чтоб выгребать меньше/быстрее. Но в целом план выполенения запроса будет зависеть от многих факторов (в т.ч. кол-во данных в таблицах, индексы и статистика по этим индексам), потому всегда лучше посмотреть експлейн. А вот нюансы уже могут отличатся от вендора к вендору
    Ответ написан
    2 комментария
  • Как делать запросы sql файлу без СУБД?

    ayazer
    @ayazer
    Sr. Software Engineer
    самая обычная встраиваемая база это, ей для работы не нужен отдельный сервер т.к. вся необходимая информация хранится в одном файле. Причем скорее всего это SQLite, с драйверами для которого не будет никаких проблем. Чтоб проверить - можно скачать какой-то SQLite Manager и просто попробовать им открыть тот файл. Если не заработает - тогда уже надо будет садится и проводить детальный анализ.
    Ответ написан