Безопасность базы данных (бд): проблемы, перспективы, решения

Чтение записей

Другая частая операция при работе с базами данных в PHP — это получение записей из таблиц (запросы типа SELECT).
Составим SQL-запрос, который будет использовать выражение. Затем выполним этот запрос с помощью функции , чтобы получить данные из таблицы.

В этом примере показано, как вывести все существующие города из таблицы cities:

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

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

Цикл здесь используется для «прохода» по всем записям из полученного набора записей.
Значение поля каждой записи можно узнать просто обратившись по ключу этого ассоциативного массива.

Как получить сразу все записи в виде двумерного массива

Иногда бывает удобно после запроса на чтение не вызывать в цикле для извлечения очередной записи по порядку, а получить их сразу все одним вызовом. PHP так тоже умеет. Функция вернёт двумерный массив со всеми записями из результата последнего запроса.
Перепишем пример с показом существующих городов с её использованием:

Как узнать количество записей

Часто бывает необходимо узнать, сколько всего записей вернёт выполненный SQL запрос.
Это может помочь при организации постраничной навигации, или просто в качестве информации.
Узнать число записей поможет функция , которой следует передать ссылку на результат запроса.

Blackhole

Эта подсистема хранения данных принимает данные, но их не сохраняет. Вместо сохранения данных она отбрасывает (уничтожает) их после каждой вставки.

В следующем ниже примере показана работа таблицы :

И какой тогда прок от такой подсистемы хранения данных? Зачем кому-то ее использовать? Зачем запускать запрос , который ничего в таблицу не встав­ляет?

Эта подсистема хранения полезна для репликации с большим количеством сер­веров. Подсистема хранения данных Blackhole работает в качестве фильтрующе­го сервера между ведущим и ведомым серверами, который не хранит никаких данных, но который применяет только правила и и пишет двоичные журналы. Эти двоичные журналы используются для выполне­ния репликации на ведомых серверах. Мы обсудим это подробно в главе 6 «Репли­кация для построения высокодоступных решений».

Какие реляционные БД популярны в веб-разработке

MySQL

Это открытая СУБД, купленная Oracle в придачу к Sun Microsystems. С ней работают более половины (55,6%) всех разработчиков (по  опроса, который в 2020 году провёл сайт StackOverflow.com среди 65 тысяч респондентов).

Главные её преимущества — бесплатность и высокая скорость работы с данными. MySQL создавалась для обработки огромных массивов информации в промышленных масштабах, но благодаря доступности и быстродействию оккупировала Всемирную паутину, заслужив звание «СУБД всея интернета». И сегодня MySQL всё ещё самая удобная СУБД для работы с интернет-страницами и веб-приложениями.

MySQL пользуется мощной поддержкой у создателей языков программирования: практически во всех популярных языках есть интерфейс для работы с ней.

SQLite

Эта СУБД использует большую часть стандартного языка SQL.

Главное преимущество SQlight — встраиваемость. Это объясняется тем, что SQlight не приложение типа «клиент-сервер» (в отличие от других реляционных СУБД), а библиотека, которую подключают непосредственно к программе.

И она тоже весьма популярна: достаточно сказать, что SQLite есть в каждом смартфоне. Например, в смартфонах на Android там хранятся контакты и медиа, а в iOS её используют многие приложения.

PostgreSQL

Её можно назвать самой продвинутой. Это не просто реляционная, а объектно-реляционная свободная СУБД.

PostgreSQL поддерживает не только типы данных, которые есть в других реляционных СУБД. Помимо числовых, текстовых, булевых и других стандартных типов, в ней можно хранить и обрабатывать геометрические и денежные данные, сетевые адреса, JSON, XML, массивы, а также создавать собственные типы данных.

Oracle

Мне нравится12Не нравится26

Oracle Database – это система управления базами данных от компании Oracle. Эта СУБД также активно используется крупными компаниями и стоит немаленьких денег, но взамен она предоставляет огромный функционал и надёжность. Поэтому Oracle Database и Microsoft SQL Server являются серьезными конкурентами друг другу.

Результаты Oracle в рейтингах не так однозначны, например, по версии PYPL и DB-Engines, Oracle Database занимает первое место, по версии Stack Overflow Oracle находится на восьмой позиции, по результатам опросов софтверных компаний Oracle на четвертом месте по популярности.

Если учитывать только пару рейтингов, Oracle можно поставить даже на первое место, однако если принять во внимания все результаты, то Oracle поставить на первое место нельзя, поэтому в нашем рейтинге эта СУБД занимает третью строчку.

Создание пользователя и выдача прав

Рассмотрим два варианта создания учетных записей в СУБД MySQL/MariaDB.

1. С помощью команды GRANT.

Данный метод позволяет одной командой сразу и создать пользователя, и дать ему права. Но, начиная с MySQL 8, она возвращает ошибку — разработчики запретили ее использование и сначала требуется создать пользователя (с помощью ).

Синтаксис:

> GRANT <тип привилегий> ON <объект> TO <пользователь> <дополнительные опции>;

Например, эта команда предоставляет права доступа пользователю и, если его не существует, создает его:

> GRANT ALL PRIVILEGES ON *.* TO ‘dbuser’@’localhost’ IDENTIFIED BY ‘password’ WITH GRANT OPTION;

Описание команды:

ALL PRIVILEGES: предоставляет полные права на использование данных.*.* : права предоставляются на все базы и все таблицы.dbuser: имя учетной записи.localhost: доступ для учетной записи будет предоставлен только с локального компьютера.password: пароль, который будет задан пользователю.WITH GRANT OPTION: будут предоставлены дополнительные права на изменение структуры баз и таблиц.

2. С помощью команды CREATE USER.

Данный метод является универсальным. Он позволяет создать пользователя в системе без каких либо прав. После права назначаются командой GRANT.

Пример создания учетной записи:

> CREATE USER ‘dbuser’@’localhost’ IDENTIFIED BY ‘password’;

После можно задать права командой:

> GRANT ALL PRIVILEGES ON *.* TO ‘dbuser’@’localhost’;

Фиксация изменений и атомарность

В реляционных базах данных используются очень детальные и строгие бизнес-правила и политики в отношении фиксации изменений в базе данных (то есть сохранения изменений в данных на постоянной основе). Рассмотрим для примера складскую базу данных, в которой отслеживаются три запчасти, всегда использующиеся в комплекте. Когда одну из них извлекают из товарных запасов, две другие также должны извлекаться. Если одна из трех запчастей недоступна, две другие также не могут быть проданы отдельно, то есть, чтобы в базу данных можно было внести изменения, должны быть доступны все три запчасти. Реляционная база данных не разрешит сохранять изменения, если они не касаются всех трех запчастей. Эту особенность реляционных баз данных называют атомарностью или неразрывностью. Неразрывность необходима для сохранения точности данных в базе и обеспечения соответствия с правилами, нормативными положениями и бизнес-политиками.

Реляционные базы данных и ACID

Транзакции в реляционной базе данных имеют четыре важные характеристики: неразрывность (atomicity), целостность (consistency), изолированность (isolation) и неизменность (durability). Это сочетание получило название ACID.

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

Federated

Подсистема интегрированного хранения данных FEDERATED позволяет создавать одну базу данных на нескольких физических серверах. Она открывает клиентское соединение с другим сервером и выполняет запросы к таблице, получая и от­правляя строки по мере необходимости. Первоначально она рекламировалась как конкурентная функциональность, которая поддерживала многие корпоративные проприетарные серверы баз данных, такие как Microsoft SQL Server и Oracle, но это всегда было натяжкой, мягко говоря. Хотя казалось, что в ней задействовалось много гибкости и хитрых приемов, она оказалась источником многих проблем и по умолчанию деактивирована. Однако мы можем ее активировать, запустив двоичный файл сервера MySQL с параметром .

Давайте создадим таблицу FEDERATED.

 В поле содержится следующая ниже информация для вашей справки:

  • : имя пользователя удаленного сервера MySQL;
  • : пароль удаленного сервера MySQL;
  • : имя хоста удаленного сервера;
  • : номер порта удаленного сервера;
  • : имя базы данных удаленного сервера;
  • : имя таблицы базы данных удаленного сервера.

Что такое нормализация

Чтобы уменьшить размер реляционной базы (не хранить избыточные данные) и избежать противоречивости (аномалий) при работе с ними, отношения в базе нормализуют. Проще говоря — разбивают их на взаимосвязанные таблицы. Это называется декомпозицией.

Избыточность данных — это когда одни и те же данные хранятся в базе сразу в нескольких местах.

Проверим наш пример на избыточность

Каждая строка таблицы Messages содержит имя клиента и никнейм оператора, а также их телефоны. Причём в 1-й и 3-й строках мы видим звонки от одного и того же клиента, а в 1-й и во 2-й — ответы одного и того же менеджера. То есть в 1-й и 3-й строках дублируются имя и телефон клиента — Васи, а в 1-й и 2-й — никнейм менеджера «Оператор1».

Чтобы избавиться от дублирования информации, выделим сущности Клиент и Оператор. И вынесем специфичные для каждой атрибуты в отдельные таблицы.

В первой (Clients) будут храниться имена и телефоны клиентов, а во второй (Operators) — операторов. Кроме того, каждой записи в этих таблицах мы присвоим атрибут id — так называемый первичный ключ (его значение уникально, то есть не может повторяться в пределах таблицы). С его помощью мы установим связь с записями таблицы Messages.

Для этого к каждой записи в Messages (напомним, она всё ещё представляет сущность «звонок») добавим два новых атрибута (внешних ключа): id_client и id_oper. Они будут ссылаться на первичные ключи из таблиц Clients и Operators соответственно. Столбцы с именами и телефонами из таблицы Messages уберём.

И вот что получим:

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

Всего существует шесть форм нормализации реляционных баз данных — в порядке уменьшения избыточности отношений. Все они описаны формальными правилами. Наше отношение мы привели ко второй нормальной форме.

Ярлыки

ubuntu

FreeBSD

Ubuntu Server

Apache

Ubuntu 20.04

PHP

Mysql

Icinga2

PHP 7.0

Ubuntu 16.04

linux

FTP-сервер

FreeBSD 11

Icinga Web 2

Proftpd

SNMP

SVN

BIOS

Bind

LAMP

Lubuntu

NetBeans

PhpMyAdmin

SVN-сервер

Subversion

TFTP-сервер

USVN

Ubuntu 18.04

VLAN

VirtualBox

Wordpress

netplan

network

pecl

Мониторинг

Установка

.tar.gz

7zip

ALTQ

AMD-V

Asus F80S

Bash

Bind tools

Chromium browser

DHCP Relay

DHCP Server

DNS-server

DNS-сервер

FDB-таблица

FTPS

FreeBSD memstick

GraphicsMagick

HTTPS

Huawei EC306

Icinga Director

Icinga2 SNMP

Icinga2 Update

Icinga2 добавление хостов

Icingaweb2

ImageMagick

Imagick

Intel-VT

LibreOffice

MRTG

ModemManager

Monitoring

MysqlDump

NTP-сервер

Named

PostgreSQL

RDP-server

RapidSVN

Ruby

SEO-сервис

SMPlayer

SNV-клмент

SSL

SVN Web-interface

Samba

TFTPd

TSL

UltraISO

VLC

VLC remote

VirtualBox x64

VirtualHost

WIN32 Disk Imager

WebCollab

Webmin

Windows

Windows 7

ZIP

atftpd

bind9

bzip2

column

fdb

freebsd upgrade

freebsd-update

gmagick

grub

gzip

host

htaccess

ipfw

kernel

libfaudio0

libwebkitgtk-3.0

memcached

mod_dav

nslookup

php extension

portupgrade

pscp

route

scp

service

smb

snmp example

snmpwalk

sort

ssh

tar

telnet

template

tftpd-hpa

udev

usb-modeswitch

user roles

userdir

vdi

vino

vnc

wine

winehq

wp-emoji

xargs

xrdp

Архиватор

Информация о БД

Обновление портов

Обновление системы

Таблица MAC-адресов

Транслитерация

большая нагрузка процессора

запись образа

контроль версий

обновление BIOS

передача файлов

полезные команды

проблемы с звуковой картой

резервное копирование

сервер времени

система управления проектами

транслит

удаленное управление плэером

ядро

Плюсы и минусы MySQL

MySQL появилась в 1995 году. Она изначально была легка, доступна и интуитивно понятна. В итоге ее стали использовать компании со всего мира. В настоящее время система MySQL является негласным стандартом для баз данных.

Программа гибкая и простая в использовании. Она даже позволяет пользователям поменять исходный код, чтобы настроить сервер баз данных MySQL конкретно под себя. Доплачивать за это не придется даже в расширенных коммерческих версиях. В установке этой СУБД также нет ничего сложного — процесс займет не больше получаса.

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

Работа с таблицами баз данных MySQL удобна тем, что программа позволяет назначать уровень доступа. Например, работнику нижнего звена разрешено лишь вносить информацию. Специалисту рангом выше — не только вносить новое, но и изменять уже имеющиеся данные. Начальнику доступны любые действия вплоть до удаления.

До сих пор не знаете, кем хотите быть, когда вырастете?

Команда GeekBrains совместно с международными специалистами по развитию карьеры
подготовили материалы, которые помогут вам начать путь к профессии мечты.

Скачивайте и используйте уже сегодня:

Злата Арефьева
Карьерный консультант

Топ-30 самых востребованных и высокооплачиваемых профессий 2022

Подборка 50+ ресурсов об IT-сфере

Инструкция «Как выбрать подходящую профессию»

3,7 MB
Получить подборку бесплатно

Уже скачали 10940

Система поддерживает много разных графических интерфейсов. Одни можно использовать только на определенной операционной системе. Какие-то только на платной основе. Но в любой версии вы подберете себе максимально комфортный формат.

Весомый плюс MySQL — ее безопасность. В целом это один из важнейших параметров, по которым надо подбирать СУБД. Благодаря системе доступа и управления учетными записями вы установите самый высокий уровень безопасности. Возможна даже проверка на основе хоста и использование зашифрованного пароля.

Основной причиной популярности MySQL является полная поддержка SQL-языка. SQL — structured query language, то есть язык структурированных запросов. «Структурированный» значит, что любой запрос должен иметь определенную структуру. В противном случае БД не поймет, как на него реагировать. Сами запросы вводятся в особом терминале, отвечающем за управление базой данных.

С помощью запросов доступно:

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

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

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

Создание нового пользователя в MySQL

Ранее мы вносили все изменения в настройки MySQL под root-пользователем, имея полный доступ ко всем
базам данных. Однако для случаев, когда могут потребоваться более жесткие ограничения, есть способы
создания пользователей с особыми наборами прав доступа.

Давайте начнем с создания нового пользователя из консоли MySQL:

CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';

К сожалению, на данном этапе пользователь «newuser» не имеет прав делать что-либо с базами данных. На
самом деле, даже если если пользователь «newuser» попробует залогиниться (с паролем «password»), он
не попадет в консоль MySQL.

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

GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';

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

Поле завершения настройки прав доступа новых пользователей, убедитесь, что вы обновили все права
доступа:

FLUSH PRIVILEGES;

Создание таблицы при загрузке сайта

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

Вот такой ответ должен прийти:

Теперь установим сервер MySQL. Для этого открываем терминал и запускаем:

Вводим пароль, чтобы начать установку, и нажимаем на Enter.

Проверяем, установлен ли MySQL, этой командой:

Если установка прошла успешно, выводится примерно следующее:

Теперь для доступа к базе данных с использованием программы на PHP нужно передать в качестве аргументов в SQL-запросе имя пользователя и пароль. Поэтому создадим пользователя с паролем и предоставим ему права доступа к базе данных.

Нового пользователя и пароль создаем, выполняя следующую команду:

Теперь предоставим пользователю разрешения на доступ к базе данных, а заодно убедимся, что эти права доступа отображаются (для этого задействуем команду ):

И для доступа к MySQL в Google Cloud:

Для привязки ко всем адресам запускаем это:

Для создания нового пользователя и пароля нужно выполнить указанные выше команды. После добавления нового пользователя выходим и перезапускаем сервер MySQL:

Обратите внимание: в случае с PHP версией 7+ для правильного выполнения команд MySQL необходимо использовать расширение MySQLi. Функции MySQLi позволяют получать доступ к серверам баз данных MySQL

Для установки расширения MySQLi запускаем:

Теперь все готово к выполнению программ на PHP с интегрированием MySQL. Переходим к решению сформулированной выше задачи.

Первым делом создадим базу данных на сервере MySQL. Для этого подключимся к серверу MySQL:

Для того, чтобы создать таблицу, сначала нужно создать базу данных. Следующей командой создаем базу данных с названием «test»:

Дальше эту базу данных нужно выбрать:

Экспорт и импорт базы данных

Сначала определимся, что такое дамп базы данных MySQL? Простыми словами, это файл, где хранится копия БД. Информация с этого дампа используется, если понадобится заполнить пустую БД (при смене хостинга или переносе сайта с Denver) или заменить существующую БД (применяется для процесса восстановления). Расширение файла обычно .sql.

Как производится экспорт БД MySQL? Файлы базы данных обычно экспортируются (создается дамп) при помощи интерфейса phpMyadmin. Для выполнения операции придется сделать несколько шагов:

  1. В панели управления хостингом найдите phpMyadmin. В первую очередь его надо искать в разделе «Базы данных» и т. п.
  2. Слева в углу выберите базу данных, которая будет экспортирована сначала на ПК, а затем на другой хостинг.
  3. Нажмите на вкладку «Экспорт». На данном этапе может потребоваться выбор способа экспорта: «Обычный» с множеством настроек или «Быстрый», где настроек будет немного. На дальнейшие действия выбор никакого значения не окажет — главное, чтобы вы изменили только указанные далее настройки.
  4. Выберите все таблицы. Для этого нажмите на кнопку «Выделить все».
  5. Отметьте галочкой «Сохранить как файл», «Сохранить вывод в файл» или что-то наподобие в списке меню перед вами.
  6. На всякий случай запомните кодировку, не трогая ее при этом.
  7. Нажмите «Ок» и сохраните файл с БД на ПК.

Экспорт и импорт базы данных

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

mysqldump —user=DBUSER —password=USERPASSWORD DBNAME > DUMPFILENAME.sql

либо

mysqldump -uDBUSER -pUSERPASSWORD DBNAME > DUMPFILENAME.sql

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

DBUSER — имя пользователя базы данных, например, uhosting_databaseuser;

USERPASSWORD — пароль пользователя БД, например, Alan2016;

DBNAME — имя БД, откуда будут экспортироваться данные, например, uhosting_databasename;

DUMPFILENAME — имя dump-файла, в который будет производиться экспорт. Здесь вы можете указать путь, куда надо сохранить дамп-файл. Советуем этого не делать, просто забрав потом файл с сервера хостинг-провайдера.

Импорт БД

Под этой процедурой подразумевается перенос информации из одной базы данных (A) в другую (B). Зачастую база данных B располагается на хостинге (или на Denver), а база данных A — на компьютере пользователя (в виде файла с расширением .sql). База данных A имеет еще одно название — дамп.

Чтобы совершить импорт удаленной базы данных MySQL, найдите phpMyAdmin в панели управления хостингом (обычно находится в меню «Базы данных»). В phpMyadmin выберите необходимую БД, куда хотите сделать импорт данных. Определившись с базой данных, нажмите на вкладку «Импорт», затем «Обзор» — выбираете сохраненную на ПК базу данных. Не забудьте проверить идентичность кодировок. Больше менять ничего не нужно. После нажатия «Ок» ваша база данных добавится к той, что находится на хостинге.

Опишем также процедуру импорта базы данных MySQL с помощью SSH, хотя она применяется довольно редко. Сначала добавьте БД, откуда будут импортироваться данные, на сервер хостинг-провайдера, где хранятся файлы вашего сайта. Затем для импорта БД используйте команду:

mysql -uUSERNAME -pUSERPASSWORD DBNAME < DUMPFILENAME.sql

либо

mysql —user=USERNAME —password=USERPASSWORD DBNAME < DUMPFILENAME.sql

Вместо слов, набранных заглавными буквами, подставьте данные по схеме, описанной в части об экспорте БД

Обратите внимание, что на место DUMPFILENAME необходимо не только подставить имя dump-файла, откуда будут импортироваться данные, но и еще указать путь к БД, которую вы добавляли на сервер хостинг-провайдера

Зачастую систему управления базами данных MySQL ныне используют как имя нарицательное для общего понятия СУБД. Все из-за огромной популярности — ей пользуются Facebook, Google, Twitter и другие известные корпорации. Несмотря на то, что существует множество неплохих аналогов, имеющих определенные преимущества в тех или иных сферах, на лидирующих позициях остается все-таки MySQL. Пользователи баз данных со всего мира ценят ее за универсальность, простоту и надежность.

MEMORY (HEAP)

Тип таблиц MEMORY хранится в оперативной памяти, поэтому все запросы к такой таблице выполняются очень быстро. Недостатком является полная потеря данных в случае сбоя работы сервера, поэтому в таблице данного типа хранят только временную информацию, которую можно легко восстановить заново. 
При создании таблицы типа MEMORY она ассоциируется с одним-единственным файлом, имеющим расширение frm, в котором определяется структура таблицы.
При остановке или перезапуске сервера данный файл остается в текущей азе данных, но содержимое таблицы, которое хранится в оперативной памяти, теряется.

Ограничения MEMORY таблиц:

  • Индексы используются только в операциях сравнения совместимо с операторами = и <=>, с другими операторами, такими как > или < индексирование столбцов не имеет смысла
  • Возможно использование только неуникальных индексов.
  • Можно использовать записи фиксированной длины, поэтому в них не допустимы столбцы типов TEXT и BLOD.
  • В версиях, предшествующих MySQL 4.0.2, не поддерживается индексирование столбцов, содержащих NULL-значения.

Заключение

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

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

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

Светлана Щегель

Светлана — контент-маркетолог и редактор в SE Ranking

Светлана убеждена, что о сложных вещах можно писать просто и делится своими знаниями в области SEO и диджитал-маркетинга в блоге SE Ranking и других тематических медиа. Вечера Светлана проводит, изучая новые языки, планируя увлекательные путешествия и играя с кошкой

1 912

Светлана Щегель

Светлана — контент-маркетолог и редактор в SE Ranking. Светлана убеждена, что о сложных вещах можно писать просто и делится своими знаниями в области SEO и диджитал-маркетинга в блоге SE Ranking и других тематических медиа. Вечера Светлана проводит, изучая новые языки, планируя увлекательные путешествия и играя с кошкой.

Рейтинг
( Пока оценок нет )
Editor
Editor/ автор статьи

Давно интересуюсь темой. Мне нравится писать о том, в чём разбираюсь.

Понравилась статья? Поделиться с друзьями:
Люкс-хост
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: