ресурс для начинающих веб-разработчиков
комплексные веб-услуги по созданию сайтов

Справочный материал по основным языкам программирования и верстки сайтов.

Готовая методика создания простых и сложных динамичных сайтов, с использованием PHP и MySQL.

Использование веб-редактора Adobe Dreamweaver в разработке сайтов.

Использование графических редакторов Adobe Flash, Adobe Photoshop, Adobe Fireworks в подготовке веб-графики.

Разработка веб-сайтов под "ключ".

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

Создание баз данных и пользователей. Система полномочий MySQL

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

Система баз данных MySQL может поддерживать множество различных баз данных. Обычно на одно приложение будет существовать одна база данных. В нашем примере с Интернет-магазином база данных будет называться books.

Создание базы данных

Создание базы данных представляет собой наиболее простую задачу. Введите в командной строке MySQL:

mysql> create database dbname;

Вместо dbname следует ввести имя базы, которую требуется создать. Чтобы приступить к реализации примера приложения "Интернет-магазин", создадим базу данных books.

Это все, что нужносделать. Ответ должен выглядеть так:

mysql> create database books;
Query OK, 1 row affected (0.08 sec)

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

Также легко создать базу данных, используя улиту phpMyAdmin. Если данная улита еще у вас не установлена, установите ее. Установка phpMyAdmin подробно изложена ЗДЕСЬ.

Откройте улиту, набрав в адресной строке http://localhost/pma.

Создание базы данных books

В пункте Новая база данных введите название базы данных books и в раскрывающемся списке выберите кодировку cp 1251_general_ci. Нажмите кнопку Создать. База данных будет создана.

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

Система MySQL может содержать много пользователей. Пользователь root из соображений безопасности должен использоваться только для административных целей. Каждый пользователь, которому необходимо работать в системе, должен получить учетную запись и пароль. Они не должны быть точно такими же, как вне MySQL (например, имя и пароль, которые используются для входа в UNIX или NT). To же самое относится и к пользователю root. Вообще, разумно иметь разные пароли для входа в систему и для MySQL, особенно, если речь идет о пароле пользователя root.

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

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

Система полномочий MySQL

Одно из главных достоинств MySQL — поддержка сложной системы полномочий.

Полномочие — это право определенного пользователя выполнять определенное действие над определенным объектом. Концепция очень похожа на концепцию прав доступа к файлам.

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

Принцип минимально необходимых полномочий

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

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

Это справедливо для MySQL так же, как и для любой другой системы. Так, чтобы выполнить запрос из Веб, обычному пользователю не нужны все те привилегии, которые имеются у пользователя root. Следовательно, потребуется завести еще одного пользователя, который будет обладать всеми необходимыми привилегиями для доступа к только что созданной базе данных.

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

Команды GRANT и REVOKE используются для того, чтобы предоставлять и лишать права у пользователей MySQL на четырех уровнях привилегий. Вот эти уровни:

  • Глобальный.
  • Базы данных.
  • Таблицы.
  • Столбца.

Команда GRANT служит для создания пользователей и предоставления им полномочий. В общем случае команда GRANT выглядит следующим образом:

GRANT privileges [columns]

ON item

TO user_name [IDENTIFIED BY 'password']

[REQUIRE ssl_options]

[WITH [GRANT OPTION | limit_options] ]

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

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

Заполнитель columns (столбцы) необязателен. Им можно воспользоваться для того, чтобы назначать привилегии по конкретным столбцам. Можно определять либо имя одного столбца, либо разделенный запятыми список имен столбцов.

Заполнитель item (элемент) может быть базой данных или таблицей, к которой применяются новые привилегии.

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

Чаще всего задаваться будут все таблицы в определенной базе данных — dbname. *(имя_базы_данных.*), конкретная таблица — dbname.tablename (имя_базы_данных.имя_таблщы) либо определенные столбцы — dbname.tablename и список необходимых столбцов в заполнителе columns. Все перечисленное представляет три других доступных уровня привилегий: базы данных, таблицы и столбца, соответственно. Если при выдаче этой команды используется какая-то конкретная база данных, параметр tablename сам по себе будет истолкован как "таблица в текущей базе данных".

В качестве значения user_name должно стоять имя пользователя, под которым пользователь должен входить в MySQL. Помните, что оно не должно совпадать с регистрационным именем, под которым входите в систему вы.

В MySQL user_name может включать в себя и имя хоста, что весьма удобно для того, чтобы различать пользователей, скажем, laura (имеется ввиду laura@localhost) и laura@somewhere.com. Это очень полезная вещь, поскольку часто пользователи на различных доменах имеют одни и те же имена. Кроме того, повышается степень защищенности, поскольку имеется возможность указать, откуда пользователи могут заходить и к каким базам данных или таблицам могут иметь доступ.

Параметр password следует заменить на пароль, необходимый для входа. Руководствуйтесь общими правилами использования паролей. О безопасности мы поговорим чуть позже, отметим лишь, что пароль не должен быть легко угадываемым. Не стоит употреблять слово со словаря или совпадающее с именем пользователя. В идеале пароль должен включать в себя буквы верхнего и нижнего регистров и небуквенные символы.

Конструкция REQUIRE позволяет указывать, что пользователь должен подключиться через SSL (уровень защищенных сокетов) и передать дополнительные опции для SSL. Дополнительную информацию о SSL-соединениях с MySQL можно найти в руководстве по MySQL.

Опция WITH GRANT OPTION, если она указана, дает право пользователю предоставлять свои полномочия другим.

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

MAX_QUERIES_PER_HOUR n

или

MAX_UPDATES_PER_HOUR n

или

MAX_CONNECTIONS_PER_HOUR n

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

Полномочия храняться в пяти системных таблицах, расположенных в базе данных mysql. Эти пять таблиц называются mysql.user, mysql.db, mysql.host, mysql.tables_priv, mysql. columns_priv. Вместо использования команды GRANT можно непосредственно изменять эти таблицы.

Типы и уровни полномочий

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

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

Полномочия для обычных пользователей сводятся к набору определенных команд SQL и правам на их выполнение. Более детально команды SQL рассматриваются дальше. Сейчас же мы лишь описываем, что эти команды делают. Полномочия показаны в табл. Элемент столбца "Применяется к" перечисляет объекты, которым могут быть присвоены полномочия конкретного типа.

Полномочия для пользователей
Полномочия Применяется к Описание
SELECT таблицам
столбцам
Разрешает пользователям выбирать строки (записи) в таблицах.
INSERT таблицам
столбцам
Разрешает пользователям вставлять новые строки в таблицы.
UPDATE таблицам
столбцам
Разрешает пользователям изменять значения в существующих строках таблиц.
DELETE таблицам Разрешает пользователям удалять существующие строки в таблицах.
INDEX таблицам Разрешает пользователям создавать и удалять индексы определенных таблиц.
ALTER таблицам Разрешает пользователям изменять структуру существующих таблиц, добавляя столбцы, переименовывая столбцы или таблицы и изменяя тип данных в столбцах.
CREATE базам данных
таблицам
Разрешает пользователям создавать новые базы данных или таблицы. Если командой GRANT обозначена определенная база данных или таблица, пользователь
может только создавать (CREATE) ту или иную базу данных или таблицу, что подразумевает первоначальное ее удаление.
DROP базам данных
таблицам
Разрешает пользователям удалять базы данных или таблицы.

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

Помимо полномочий перечисленных в таблице, существуют еще полномочия REFERENCES и EXECUTE, которые в настоящий момент не применяются, и GRANT, которые представлены опцией WITH GRANT OPTION, а не в списке privileges.

Полномочия для администраторов
Полномочия Описание
GREATE
TEMPORARY TABLES
Позволяет администратору использовать ключевое слово TEMPORARY в операторах CREATE TABLE
FILE Позволяет помещать в таблицы данные из файлов и наоборот.
LOCK TABLES Разрешает явное использование оператора LOCK TABLES
PROCESS Позволяет администратору просматривать серверные процессы, относящиеся ко всем пользователям
RELOAD Позволяет администратору перезагружать таблицы привилегий и подавлять привилегии, хосты, журнальные файлы и таблицы.
REPLICATION CLIENT Позволяет использовать SHOW STATUS на ведущих и ведомых серверах репликации
REPLICATION SLAVE Разрешает ведомым серверам репликации подключаться к ведущему серверу
SHOW DATABASES Позволяет с помощью оператора SHOW DATABASES получать список всех баз данных. Без этой привлегии выводятся только базы данных, для которых имеются другие привлегии
SHUTDOWN Позволяет администратору останавливать сервер MySQL
SUPER Позволяет администратору удалять потоки, относящиеся к любому пользователю

Эти полномочия можно предоставлять не только администраторам, но прежде чем так поступать, следует хорошенько подумать.

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

Существуют также два специальных полномочия.

Полномочия для администраторов
Полномочия Описание
ALL Предоставляет все привилегии, перечисленные в табл. выше. Вместо ALL можно также написать ALL PRIVILEGES.
USAGE He предоставляет никаких привилегий. Подобным образом можно подключить пользователя, дать ему возможность входить в систему, но без разрешения что-либо делать. Как правило, со временем такой пользователь все же получает какие-то привилегии.

Команда REVOKE

Противоположной команде GRANT является команда REVOKE. Она используется для лишения пользователя полномочий и по ситтаксису сходна с командой GRANT:

REVOKE privileges [(columns)]
ON item
FROM user_name

Если полномочия были предоставлены с конструкцией WITH GRANT OPTION, их можно удалить (вместе со всеми другими полномочиями) следующим образом:

REVOKE ALL PRIVILEGES, GRANT
FROM user_name

Примеры использования команд GRANT и REVOKE

Для предоставления полномочий администратору можно набрать:

mysql> grant all
-> on *
-> to serg identified by 'mnbl23'
-> with grant option;

Эта команда предоставляет пользователю serg с паролем mnbl23 все полномочия для всех баз данных с правом передачи привилегий другим пользователям.

Если этот пользователь в системе не нужен лишите его всех полномочий:

mysql> revoke all
-> on *
-> from serg;

Теперь можно определить обычного пользователя без каких либо полномочий:

mysql> grant usage
-> on books.*
-> to vlad identified by 'magic!23';

Поговорив с Владом (vlad), можно больше узнать о его намерениях и в результате предоставить ему необходимые полномочия:

mysql> grant select, insert, update, delete, index, alter, create, drop
-> on books.*
-> to vlad;

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

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

mysql> revoke alter, create, drop
-> on books. *
-> from vlad;

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

mysql> revoke all
-> on books. *
-> from vlad;