По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
Привет, сегодня расскажем что такое база данных и SQL. У современных баз данных куча нюансов - погнали разбираться. Представь - собираешь ты деньги на подарок корешу, и записываешь на бумажке, кто сколько скинул. Табличка с денежками организована, разделена по именам и сумме долга, и имеет удобную структуру - ну вот оно, это и есть база данных! Ага, теперь, перемещаемся в цифровое пространство и заводим целый эксель файл для этого дела. Стало удобнее, можно редактировать, сортировать и даже данные удалять! Круто! Но достаточно ли этого для роста этой базы данных? Нет. Со временем данных становится так много, что админам приходится связывать их друг с другом, а тут одним эксель файлом уже не обойтись. Представим, решили вы сделать свой аналог ютуба, как будете хранить инфу о пользователях? Список юзеров, там, каналы, кто на что подписан, лайки и вот это все. Сложить это все в одну таблицу? Будет неудобно и медленно работать. Очевидно, надо разделить сущности на несколько таблиц - юзеры, каналы и видосы: Теперь свяжем данные между собой и добавим информацию о том, кто создал канал, и на каком канале залили видео. Ага, получились связанные таблицы. Связанные, от слова связь. А связь, это по-английски relation. А в айти тусовке они так и называются - реляционные базы данных, и это один самых распространенных типов баз данных. Еще есть нереляционные базы данных, о них подробнее можно прочитать в этой статье про NoSQL. Уф, ну теперь с данными стало гораздо удобнее работать, и мы избежали большой таблицы с повторяющимися строчками, разбив все на несколько табличек. Такой процесс еще называется нормализацией, когда мы избавляемся от избыточных данных. Ну и как раз для этого мы ввели в каждой таблице специальное поле - ID, которое идентифицирует каждую запись. Этот айди называется Primary Key, он же “первичный ключ”. А в таблице которая будет на него ссылаться, он будет называться Foreign Key, или по-русски “внешний ключ”. Нырнем в детали и поговорим про типы связей между таблицами. Первый тип называется “Один-ко-многим” или “многие-к-одному” (One-to-Many или Many-to-One). В нашем примере, у каждого видео может быть только один канал, где оно выложено, но на одном канале может быть много видео, поэтому в двух последних строках ID канала у нас повторяется, верно? Отношения «один-ко-многим» также можно рассматривать как отношения «многие-к-одному», в зависимости от того, с какой стороны вы на это смотрите. Второй тип связей называется “один-к-одному” (One-to-One) - классические табличные отношения. Вообще, это редко используемый тип связи, обычно его делают для безопасности. Это как если на нашем аналоге ютуба, мы разрешили бы создавать только один канал одному пользователю и в таблице с каналами ID создателя не могло повторяться. Такое себе, согласен? В таком случае вообще можно было бы обойтись и одной таблицей. Ну и третий тип связей, это “многие ко многим” (Many-to-many). Это когда у нас появляется промежуточная таблица связей, которая как бы соединяет два отношения “один ко многим”, которые мы обсудили в начале разбора типов связей. Давайте сделаем таблицу с лайками балалайками, где будем хранить ID пользователей и ID видео, к которым они поставили лайк: А вот так они связан: каждый пользователь может поставить лайк каждому видео. Теперь вопрос - а где все это хранить? Не в экселе же. И тут на сцену выходит термин СУБД, она же система управления базами данных - это программа, которая позволяет создавать, редактировать и администрировать реляционную базу. Ну и для управления всей этой петрушкой используется язык структурированных запросов, SQL (Structured Query Language) эскюэль или сиквел, как иногда его называют за рубежом. Он очень простой и понятный, вот смотри - чтобы найти названия всех видео с одного канала, нам нужно выполнить следующий запрос: SELECT name FROM videos WHERE channel_id = 201 То есть мы буквально говорим: выбери (SELECT) имена из (FROM) таблицы видео, где (WHERE) айдишник (ID) канала равен 201. Если вы хотите взять данные из нескольких таблиц и объединить результат, то нужно использовать в запрос параметр JOIN (от английского соединить). Вот такая упрощающая жизнь админам аналогия с разговорным языком. Так, SQL конечно позволяет добавлять, удалять и изменять данные и сами таблицы. Но важно не забывать про схему базы данных (Database schema), которая служит для описания структуры таблицы, ее полей и ограничений. Прикол в том, что если вам потребуется добавить или убрать столбец в таблице, то это изменение коснется вообще всех данных в таблице, таким образом если мы добавляем новый столбец, то он теперь будет присутствовать в каждой строке. Окей, а для чего вообще нужны ограничения? Для целостности твоих данных. Помнишь мы рассказали про первичный и внешний ключ? Так вот, благодаря им мы можем удостовериться, что в таблицу не попадет запись, которая ссылается на несуществующий айдишник. Или различные ограничения полей, которые не дадут записать дублирующие или пустые данные в нашу базу (Not NULL и Unique). И еще: транзакции. Эта штука, которая позволяет как бы склеить несколько SQL запросов в один. Ну вот представь такую задачку: вставить данные в первую таблицу, а во второй указать ID вставленной записи. Если ты делаешь это без использования транзакций, а во время второго этапа у тебя отвалится интернет, то первая запись попадет в базу, а вторая нет. Ага, появляется интернет, и ты с улыбкой на лице идешь снова выполнить эти запросы, только на этот раз получишь ошибку, что такая запись уже есть, ибо первая то уже в базе! А в случае использования транзакций, при получении ошибки, мы откатимся до того момента, который был до начала транзакции. А еще все эти радости помогают реляционным БД (базам данных) соответствовать так называемым требованиям ACID, которые нужны для сохранности данных - это очень важно в банковской отрасли, или любой другой, где целостность и сохранность данных супер важны. Давай разберемся с аббревиатурой: Atomicity — атомарность, или же проще говоря, непрерывность: это как раз про транзакции, которые мы обсудили только что. Либо операция выполняется целиком, либо никак. Consistency — согласованность: данные, записываемые в таблицу должны соответствовать всем выставленным правилам и ограничениям, помнишь, мы говорили про первичный и внешний ключи, а также про уникальность? Isolation — изолированность: если вы гоняете тонну транзакций одновременно, они не должны пересекаться и влиять друг на друга. Это очень важно для высоконагруженных баз Durability — надежность: если мы получили подтверждение, что транзакция выполнена, то значит наши данные в сохранности, даже если после этого произошел сбой. Ну и в качестве примеров таких баз данных назовем: Microsoft SQL Server, Oracle Database, MySQL, MariaDB и PostgreSQL.
img
Команда sudo - одна из самых популярных команд, доступных в Linux. Она позволяет пользователям выполнять команды от имени другого пользователя, который по умолчанию настроен на запуск от имени пользователя root. У вас есть два варианта предоставления пользователю доступа к sudo. Первый - добавить пользователя в файл sudoers. Этот файл содержит информацию, которая определяет, каким пользователям и группам предоставляются привилегии sudo, а также уровень привилегий. Второй вариант - добавить пользователя в группу sudo, определенную в файле sudoers. По умолчанию в дистрибутивах на основе RedHat, таких как CentOS и Fedora, членам группы «wheel» предоставляются привилегии sudo. Добавление пользователя в группу wheel Самый простой способ предоставить пользователю привилегии sudo в CentOS - это добавить пользователя в группу «wheel». Члены этой группы могут запускать все команды через sudo и получать запрос на аутентификацию по паролю при использовании sudo. Мы предполагаем, что пользователь уже существует. Если вы хотите создать нового sudo пользователя, то посмотрите как это сделать в этой статье. Чтобы добавить пользователя в группу, выполните приведенную ниже команду от имени пользователя root или другого пользователя sudo. Измените «username» на имя пользователя, которому вы хотите предоставить разрешения. usermod -aG wheel username Предоставления доступа sudo с использованием этого метода достаточно для большинства случаев использования. Чтобы проверить доступ к sudo, запустите команду whoami: sudo whoami Вам будет предложено ввести пароль. Если у пользователя есть доступ к sudo, команда выведет «root». Если вы получаете сообщение «user is not in the sudoers file» (пользователь отсутствует в файле sudoers), это означает, что у пользователя нет привилегий sudo. Добавление пользователя в файл sudoers Привилегии sudo пользователей и групп настраиваются в файле /etc/sudoers. Добавление пользователя в этот файл позволяет вам предоставлять настраиваемый доступ к командам и настраивать пользовательские политики безопасности для пользователя. Вы можете настроить доступ пользователя sudo, изменив файл sudoers или создав новый файл конфигурации в каталоге /etc/sudoers.d. Файлы внутри этого каталога включены в файл sudoers. Чтобы отредактировать файл /etc/sudoers, используйте команду visudo. Эта команда проверяет файл на наличие синтаксических ошибок при его сохранении. Если есть какие-либо ошибки, файл не сохраняется. Если вы откроете файл в текстовом редакторе, синтаксическая ошибка может привести к потере доступа к sudo. Обычно visudo использует vim для открытия /etc/sudoers. Если у вас нет опыта работы с vim, и вы хотите отредактировать файл с помощью nano, укажите: EDITOR=nano visudo А лучше прочитайте нашу статью про vim :-) Допустим, вы хотите разрешить пользователю запускать команды sudo без запроса пароля. Откройте файл /etc/sudoers: visudo Прокрутите вниз до конца файла и добавьте следующую строку: username ALL=(ALL) NOPASSWD:ALL Сохраните файл и выйдите из редактора (подсказка - :wq). Не забудьте изменить «username» на имя пользователя, которому вы хотите предоставить доступ. Другой распространенный пример - позволить пользователю запускать только определенные команды через sudo. Например, чтобы разрешить использовать только команды du и ping: username ALL=(ALL) NOPASSWD:/usr/bin/du,/usr/bin/ping Вместо того, чтобы редактировать файл sudoers, вы можете добиться того же, создав новый файл с правилами авторизации в каталоге /etc/sudoers.d. Добавьте то же правило, что и в файл sudoers: echo "username ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/username Такой подход делает управление привилегиями sudo более понятным. Название файла не важно. Это обычная практика, когда имя файла совпадает с именем пользователя. Вывод Предоставление пользователю доступа sudo - простая задача, все, что вам нужно сделать, это добавить пользователя в группу «wheel». Ну и не забыть как выходить из vim!
img
В данной статье мы опишем настройки сети, которые могут очень пригодится для малых и средних сетей. Мы настроим на Cisco ASA DHCP сервер с несколькими внутренними локальными сетями. У нас есть три разных внутренних локальных сети с ПК пользователей и другой инфраструктурой – серверами, принтерами и так далее. Нашей задачей является разделение этих сетей с помощью использования Cisco ASA (данная задача решается как на старых моделях 5500, так и на новых 5500-X). Три внутренних локальных сети будут подключены к одному коммутатору второго уровня с тремя VLAN-ами на данном коммутаторе ASA будет предоставлять доступ к интернету для всех внутренний ЛВС. Кроме того, ASA также будет выполнять функции DHCP сервера для каждой из ЛВС, назначая нужные IP – адреса для каждой из сетей, используя разные DHCP пулы. Кроме того, мы будем использовать один физический интерфейс на ASA для размещения внутренних зон безопасности (“inside1”,“inside2”,“inside3”). Для этого нам необходимо настроить саб-интерфейсы на физическом интерфейсе нашего МСЭ, который подключен к транковому порту коммутатора. Каждый саб-интерфейс будет служить шлюзом по умолчанию для соответствующих подсетей. Касаемо настроек свитча – нам необходим один порт Dot1Q, который будет подключен к фаерволлу, и также необходимо будет настроить порты доступа для внутренних хостов. Топология изображена ниже: Убедитесь, что вы используете лицензию security-plus. Из топологии мы видим: Интерфейс GE1 на ASA – внешняя зона с адресом 100.1.1.1 будет подключен к провайдеру Интерфейс GE0 на ASA – интерфейс, подключенный к транковому порту на коммутаторе. Данный интерфейс будет разбит на три саб-интерфейса, каждый из которых принадлежит свой зоне безопасности и VLAN. Саб-интерфейс GE0.1 - VLAN10 (адрес 10.1.1.254) – зона безопасности “inside 1” Саб-интерфейс GE0.2 - VLAN10 (адрес 10.2.2.254) – зона безопасности “inside 2” Саб-интерфейс GE0.3 - VLAN10 (адрес 10.3.3.254) – зона безопасности “inside 3” Интерфейс Eth0/1, Eth0/2, Eth 0/3 на коммутаторе – настраиваются как порты доступа для соответствующих VLAN-ов (10, 20, 30) Хосты в VLAN 10 – получат адреса с ASA через DHCP (10.1.1.0/24) на интерфейсе “inside1” Хосты в VLAN 20 - получат адреса с ASA через DHCP (10.2.2.0/24) на интерфейсе “inside2” Хосты в VLAN 30 – получат адреса с ASA через DHCP (10.3.3.0/24) на интерфейсе “inside3” Все внутренние локальные сети – данные сети получат доступ к интернету через ASA с использованием PAT (NAT Overload) на внешнем интерфейсе МСЭ Важно отметить, что в данном примере настройка меж-VLAN маршрутизации проведена не была – есть только доступ в интернет. Конфигурация Cisco ASA Ниже указан конфиг для МСЭ ! Данный физический интерфейс разбиваем на три саб-интерфейса (порт подключен к транковому порту коммутатора) interface GigabitEthernet0 no nameif no security-level no ip address ! ! Это саб-интерфейс GE0.1 для VLAN10 interface GigabitEthernet0.1 vlan 10 nameif inside1 security-level 100 ip address 10.1.1.254 255.255.255.0 ! Это саб-интерфейс GE0.2 для VLAN20 interface GigabitEthernet0.2 vlan 20 nameif inside2 security-level 90 ip address 10.2.2.254 255.255.255.0 ! Это саб-интерфейс GE0.3 для VLAN30 interface GigabitEthernet0.3 vlan 30 nameif inside3 security-level 80 ip address 10.3.3.254 255.255.255.0 ! This is the WAN interface connected to ISP Это WAN интерфейс, подключенный к ISP interface GigabitEthernet1 nameif outside security-level 0 ip address 100.1.1.1 255.255.255.0 ! Настраиваем сетевые объекты для трех ЛВС object network inside1_LAN subnet 10.1.1.0 255.255.255.0 object network inside2_LAN subnet 10.2.2.0 255.255.255.0 object network inside3_LAN subnet 10.3.3.0 255.255.255.0 ! Данный ACL полезен тем, что разрешает ходить ICMP трафику (пинг и так далее) access-list OUT extended permit icmp any any access-group OUT in interface outside ! Разрешаем доступ в Интернет – для этого настраиваем PAT (NAT Overload) на внешнем интерфейсе object network inside1_LAN nat (inside1,outside) dynamic interface object network inside2_LAN nat (inside2,outside) dynamic interface object network inside3_LAN nat (inside3,outside) dynamic interface access-group OUT in interface outside route outside 0.0.0.0 0.0.0.0 100.1.1.2 ! Создаем три разных DHCP cущности ! DHCP сущность для VLAN10 – “inside1” dhcpd address 10.1.1.1-10.1.1.100 inside1 dhcpd enable inside1 ! DHCP сущность для VLAN20 – “inside2” dhcpd address 10.2.2.1-10.2.2.100 inside2 dhcpd enable inside2 ! DHCP сущность для VLAN30 – “inside3” dhcpd address 10.3.3.1-10.3.3.100 inside3 dhcpd enable inside3 ! Назначаем DNS cервер для внутренних хостов dhcpd dns 200.1.1.1 На этом все, переходим к настройке свитча. Настройка коммутатора Настройка коммутатора очень проста – необходимо настроить транковый порт и три порта доступа, с указанием VLAN. ! Транковый порт, который подключается к GE0 interface Ethernet0/0 switchport trunk encapsulation dot1q switchport mode trunk duplex auto ! Порт доступа для VLAN10 interface Ethernet0/1 switchport access vlan 10 switchport mode access duplex auto ! Порт доступа для VLAN20 interface Ethernet0/2 switchport access vlan 20 switchport mode access duplex auto ! Порт доступа для VLAN30 interface Ethernet0/3 switchport access vlan 30 switchport mode access duplex auto
ВЕСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59