sql

Подписчиков:
1
Постов:
29

Изучение SQL

Здравствуйте многоуважаемые обитатели реактора.

Помогите с направлением как изучить SQL.

Сам являюсь офисным работником, из инструментов неплохо овладел Excel - макросы помогают в автоматизации многочисленных отчетов. Освободившегося времени хватает читать все новые посты и комментарии на реакторе. Но хочу расти дальше. Знаю, что есть хранилище данных, и многие тянут инфу из него напрямую посредством SQL. Имеется время и желание изучить эту тему. Но ролики на ютуб (во всяком случае те, что нашел) изначально дают какую-то муть. Подскажите какую-нибудь книгу/ресурс/курс, не обязательно бесплатные для начального, а потом и продвинутого освоения предмета. Уверен, что это поможет освободить еще больше времени для дальнейшей деградации и тотального чтения еще и бездны.

Купон от 2-D прилагается.
,пидоры помогите,реактор помоги,sql
Многоуважаемые пидоры, умеющие в БД, в SQL в частности, будьте любезны подсказать.

Суть такова.
На работе стоит уёбищная (не побоюсь этого слова) прога для работы с поциэнтами, выводит пофамильный список и медкарты людей.
И все бы ничего, человек - тварь приспосабливаемая, но разрабы НЕ СДЕЛАЛИ ничего для пакетной обработки запросов.
То есть - надо, предположим, обработать полтыщщи человек. Заместо того, чтобы указать, чего и где делать - приходится тратить в ЛУЧШЕМ случае по 5-10 минут на одну запись. Причем действия совершаются абсолютно одинаковые, я даже пытался приспособить для этого редактор макросов, штобы сам кнопицы нажимал. Но за отсутствием в этой проге горячих клавиш (да, еще один нюанс) - не получилось.

Так вот. Я знаю, что все слеплено на MS SQL 2005. Известен IP адрес в локалке, пароль БД, имя пользователя и мой пароль также. Мои знания IT - VB/VBA и С. Пишу программы на HTML (c)

Есть ли какая прога (с ГУЕм, естественно, консоль не подойдет), чтобы просто подключиться к БД, увидеть, какие поля есть, составить и выполнить свой запрос - да еще и не запороть БД. Желательно и следов не оставить.

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

Благодарствую.
, П9М9ГПТЕ!
ВПППАП1Е! ИШ9ШУЙТЕ ИУП91 ТОЛЬКО Bli ШШ КРАППЕ" ПЕ9БЙ9ДПМ9Ш!
МП 119: 7) ОКТЯБРЯ 291Г,пидоры помогите,реактор помоги,it,geek,Прикольные гаджеты. Научный, инженерный и  айтишный юмор,sql,подключение

i fucking hate sql
A
sorry, i meant

I FUCKING HATE SQL
U 1,sql,it-юмор,geek,Прикольные гаджеты. Научный, инженерный и  айтишный юмор

Найдите 1 важное отличие в Microsoft SQL Server Management Studio между панелью инструментов 17 и 18 версиями

Microsoft SQL Server Management Studio 17
> Выполнить Отладка У (Щ1 0 й° Iй щ! щ! е£)
■?=
л«- ■*-
■ф ^,geek,Прикольные гаджеты. Научный, инженерный и  айтишный юмор,Microsoft,Майкрософт,sql,какой пиздец

Microsoft SQL Server Management Studio 18
> Execute

II
□•a
6
Z± ±Z +0),geek,Прикольные гаджеты. Научный, инженерный и  айтишный юмор,Microsoft,Майкрософт,sql,какой пиздец

Если вы не заметили кнопку отладки SQL-скрипта, то нашли его.

Microsoft выпилили из новой версии IDE для написания запросов к MS SQL Server возможность дебага скриптов:

In the process, we’ve also had to make some hard decisions to deprecate/remove some features and tools including:
T-SQL debugger
Database diagrams
офф блог

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

При это поставив VISUAL STUDIO в ней возможность дебага скриптов есть.

Небось еще потом в виде DLC будут продавать эту возможность...

Классика
Я 54! последнее число месяц,! X ^ устанодка формат» даты / Г X +
4- С* 4ж>	©А ипо1:/,1уап<1в<Л1/«;згсЬ/'?1ел1 = 4ч1 последнее число месяца по месяцу &1г=вб&ла=
Яндекс
вя! последнее число месяца по месяцу
Найти
эц! последнее число месяца по месяцу зачатия,it-юмор,geek,Прикольные гаджеты.

SQL может в 3D !


От автора:
Несколько лет назад на форуме SQL.ru решили провести сравнение реализаций трассировщиков лучей на разных языках программирования. К сожалению, моя заявка не может участвовать т.к. она не выводит надпись «PIXAR», поэтому публикую ее здесь.
Для чистоты эксперимента я использовал SQLite без расширений. Оказалось, что там нет даже функции SQRT.

Вот тут можно покрутить куб 
А тут оригинальная статья

Пытаясь решить задачу автоматизации решил спросить на реакторе.

квест для программистов exel шарящих в базах данных реакторчан
Суть: необходимо составить таблицу (делаю в экселе, потому что других доступных средств на компе не нашёл) в которой указана информация о рекламных размещениях на различных порталах. одна запись содержит: 
дата подачи объявления
наименование товара который размещается (55 видов товара. ) 
название объявления (можно написать любое, для обхода робота) 
цена товара (можно отклониться от указанной цены на небольшое значение для обхода робота) 
текстовка (любая)
адрес сделки (можно менять на другие соседние адреса, для обхода модерации)
так же есть данные:
название портала (авито например, и другие)
логин (у логина и портала М:М (связь "многие ко многим"))
пароль (необязательно указывать, но с ним проще)

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

на данный момент верхняя часть содержит десяток основных позиций, но их то 55. и может быть и ещё больше.
как лучше всего всё это автоматизировать чтобы и наглядность была и работая не выть на луну. потому что дальше будет только хуже, добавятся товары, новые аккаунты. а в моей таблице уже нельзя сделать рекламу на один и тот же товар с одного аккаунта но с разной текстовкой.
из доступных для пролетариата средств я знаю Access и... больше ничего. как вариант рассматривал гугл таблицы для того что бы можно было не гонять эти таблицы туда сюда, а сразу дать доступ нескольким людям для общего редактирования, но переживаю за пароли. сейчас совсем запутался как из этого 2мерного говна сделать что то, с чем можно работать. голова кипит, а автоматизировать хочется. с чего лучше начать подобные танцы с бубнами?
если основой является телефон, на него регистрируется почта (яндекс, гугл и другие), на почту вяжутся аккаунты разных сервисов (авито, изруквруки и тд.), а уже с аккаунтов делаются тёмные дела, вроде рекламы или отзывов.

 
пидоры, помогите,реактор помоги,sql,песочница
					mi	r W\'
>|//»ryyrri,it-юмор,geek,Прикольные гаджеты. Научный, инженерный и  айтишный юмор,sql
"И так сойдёт… или как данные 14 миллионов россиян оказались у меня в руках"


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

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

Но времена сейчас другие, сейчас 21 век, век больших возможностей, любой работодатель, который умеет пользоваться мышкой и знает, как выглядит браузер на рабочем столе, может проверить данные диплома. Каждый диплом, который выдаётся учебным заведением, теперь регистрируется в едином реестре, доступ к которому есть у каждого через сайт Федеральной службы по надзору в сфере образования и науки.

ФЕДЕРАЛЬНАЯ СЛУЖБА ПО НАДЗОРУ В СФЕРЕ ОБРАЗОВАНИЯ И НАУКИ
РОСОБРНАДЗОР,взлом,информационная безопасность,sql,PostgreSQL,длиннопост,geektimes,habrahabr,текст,Истории,obrnadzor,много букв,рособрнадзор,СНИЛС,инн,дыра


Для получение информации о документе об образовании достаточно просто заполнить форму, передвинуть слайдер и нажать кнопку. Вам либо покажут информацию о документе, либо скажут, что такого нет (но ещё рано обвинять соискателя в обмане, мало ли, что могло произойти).

Для поиска введите точные значения реквизитов, указанные на бланке документа: Более подробно о работе с данным сервисом можно ознакомиться по ссылке
Уровень образования
Не выбрано
Уровна* обрио
Наименование 00: Фамилия обладателя документа: Серия бланка: Номер бланка Дата выдачи:
О Найти 00 по


Ну и пока я смотрел на эту форму, решил я с ней поиграться. Повводил всякой чепухи, и бац — на поле, в которое было введено 1', я получаю такой response:

<h2>Произошла ошибка</h2><p>SQLSTATE[42601]: Syntax error: 7 ERROR: syntax error at or near "4"LINE 6: ...me) = UPPER('1'')) AND (doc.education_level_id = '4') AND (U... ^</p>

Голый SQL Injection. Очевидно, что задачи продумать обработку ошибок перед разработчиком не было. Задача была сделать сервис, который работает. Сервис, который является гарантом. Так одинокий вечер превратился в весёлую одинокую ночь.

Ещё будучи подростком я очень любил всякие крутые истории про хакеров, а после того, как решил заняться программированием, изредка почитывал и интересные статьи по взлому и прочему. Так что то, что нужно делать дальше — я знал.

Так как разработчик этого сервиса дал нам удовольствие видеть ещё и часть запроса, то мы можем с уверенностью предположить, что это SELECT запрос. Теперь нам нужно как-то обнулить действие запроса, записанного в php-скрипте, а потом с помощью переменной вставить свой.

Для обнуления запроса достаточно просто добавить невозможное условие и закомментировать последующие строки запроса, что-то наподобие:

Инъекция
...me) = UPPER('1') AND (1=0)) — ')) AND (doc.education_level_id = '4') AND (U…

В ответ просто пришло сообщение о том, что документ не найден.

Также пробовал использовать вместо невозможного условия, наоборот, очевидные. А именно пробовал искать какой-либо документ по id. Писал id=1, id=1024 и прочее, но результатов не дало. Видимо, id давно перевалило за тысячи (спойлер: за миллионы).

Также я совершенно не надеялся на то, что запрос придёт без ошибки. Я был уверен, что пробелы будут экранироваться, удаляться, запрещаться, ещё что-нибудь. Ведь в форме на странице поиска ввести фамилию с пробелами невозможно. Но всё оказалось в разы проще.

Ну а теперь бы хотелось вытащить что-то действительно интересное. Изменить структуру ответа мы не можем никак, то есть если в запросе были, например, SELECT id, name, count, то так оно и останется. Значит надо подстраиваться, а для начала понять, какие же данные запрашиваются из БД, и, главное, сколько? Существует много способов узнать количество полей, но мне помог только ORDER BY. Как это работает?

ORDER BY сделан для сортировки, но его синтаксис не требует обязательно указывать имя поля, достаточно указать его позицию в запросе. Если указать номер позиции больше, чем количество запрашиваемых полей — то будет ошибка. Методом перебора можно подобрать количество полей. Их оказалось 55.

Хочется понять, с чем же мы работаем, что это за база данных такая? Предположим, что это MySQL, в MySQL есть функция Version(), которая возвращает версию БД. Применим:

Инъекция
...me) = UPPER('1') AND (1=0)) UNION SELECT 1,version(),тут ещё 53 поля, типы которых ещё надо определить методом подбора — ')) AND (doc.education_level_id = '4') AND (U…

В ответ пришёл JSON, в котором было:

PostgreSQL 9.1.2 on x86_64-alt-linux-gnu, compiled by x86_64-alt-linux-gcc (GCC) 4.5.3 20120111 (ALT Linux 4.5.3-alt1.M60C.1), 64-bit
Отлично, мы знаем систему, версию БД (под неё вроде даже эксплоиты были). Поле для действия расширилось. Узнаём, как выглядит запрос:

Инъекция
...me) = UPPER('1') AND (1=0)) UNION SELECT 1,current_query(),тут ещё 53 поля, типы которых ещё надо определить методом подбора — ')) AND (doc.education_level_id = '4') AND (U…

Ответ:
"SELECT "doc".*, "doc_type"."type", "stat"."name" AS "status", "level"."name" AS "level", "rec"."name" AS "rec_name", "rec"."surname" AS "rec_surname", "rec"."patronymic" AS "rec_lastname" FROM "documents" AS "doc" LEFT JOIN "document_types" AS "doc_type" ON doc_type.id = doc.document_type_id LEFT JOIN "document_packages" AS "dp" ON doc.document_package_id = dp.id LEFT JOIN "documents_status" AS "stat" ON stat.id = doc.status_id LEFT JOIN "education_levels" AS "level" ON level.id = doc.education_level_id LEFT JOIN "recipients" AS "rec" ON rec.id = doc.recipient_id WHERE (dp.status = 3) AND (doc.organization_id = '573') AND (doc.year = '2018-01-01') AND (UPPER(rec.surname) = UPPER('1')) UNION SELECT 1,current_query(),'3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '01.01.1970', '01.01.1970', '21', '01.01.1970', '23', '24', '25', '26', '01.01.1970', '28', '29', '30', '31', '32', '33', '28-05-2004 11:11:59', '35', '36', '28-05-2004 11:11:59', '38', '39', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '50', '51', '52', '53', '54', '55' -- ')) AND (doc.education_level_id = '4') AND (UPPER(doc.series) = UPPER('1')) AND (doc.number = '1') LIMIT 1"

Вся картина перед нами.

Попробуем узнать, что же за таблицы есть во всей базе данных:

Инъекция
...me) = UPPER('1') AND (1=0)) UNION SELECT 1,table_name,тут ещё 53 поля, типы которых ещё надо определить методом подбора FROM information_schema.tables — ')) AND (doc.education_level_id = '4') AND (U…

Таким образом получили все таблицы. Узнаём столбцы каждой таблицы следующим образом:

Инъекция
...me) = UPPER('1') AND (1=0)) UNION SELECT 1,CONCAT(column_name,' ',data_type,' ',is_nullable),тут ещё 53 поля, типы которых ещё надо определить методом подбора FROM information_schema.columns WHERE table_name='Какое-то имя таблицы' — ')) AND (doc.education_level_id = '4') AND (U…

Итак, зная структуру базы данных, я написал скрипт на Питон и выкачал все самые интересные на мой взгляд данные. А именно:

Таблицу с дипломами об образовании (серия, номер, год поступления, год окончания, СНИЛС!, ИНН!!, серия и номер паспорта (честно говоря, у всех записей поля пустые, но сам факт!), дата рождения, национальность (зачем?), учебная организация, выдавшая документ), таблицу с гражданами с образованием (там всё проще: ФИО и всё), таблицу с пользователями системы (стандартно, логин, email, и, НЕОЖИДАНО, md5 хэш пароля, хоть не сам пароль), отдельная таблица admin с одной записью (так же: логин, хэш пароля и прочее), таблица с информацией об учебных заведениях (кто начальник, email, телефон, лицензия — в общем всё, что и так есть в открытом доступе) и ещё кучу вспомогательных таблиц.

По объёмам получилось: около 14 000 000 документов об образовании, около 14 000 000 записей с данными о бывших студентах, 1322 пользователя системы, 1 админ, который логинится по будням в системе, видимо, когда на работу приходит, 3391 учебное заведение и горы непонятной информации типа ОКОГУ и прочее. База весом 5 гб.

А теперь представьте, сколько времени это качалось. Вы думаете, кто-то заметил? Может быть сервис резко отключился, ip заблокировали или ещё что-то? НЕТ!

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

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

Мог бы я продолжить и получить доступ в систему? Смог бы я сам изменять записи и добавлять свои? Вполне возможно, но я решил этого не делать. Да и сессию надо закрывать, без диплома-то никак…

Здесь мы собираем самые интересные картинки, арты, комиксы, мемасики по теме sql (+29 постов - sql)