Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Безопасность систем баз данных. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
12.08.2026
Размер:
905 Кб
Скачать

‘the_password’;

Query OK, 0 rows affected (0.00 sec)

Запрос создает пользователяMySQL prepodavatel и разрешает ему передавать свои привилегии для базы данных music другим пользователям. Поскольку привилегия GRANT OPTION задается на уровне базы данных(prestupnost.*), пользователь prepodavatel может передать свои привилегии для этой базы данных, а также для любой таблицы или столбца в этой БД. Привилегия GRANT OPTION всегда разрешает

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

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

MySQL root:

Теперьпередадимнашипривилегии другомупользователю:

mysql> GRANT ALL ON prestupnost.* TO 'laborant'@'localhost';

Query OK, 0 rows affected (0.00 sec)

Запрос передает все привилегии новому пользователюlaborant (без пароля). Он не передает привилегию GRANT OPTION, однако при желании это можно сделать:

mysql> GRANT GRANT OPTION ON prestupnost.* TO

'laborant'@'localhost';

 

 

Query OK, 0 rows affected (0.00 sec)

 

Теперь

пользователь laborant

имеет

возможность

выполнять в базе данных prestupnost те же операции, что и pre-

podavatel.

 

 

 

Существует возможность передать привилегиюGRANT

OPTION в

отдельной инструкции, которая подтверждает и

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

mysql> GRANT ALL ON prestupnost.* to 'laborant'@'localhost' WITH GRANT OPTION;

Query OK, 0 rows affected (0.00 sec)

111

Запрос выполняет те же операции, что и предыдущий пример из двух этапов для пользователя laborant.

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

с подключением под учетной записью prepodavatel:

mysql> GRANT ALL ON music.artist TO 'rose'®'localhost';

Query OK, 0 rows affected (0.00 sec)

Поскольку prepodavatel обладает всеми привилегиями для всех таблиц базы данныхprestupnost, он может передать все

привилегии

для

таблицыgruppirovka

любому

новому

пользователю.

 

 

 

 

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

структурным,

когда пользователю разрешен

или

запрещен

доступ

к

серверу, или мелкоструктурным,

при

котором

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

серверы БД поддерживают только крупноструктурное управление, а другие, в том числе и MySQL, — как крупноструктурный, так и мелкоструктурный контроль доступа к данным.

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

разрешает

явным

образом управлять правом

пользователей

запускать

инструкции SELECT, UPDATE, INSERT и

DELETE,

использовать для структур выраженияLOCK TABLES, ALTER, а

также создавать

или удалять индексы. По большей части

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

112

Пользователи

MySQL

отличаются

от

 

пользователей

 

операционной

системы

компьютера

сервера. Настраивая

 

компьютер,

автоматически

 

создаются

учетные

записи

 

суперпользователя,

позволяющие

конфигурировать

сервер.

В

 

системе Linux или Mac OS X таким пользователем является root,

 

а в Windows — это Administrator. Помимо

суперпользователя

 

создается

еще

 

несколько

учетных

записей

для

работы

с

сервером.

Например,

может

 

быть

учетная

запись

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

 

конфигурировании

программного

обеспечения

или

нового

 

текстового редактора. Для записи, чтения электронной почты,

 

работы

с Web и

выполнения

других операций

вполне

хватает

 

обычной учетной записи.

 

 

 

 

 

 

 

 

 

 

Обычная учетная запись не может получать доступ или

 

модифицировать важные системные файлы, например, получать

 

доступ к настройкам аппаратной поддержки или к журналам

 

регистрации

и

 

файлам

данных

сервераMySQL.

В

 

однопользовательской

 

системе

 

 

применение

м

привилегированной учетной записи для выполнения ежедневной

 

работы

 

снижает

вероятность

случайного

удаления

важных

 

системных файлов или установки злонамеренных программ. На

 

корпоративном сервере такая защита играет важную роль. Она

 

не

только

дает

возможность

предотвратить

случайные

повреждения или злонамеренные атаки, но и обеспечивает

 

конфиденциальность файлов и данных.

 

 

 

 

 

 

 

Если системная учетная запись на сервере может получать

 

доступ к конфигурации MySQL, то она в состоянии обойтись без

 

монитора

(или

любого иного клиентаMySQL) и

выполнить

 

действия непосредственно на сервере или

в

базах

данных.

 

Например, системный пользователь root может манипулировать

 

в системе любым экземпляром MySQL, а обычный пользователь

 

— лишь экземплярами, запущенными под его учетной записью.

 

С помощью текстового редактора можно просматривать данные,

 

индексы и структуры баз данных или

же

просто

копировать

 

куда-нибудь базы данных и получать к ним доступ посредством

 

другой

инсталляции MySQL. Поэтому

вам следует

принять

 

113

стандартные

меры

предосторожности

 

для

поддержки

физической

защиты

,серверапостоянно

 

обновлять

операционную

 

систему,

добавить

сетевой

брандмауэр,

использовать соответствующие полномочия для файлов и папок

и требовать сложные пароли. Помните, что если сервер не

защищен

или

взломан, то сервер MySQL полностью

лишается

защиты независимо от конфигурации пользователей и - при

вилегий MySQL. Точно так же следует позаботиться о защите

доступа к резервным копиям баз данных.

 

 

 

 

Создание

и управление новыми пользователями. Для

создания

нового

пользователя

нужно

иметь

полномочия.

Таковыми обладает пользователь root, поэтому мы подключимся к монитору как пользователь root:

mysql --user=root --password=12345

Теперь создадим нового пользователяkursant, который будет подключаться из той же системы, в которой запущен сервер MySQL (localhost). Предоставим этому пользователю все привилегии для всех таблиц базы prestupnostданных

(pretsupnost.*) и назначим пароль the_password:

mysql> GRANT ALL ON prestupnost.* TO ‘kursant’@’localhost’ IDENTIFIED BY ‘the_password’;

Query OK, 0 rows affected (0.02 sec)

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

Инструкция GRANT выдает привилегии пользователям. Сразу за ключевым словомGRANT следует список заданных привилегий. В нашем случае заданы привилегииALL (все простые привилегии). После списка привилегий нужно добавить ключевое слово ON вместе со списком баз данных и таблиц, для которых назначаются привилегии. В данном примере выданы привилегии для prestupnost.*, то есть БДprestupnost и всех ее таблиц. Если указанная учетная запись MySQL не существует, то она будет создана автоматически инструкцией GRANT.

В данном примере назначены привилегии для‘kursant’@’localhost’ это означает, что пользователь имеет имяkursant и может подключаться к серверу толькоlocalhostс —

114

машины, на которой установлен сервер баз данных. Для

 

пользовательских

 

имен

существует

 

ограничение

максимальную длину, составляющую 16 символов. Символ «@»

 

говорит о том, что пользователь пытается подключиться

к

серверу из указанного хоста. Учетная

запись

пользователя

 

MySQL

не

 

должна

соответствовать

системны

пользовательским учетным записям на этом хосте и не имеет

никакого отношения к адресам электронной почты. Кавычки, в

 

которые заключены имя пользователя и имя клиентского хоста,

 

являются опциональными. Они нужны

только в том случае,

когда в имени пользователя или хоста

есть

особые символы,

такие как дефисы (-) или групповые символы. Например, можно

 

написать следующее:

 

 

 

 

 

 

mysql> GRANT ALL ON prestupnost.* TO kur-

 

sant@localhost IDENTIFIED BY ‘the_password’;

 

 

Query OK, 0 rows affected (0.02 sec)

 

 

 

Тем не менее, рекомендуется всегда использовать кавычки

 

во избежание неприятных сюрпризов.

 

 

 

 

Опциональное

выражение IDENTIFIED BY 'the_password'

 

задает пользовательский пароль the_password. На длину пароля

 

ограничений не существует.

 

 

 

 

 

Теперь

немного

поэкспериментируем

с

новы

пользователем. Следует выйти из монитора с помощью команды

 

QUIT. Затем запустить его снова с

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

записи kursant:

 

 

 

 

 

 

 

mysql --user=kursant --password=the_password

 

На этот раз для параметраuser

задаем kursant, а в

 

параметре password указали пароль этого пользователя. Вновь

 

должно появиться приглашение командной строки mysql. Можно

 

войти в базу данныхprestupnost с помощью командыUSE

 

prestupnost; и клавиши Enter. Попробуем

запустить

простой

 

запрос:

 

 

 

 

 

 

 

 

mysql> SELECT * FROM presupnik;

Должен появиться список преступников.

До сих пор видно было границ наших привилегий. Попробуем войти в служебную базу данных mysql:

115

mysql> USE

mysql;

 

 

 

 

 

ERROR 1044 (42000): Access denied for user:

 

лгкыфте@'localhost' to database ‘mysql’.

 

 

Сервер MySQL указывает, что наш новый пользователь не

 

имеет права доступа к БДmysql. Действительно, если запросить

 

доступные MySQL базы данных, то этот сервер покажет только

 

доступные базы данных.

 

 

 

 

 

Пользователь без каких-либо привилегий работы с базами

 

данных

не

сможет

увидеть

или

использовать

эту

базу

(исключение составляет пользователь с глобальной привилегией

 

SHOW DATABASE).

 

 

 

 

 

 

Теперь попробуем создать новую базу данных:

 

 

mysql> CREATE DATABASE some_new_database;

 

 

ERROR 1044 (42000): Access denied for user

 

 

‘kursant’@’localhost’ to database '

 

 

 

some_new_database'.

 

 

 

 

 

Ничего не получилось, потому что когда заходили на

 

сервер

MySQL

как

пользователь root, то

не назначали

для

 

пользователя kursant привилегию создавать новые базы данных.

 

Теперь создадим второго пользователя, который может

 

получать доступ только к таблицеgruppirovka базы данных

 

prestupnost {prestupnost.gruppirovka). Затем следует выйти из

 

программы монитора (либо запустите монитор с

другого

 

терминала или окна командной строки) и вновь подключится к

 

серверу в качестве пользователя root. После этого создать нового

 

пользователя:

 

 

 

 

 

 

 

mysql> GRANT ALL ON prestupnost.gruppirovka TO

 

->'analitik'@'localhost'

IDENTIFIED

BY

 

'the_password';

 

 

 

 

 

 

Query OK, 0 rows affected (0.01 sec)

 

 

Указываем

таблицу gruppirovka

базы

данныхprestupnost

 

как prestupnost.gruppirovka. Если вы хотите предоставить доступ

 

к нескольким таблицам (но не ко всем) базы данных (или к

 

таблицам из различных ),БДто следует вводить несколько

 

инструкций GRANT. Например, чтобы добавить доступ к таблице

 

116

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

mysql> GRANT ALL ON prestupnost.prestupnik TO ->'analitik'@'localhost';

Query OK, 0 rows affected (0.01 sec)

Поскольку вновь используется пользовательское имя и местоположение 'analitik'@'localhost', то нет необходимости предоставлять пароль во второй инструкции. Пароль был задан во время создания пользователя и не изменялся во второй инструкции.

Можно разрешить пользователю получать доступ только к определенным столбцам таблицы. Например, разрешить пользователю kursant получать лишь доступ чтения(READ) к

столбцам prestupnik_name и prestupnik_id таблицы prestupnik: mysql> GRANT SELECT (prestupnik_name, prestup-

nik_id) ON prestupnost.prestupnik TO 'kursant'@'localhost';

Query OK, 0 rows affected (0.01 sec)

Здесь синтаксис отличается от предыдущих примеров. Вместо указания привилегийALL задавался стильSELECT, а также перечислены в скобках столбцы, к которым применяется эта привилегия (в данном случае это столбцы prestupnik_name и prestupnik_id). В остальной части инструкции используется такой же синтаксис, как и в предыдущих примерах. Предоставить все привилегии на уровне столбцов нет возможности. Необходимо указать каждый отдельно.

 

 

9.2. Создание удаленных пользователей

Предоставляя пользователю

права на

подключение к

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

которого

он

сможет

это

(делатьудаленный

клиент).

Предположим, что у вас установлена корпоративная сеть, где

ваша машина

имеет личныйIР-адрес 192.168.1.2, доменом

является work.ru, а ваш компьютер имеет имяcomp5 (то есть полное имя компьютера — comp5.work.ru). Допустим также, что сервер MySQL запущен на машине comp5 и в сети есть еще две

117

машины: comp1.work.ru — с IP-адресом 192.168.1.4 и

 

comp2.work.ru — с IP-адресом 192.168.1.6.

 

 

 

 

 

 

 

Пользовательские

учетные

записи

на

сервереMySQL

 

(пользователи,

или

учетные

записиMySQL) отличаются

от

 

учетных записей на хост-машинах (системные пользователи, или

 

учетные записи в операционной системе).

 

 

 

 

 

 

 

Если

доступ

для

пользователя ‘kursant’@‘localhost’

 

разрешен, то именно этого правила и придерживается сервер

 

MySQL. Можно подключаться только с localhost. Все остальные

 

подключения, в том числе реальный IP-адрес или домен машины

 

localhost, запрещены. Если вы хотите разрешить доступ с

 

192.168.1.4

(эквивалентным

 

доменным

именем

является

comp1.work.ru), то вам следует подтвердить

эти

привилегии

 

путем создания нового пользователя с именемkursant и хостом

 

192.168.1.4. Отметим, что каждая пара пользовательского имени

 

и

хоста

 

рассматривается

как

отдельный

пользователь

с

собственным паролем.

 

 

 

 

 

 

 

 

 

 

Войдите в монитор как пользовательroot и введите

 

следующую команду:

 

 

 

 

 

 

 

 

 

 

 

mysql> GRANT ALL ON *.* TO ‘kur-

 

 

 

 

 

sant'@'192.168.1.4’ IDENTIFIED BY 'the_password';

 

 

Query OK, 0 rows affected (0.00 sec)

 

 

 

 

 

Вы также можете вместо ip – адреса использовать имя

 

хоста

 

comp1.work.ru

 

 

при

 

 

условии

 

корре

отконфигурированного сервера доменных имен (DNS — Domain

 

Name Server).

 

 

 

 

 

 

 

 

 

 

 

 

Теперь вы можете запускать мониторMySQL на машине

 

comp1.work.ru и подключаться к comp5.work.ru, вводя команду:

 

 

mysql --user=kursant --host=comp5.work.ru --

 

password=the_password

 

 

 

 

 

 

 

 

 

 

Welcome

to

the

MySQL

monitor.

Commands

end

 

with ; or \g.

Your MySQL connection id is 52 to server version: 5.0.22-standard-log Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>

118

Использование IP-адресов 192.168.1.2 для comp5.work.ru и

 

192.168.1.4

для

comp1.work.ru

обеспечивает

большую

защиту,

 

поскольку IP-адреса сложнее угадать, чем доменные имена.

 

 

 

До сих пор для каждогоIP-адреса мы создавали нового

 

пользователя. Однако на практике этот метод не всегда удобен,

 

поскольку необходимо поддерживать всех пользователей и

 

синхронизировать

их

привилегии, если

доступ

с

трех

 

компьютеров осуществляется на одном уровне. Тем не менее,

 

данный метод позволяет отличать удаленных пользователей с

 

одним и тем же именем, а так же предлагает гибкую

 

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

 

удаленных компьютеров.

 

 

 

 

 

 

 

Рассмотрим другие способы подключения пользователя с

 

разных

компьютеров.

Например,

вы

можете

позволить

 

пользователю

подключаться

со

всех

компьютеров

подсети,

 

используя

один

или

несколько

групповых

символов

в

инструкции

GRANT. Чтобы разрешить пользователюprepoda-

 

vatel подключаться

к

серверу с

любой машины, запустите

 

следующую инструкцию:

 

 

 

 

 

 

 

mysql> GRANT ALL ON *.* TO 'prepodavatel'@'%'

 

 

IDENTIFIED BY 'the_password';

 

 

 

 

 

Query OK, 0 rows affected (0.01 sec)

 

 

 

Как и в случае с операторомSQL LIKE, групповой символ «%» соответствует любой строке, так что данная запись соответствует любому имени компьютера. В результате будут разрешены подключения для пользователяprepodavatel с любой машины в сети.

Групповые символы можно использовать и в IP-адресах. В качестве примера разрешим подключения со всех , машин разрешив доступ для диапазона IP-адресов 192.168.1.%.

Для этого запустим следующий запрос: mysql> GRANT ALL ON *.* TO 'labo-

rant'@'192.168.1.%' IDENTIFIED BY 'the_password';

Query OK, 0 rows affected (0.01 sec)

119

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

mysql> DROP TABLE IF EXISTS temp, tempi, temp2; Query OK, 0 rows affected, 3 warnings (0.00 sec)

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

Контрольные вопросы

1.Какие уровни управления привелегией ALTER?

2.Какие привелегии и уровни в MySQL?

3.Каково назначение привелегии GRANT OPTION?

120

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]