SQL Portal | Базы Данных
13.7K subscribers
1.14K photos
142 videos
51 files
810 links
Присоединяйтесь к нашему каналу и погрузитесь в мир баз данных

Связь: @devmangx

РКН: https://clck.ru/3H4Wo3
Download Telegram
CSRF ≠ XSS ≠ SQL-инъекция. Все три уязвимости безопасности, но механизмы атак у них разные

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

XSS — межсайтовый скриптинг: Вредоносный JavaScript внедряется в страницу и выполняется в браузере другого пользователя в контексте сайта.

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

Как защищаться:

CSRF
• Использовать CSRF-токены.
• Настроить атрибут SameSite для cookies.
• Проверять заголовки Origin/Referer для запросов, изменяющих состояние.

XSS
• Экранировать данные при выводе с учётом контекста: HTML, атрибуты, JavaScript.
• Если пользовательский HTML разрешён — очищать его с помощью санитайзера.
• Использовать строгую Content Security Policy (CSP) как дополнительный уровень защиты.
• Не вставлять недоверенный HTML напрямую в страницу.

SQL-инъекций
• Использовать подготовленные выражения и параметризованные запросы.
• Не подставлять пользовательский ввод в SQL через конкатенацию строк.
• Проверять входные данные и ограничивать права учётной записи БД.

Как запомнить:

CSRF — нежелательный запрос от вашего браузера.
XSS — чужой код в вашем браузере.
SQL-инъекция — чужая логика в запросе к базе.

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Знатоки SQL и те, кто только учится, вопрос к вам

Какой из этих запросов вы выберете для выполнения?

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Линтер и автоформаттер для SQL

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

Поддерживает PostgreSQL, MySQL, T-SQL, ClickHouse, BigQuery и другие диалекты. Работает с шаблонами Jinja и проектами dbt через отдельный плагин.

https://github.com/sqlfluff/sqlfluff

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4
Разбираем SQL-запросы с помощью Python

Какие таблицы и колонки использует запрос? Библиотека sql-metadata извлечёт эту информацию из SQL без подключения к базе и выполнения запроса.

Умеет работать с алиасами и подзапросами, определять колонки в SELECT, WHERE, JOIN и других частях запроса. Поддерживает синтаксис PostgreSQL, MySQL, SQLite, SQL Server и Apache Hive.

Пригодится для анализа SQL-файлов, автоматической документации и поиска зависимостей между запросами и таблицами.

https://github.com/macbre/sql-metadata

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍1
5 групп реляционных СУБД, которые полезно знать

• С открытым исходным кодом: PostgreSQL, MariaDB.
• Коммерческие и корпоративные: Oracle Database, Microsoft SQL Server, IBM Db2.
• Встраиваемые и настольные: SQLite, Microsoft Access.
• Распределённые SQL / NewSQL: CockroachDB, YugabyteDB.
• Облачные аналитические хранилища: Snowflake, Amazon Redshift.

Это условная группировка: здесь смешаны лицензирование, архитектура и назначение. Категории могут пересекаться — например, распределённая СУБД может одновременно быть open-source.

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
DBcooper — лёгкий клиент для работы с базами данных

Open-source-приложение на Tauri, Rust и React объединяет PostgreSQL, SQLite, Redis и ClickHouse в одном интерфейсе. Акцент на простоте и удобной работе с клавиатуры. А ещё есть генерация SQL по описанию на естественном языке.

https://github.com/amalshaji/dbcooper

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Оконные функции SQL: аналитика без потери отдельных строк

В отличие от GROUP BY, оконные функции позволяют выполнять вычисления по группам строк, сохраняя каждую строку в результате.

Ранжирование, накопительные суммы, скользящие средние, сравнение с предыдущей или следующей строкой через LAG и LEAD, работа с процентилями и границами окна — базовые приёмы, которые стоит освоить.

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Горизонтальные или вертикальные столбцы: что выбрать?

Оба варианта помогают сравнивать категории, но ориентация влияет на читаемость.

• Горизонтальные столбцы удобны, когда категорий много или у них длинные названия.

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

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍2
Бэкап есть? А если найду? 😳

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
😁5
Какие навыки нужны дата-инженеру?

В вакансиях прослеживается закономерность: на первом месте SQL и Python, дальше — облачные платформы, Spark, хранилища данных, оркестрация пайплайнов, потоковая обработка, Git, контейнеры и инструменты для работы с большими данными.

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
SQL: порядок написания ≠ порядок обработки

Запрос начинается с SELECT, но логически обрабатывается в другом порядке:

FROM / JOIN → WHERE → GROUP BY → HAVING → SELECT → DISTINCT → ORDER BY → LIMIT

Понимание этой последовательности помогает разобраться, почему алиас из SELECT обычно недоступен в WHERE, а фильтрация результатов агрегации выполняется через HAVING.

Важно: это логический порядок, а физический план выполнения выбирает оптимизатор СУБД.

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Чтобы запросы оставались быстрыми, понятными и справлялись с ростом объёма данных, нужны хорошие привычки при их написании.

Вот 15 принципов, которые стоит применять на практике:

1. Избегайте SELECT *: выбирайте только нужные столбцы.
2. Отфильтровывайте ненужные строки с помощью WHERE.
3. Понимайте разницу между INNER JOIN и LEFT JOIN.
4. Используйте CTE вместо громоздких подзапросов для улучшения читаемости.
5. Не маскируйте ошибки логики лишним DISTINCT.
6. Используйте UNION ALL, если удалять дубликаты не требуется.
7. Освойте оконные функции для сложных расчётов.
8. Согласовывайте типы данных, чтобы избежать неявных преобразований.
9. Сравнивайте планы для EXISTS и IN: первый не всегда быстрее.
10. Убирайте ORDER BY, если сортировка не нужна.
11. Используйте CROSS JOIN только когда действительно нужно декартово произведение.
12. Учитывайте, что функции над индексированными столбцами могут мешать использованию обычного индекса.
13. Используйте CASE для понятной условной логики.
14. Изучайте план выполнения через EXPLAIN; помните, что EXPLAIN ANALYZE действительно выполняет запрос.
15. Проверяйте корректность на небольших наборах данных, а производительность — на объёмах, близких к реальным.

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1