В начало → Gentoo и СУБД
Gentoo-doc HOME В началоСлед.: PostgreSQL Guide

Gentoo и СУБД


1. Руководство по MySQL для начинающих
2. PostgreSQL Guide

1. Руководство по MySQL для начинающих

Ссылка на оригинал: http://www.gentoo.org/doc/ru/mysql-howto.xml

C версии: 1.5

1.1. Начало работы с MySQL

1.1.1. Введение

MySQL — это популярный сервер баз данных, используемый в различных областях. Аббревиатура SQL означает Structured Query Language (язык структурированных запросов), именно его использует MySQL для общения с другими программами. Более того, в MySQL есть собственные расширенные функции SQL, дающие дополнительные возможности пользователям. В этом руководстве рассматривается процесс начальной установки MySQL, настройка баз данных и таблиц, заведение новых пользователей. Итак, начнем с установки.

1.1.2. Установка MySQL

Сначала нужно установить MySQL. Если вам нужны определенные возможности MySQL, установите соответствующие флаги USE, которые позволяют точнее регулировать процесс установки.

Листинг 1. Установка MySQL

(просмотр имеющихся флагов USE)
# emerge --pretend --verbose mysql
(установка MySQL)
# emerge mysql


По завершении установки вы увидите такое сообщение:

Листинг 2. Сообщение программы MySQL einfo

You might want to run:
"emerge --config =dev-db/mysql-[version]"
if this is a new install.

Рекомендуется запустить команду
"emerge --config =dev-db/mysql-[версия]"
после первоначальной установки MySQL.


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

Листинг 3. Настройка MySQL

# ebuild /var/db/pkg/dev-db/mysql-[version]/mysql-[version].ebuild config
 * MySQL DATADIR is /var/lib/mysql
 * Press ENTER to create the mysql database and set proper
 * permissions on it, or Control-C to abort now...

   Preparing db table
   Preparing host table
   Preparing user table
   Preparing func table
   Preparing tables_priv table
   Preparing columns_priv table
   Installing all prepared tables

   To start mysqld at boot time you have to copy support-files/mysql.server
   to the right place for your system

   PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
   To do so, issue the following commands to start the server
   and change the applicable passwords:
(обратите внимание на следующие 3 строки)
   /etc/init.d/mysql start
   /usr/bin/mysqladmin -u root -h pegasos password 'new-password'
   /usr/bin/mysqladmin -u root password 'new-password'
   Depending on your configuration, a -p option may be needed
   in the last command. See the manual for more details.

(различные сообщения, не относящиеся к установке, опущены для краткости)

   * For security reasons you should set your MySQL root
   * password as soon as possible.


Важно

Начиная с mysql-4.0.24-r2, пароли вводятся на этапе настройки, что повышает надежность ввода корневого пароля.

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

Листинг 4. Установка корневого пароля MySQL

# /etc/init.d/mysql start
 * Re-caching dependency info (mtimes differ)...
 * Starting mysqld (/etc/mysql/my.cnf) ...        [ ok ]
(вместо 'новый-пароль' укажите ваш пароль)
# /usr/bin/mysqladmin -u root -h localhost password 'новый-пароль'


Теперь вы можете убедиться в работоспособности нового пароля, попытавшись войти на свой сервер MySQL:

Листинг 5. Вход на сервер MySQL программой mysql

$ mysql -u root -h localhost -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4 to server version: 4.0.25

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>


Параметр -u указывает пользователя, который будет входить в систему. Параметр -h указывает узел сети. Обычно это localhost, если вы настраиваете не удаленный сервер. Наконец, -p сообщает программе-клиенту mysql, что для доступа к базе данных будет вводится пароль. Обратите внимание на приглашение mysql>. Именно здесь вы будете вводить все свои команды. Теперь, находясь в среде mysql в качестве корневого пользователя, мы можем начать настройку базы данных.

1.2. Настройка базы данных

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

Мы вошли, и на экране — приглашение mysql. Сначала взглянем на список уже имеющихся баз данных. Для этого введем команду SHOW DATABASES.

Листинг 6. Вывод списка баз данных MySQL

mysql> SHOW DATABASES;
+----------+
| Database |
+----------+
| mysql    |
| test     |
+----------+
2 rows in set (0.09 sec)


Важно

Запомните, что команды MySQL следует заканчивать точкой с запятой — ;

Несмотря на то, что база данных test уже создана, создадим свою собственную. Базы данных создаются командой CREATE DATABASE. Мы назовем свою gentoo.

Листинг 7. Создание базы данных gentoo

mysql> CREATE DATABASE gentoo;
Query OK, 1 row affected (0.08 sec)


Ответ дает понять, что команда выполнена без каких-либо ошибок. В данном случае, изменилась одна строка. Это относится к главной базе данных mysql, в которой содержится список всех баз данных. Но вам не нужно слишком беспокоиться о второстепенных подробностях. Последнее число означает время выполнения запроса. Убедиться, что база данных создана, мы можем, снова запустив команду SHOW DATABASES.

Листинг 8. Проверка наличия базы данных

mysql> SHOW DATABASES;
+----------+
| Database |
+----------+
| gentoo   |
| mysql    |
| test     |
+----------+
3 rows in set (0.00 sec)


Разумеется, наша база данных создана. Чтобы заняться созданием таблиц в новой базе данных gentoo, нам потребуется установить ее как текущую. Для этого используем команду USE. Параметром этой команды указывается название базы данных, которую нужно сделать текущей. Еще текущую базу можно устанавливать в командной строке, указывая ее название после параметра -D. Давайте продолжим и переключимся на базу данных gentoo.

Листинг 9. Переключение базы данных

mysql> USE gentoo;
Database changed


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

1.3. Работа с таблицами в MySQL

1.3.1. Создание таблицы

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

Листинг 10. Пустая база данных gentoo

mysql> SHOW TABLES;
Empty set (0.00 sec)


Значит, нужно создать несколько таблиц. Чтобы это сделать, используем команду CREATE TABLE. Однако, эта команда довольно сильно отличается от простой команды CREATE DATABASE. Ей передается список аргументов следующего вида:

Листинг 11. Синтаксис CREATE TABLE

CREATE TABLE [имя_таблицы] ([имя_поля] [тип_данных_поля]([размер]));


имя_таблицы — имя создаваемой таблицы. В данном случае, давайте создадим таблицу с названием developers (разработчики). В таблице будут находится имена разработчиков, адреса электронной почты и род занятий. имя_поля будет содержать имена полей. Нам нужны три имени: name (имя), email (почта) и job (род занятий). В параметре тип_данных_поля укажем тип заносимой информации. Перечень возможных форматов находится на странице описания типов столбцов MySQL (англ.). Здесь мы для всех полей укажем тип VARCHAR. VARCHAR — один из простейших типов данных, предназначенный для работы со строками. размер указывает, сколько данных можно сохранить в одном поле. Укажем 128. Это значит, что поле сможет содержать 128 байт данных типа VARCHAR. Cейчас можно упрощенно считать, что это 128 знаков текста, хотя на вышеупомянутом сайте представлено более точное описание. Теперь, зная, какую мы собираемся создать таблицу, сделаем это.

Листинг 12. Создание таблицы

mysql> CREATE TABLE developers ( name VARCHAR(128), email VARCHAR(128), job VARCHAR(128));
Query OK, 0 rows affected (0.11 sec)


Похоже, таблица создалась нормально. Давайте проверим это командой SHOW TABLES:

Листинг 13. Проверка таблицы

mysql> SHOW TABLES;
+------------------+
| Tables_in_gentoo |
+------------------+
| developers       |
+------------------+
1 row in set (0.00 sec)


Да, это она! Но не показано никакой информации о введенных типах полей. Для этого используем команду DESCRIBE (или ее краткий вариант, DESC), параметром которой указывается имя таблицы. Посмотрим, что она выдаст для таблицы developers.

Листинг 14. Описание таблицы developers

mysql> DESCRIBE developers;
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| name  | varchar(128) | YES  |     | NULL    |       |
| email | varchar(128) | YES  |     | NULL    |       |
| job   | varchar(128) | YES  |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+
3 rows in set (0.00 sec)


Показаны различные поля и их типы. Видно также несколько дополнительных атрибутов, выходящих за рамки этого руководства. За дополнительными сведениями можно обратиться к Руководству по MySQL (англ.). Теперь у нас есть рабочая таблица. Давайте двинемся дальше и наполним ее.

1.3.2. Заполнение базы данных MySQL

Таблица заполняется (данные добавляются) командой INSERT. Как и у команды CREATE TABLE, у нее есть определенный формат:

Листинг 15. Синтаксис INSERT

INSERT INTO имя_таблицы (столбец1, столбец2, ...) VALUES('знач1', 'знач2', ...);


Эту команду используют для вставки записей в таблицу. Сначала указывается имя таблицы, в которую нужно добавить информацию. Затем может идти список столбцов, в которые добавляются данные, а в VALUES указываются значения, которые добавляются в таблицу. Можно опустить список полей, если значения добавляются в каждое в том же порядке, в каком определены поля в таблице. Сейчас мы добавим данные в теблицу developers. Вставьте записи как в примере:

Листинг 16. Добавление информации в таблицу developers

mysql> INSERT INTO developers VALUES('Joe Smith', 'joesmith@gentoo.org', 'toolchain');
Query OK, 1 row affected (0.06 sec)
(Если вы не знаете порядок полей в таблице или хотите добавить неполную запись)
mysql> NSERT INTO developers (job, name) VALUES('outsourced', 'Jane Doe');
Query OK, 1 row affected (0.01 sec)


Согласно полученному ответу, запись, похоже, добавилась правильно. Но что если требуется ввести более одной записи? Именно здесь пригодиться команда LOAD DATA. Она загружает записи из файла, разделенного знаками табуляции. Попробуем создать файл с записями в своем домашнем каталоге. Назовем его records.txt. Вот пример:

Листинг 17. ~/records.txt

John Doe	johndoe@gentoo.org	portage
Chris White	chriswhite@gentoo.org	documentation
Sam Smith	samsmith@gentoo.org	amd64


Важно

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

Вообще, у команды LOAD DATA весьма пространное определение, но сейчас мы используем простейшую форму.

Листинг 18. Синтаксис LOAD DATA

LOAD DATA LOCAL INFILE '/путь/к/файлу' INTO TABLE имя_таблицы;


Здесь тоже все просто. Укажите путь к файлу и имя таблицы. В нашем случае — это файл ~/records.txt и таблица developers.

Листинг 19. Загрузка данных

mysql> LOAD DATA LOCAL INFILE '~/records.txt' INTO TABLE developers;
Query OK, 3 rows affected (0.00 sec)
Records: 3  Deleted: 0  Skipped: 0  Warnings: 0


Важно

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

Сработало. Но эта команда просто добавляет записи и не дает проконтролировать работу MySQL. Множество веб-приложений используют сценарии sql для быстрой и легкой настройки базы данных MySQL. Если вы хотите использовать сценарий sql, вам понадобится запустить mysql в пакетном режиме (в качестве ввода используется файл со сценарием). Вот пример запуска mysql в пакетном режиме:

Листинг 20. MySQL в пакетном режиме

$ mysql -u root -h localhost -p < sqlfile


Как и в случае с LOAD DATA, убедитесь, что знаете, что именно выполняет файл sqlfile. Не делая этого, вы можете подвергнуть вашу базу данных серьезному риску утечки! Другой путь заключается в использовании команды source. Эта команда запускает команды mysql из файла, когда mysql находится в интерактивном режиме. Вот как взять команды sql из файла:

Листинг 21. Исполнение команд sql из файла

mysql> source sqlfile;


Если вы столкнетесь с веб-приложением, которому нужно, чтобы вы запустили файл с командами sql, можно использовать одну из двух команд, показанных выше. Итак, наша таблица сформирована, но как же работать с полями? Это делается поиском в таблице при помощи запросов.

1.3.3. Запросы к таблицам в MySQL

Одна из главных функций любой базы данных SQL — запросы. Они помогают обратить данные из таблиц во что-то полезное. Большинство запросов выполняется командой SELECT. Эта команда довольно сложна, поэтому в этом документе мы рассмотрим лишь три основных ее формы.

Листинг 22. Формы SELECT

(Выборка всех записей в таблице)
SELECT * FROM имя_таблицы;
(Выборка конкретных записей в таблице)
SELECT * FROM имя_таблицы WHERE поле=значение;
(Выборка конкретных полей)
SELECT поле1,поле2,поле3 FROM имя_таблицы [WHERE поле=значение];


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

Листинг 23. Содержимое таблицы developers

mysql> SELECT * FROM developers;
+-------------+-----------------------+----------------+
| name        | email                 | job            |
+-------------+-----------------------+----------------+
| Joe Smith   | joesmith@gentoo.org   | toolchain      |
| John Doe    | johndoe@gentoo.org    | portage        |
| Chris White | chriswhite@gentoo.org | documentation  |
| Sam Smith   | samsmith@gentoo.org   | amd64          |
| Jane Doe    | NULL                  | Outsourced job |
+-------------+-----------------------+----------------+
5 rows in set (0.00 sec)


Видно данные, не только вставленные путем INSERT, но и вставленные командой LOAD DATA. Теперь, к примеру, нужно посмотреть запись для Chris White. Это можно сделать, используя вторую форму выборки.

Листинг 24. Выборка конкретной записи, используя SELECT

mysql> SELECT * FROM developers WHERE name = 'Chris White';
+-------------+-----------------------+---------------+
| name        | email                 | job           |
+-------------+-----------------------+---------------+
| Chris White | chriswhite@gentoo.org | documentation |
+-------------+-----------------------+---------------+
1 row in set (0.08 sec)


Как и ожидалось, отобрана нужная искомая запись. Теперь, допустим, что нужно знать только род занятий и адрес электронной почты, но не имя. Это делается при помощи третьей формы SELECT, как показано ниже.

Листинг 25. Выборка нужной записи и полей с помощью SELECT

mysql> SELECT email,job FROM developers WHERE name = 'Chris White';
+-----------------------+---------------+
| email                 | job           |
+-----------------------+---------------+
| chriswhite@gentoo.org | documentation |
+-----------------------+---------------+
1 row in set (0.04 sec)


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

1.4. Привилегии в MySQL

1.4.1. Предоставление привилегий командой GRANT

Привилегиями определяются возможности доступа пользователей к базам данных, таблицам... почти ко всему. Сейчас только суперпользователь root из MySQL может обращаться к базе данных gentoo, согласно данным разрешениям. Давайте создадим двух самых обычных пользователей, например, guest (гостя) и admin (администратора), которые будут обращаться к базе данных gentoo и работать с информацией из нее. Пусть пользователь guest будет ограничен в правах, и все, что он сможет — это получать информацию из базы данных. admin получит те же права доступа, что и root, но только к базе данных gentoo (не к основным базам mysql). Но прежде, чем начать, давайте взглянем на несколько упрощенный формат команды GRANT.

Листинг 26. Синтаксис GRANT

GRANT [привилегии] ON база_данных.* TO '[пользователь]'@'[узел]' IDENTIFIED BY '[пароль]';


Примечание

Команда GRANT считается способом создания пользователя. Поздние версии MySQL, однако, также содержат функцию CREATE_USER, хотя GRANT до сих пор предпочительнее.

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

  1. ALL - дается полный доступ ко всей базе данных

  2. CREATE - пользователям позволяется создавать таблицы

  3. SELECT - пользователям позволяется делать запросы к таблицам

  4. INSERT - пользователям позволяется вставлять данные в таблицу

  5. SHOW DATABASES - разрешается выводить список баз данных

  6. USAGE - у пользователя нет привилегий

  7. GRANT OPTION - пользователям разрешается давать привилегии

Примечание

Если вы используете MySQL для обмена данными с веб-приложением, то разъясняемые здесь привилегии CREATE, SELECT, INSERT, а также привилегии DELETE и UPDATE (описанные в руководстве по MySQL, раздел GRANT and REVOKE Syntax (англ.)) — единственные, которые, вероятно, потребуются. Многие совершают ошибку, раздавая все привилегии, когда это, в действительности, не нужно. Сверьтесь с разработчиками приложений, действительно ли такие разрешения создадут проблемы в работе.

Для нашего пользователя admin подойдет ALL. А для пользователя guest привилегии SELECT будет достаточно для доступа на чтение. В качестве базы данных укажем gentoo, на нее будут установлены разрешения. .* означает «все таблицы». Если потребуется, можно установить права доступа к отдельным таблицам. Дальше идет имя пользователя и имя узла, с которого будет работать пользователь. В большинстве случаев это будет узел localhost. Наконец, задается пароль пользователя. Исходя из этого, давайте создадим пользователей.

Листинг 27. Создание пользователей admin и guest

(admin)
mysql> GRANT ALL ON gentoo.* TO 'admin'@'localhost' IDENTIFIED BY 'пароль';
(guest)
mysql> GRANT SELECT ON gentoo.* TO 'guest'@'localhost' IDENTIFIED BY 'пароль';


Итак, пользователи созданы; теперь протестируем их. Сначала выйдем из mysql, написав quit в строке приглашения:

Листинг 28. Выход из MySQL

mysql> quit


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

1.4.2. Проверка прав пользователей

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

Листинг 29. Вход пользователя guest

$ mysql -u guest -h localhost -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6 to server version: 4.0.25

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>


Теперь нам нужно проверить его ограничения. Переключимся на базу данных gentoo:

Листинг 30. Переключение на базу gentoo

mysql> USE gentoo;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed


Теперь попытаемся сделать что-нибудь недозволенное. Попробуем создать таблицу.

Листинг 31. Попытка создать таблицу пользователем guest

mysql> CREATE TABLE test (test VARCHAR(20), foobar VARCHAR(2));
ERROR 1044: Access denied for user: 'guest@localhost' to database 'gentoo'


Как видно, это не удалось, из-за того, что у пользователя недостаточно прав. Но ему дано право на использование SELECT. Давайте проверим:

Листинг 32. Попытка выборки командой SELECT

mysql> SELECT * FROM developers;
+-------------+-----------------------+----------------+
| name        | email                 | job            |
+-------------+-----------------------+----------------+
| Joe Smith   | joesmith@gentoo.org   | toolchain      |
| John Doe    | johndoe@gentoo.org    | portage        |
| Chris White | chriswhite@gentoo.org | documentation  |
| Sam Smith   | samsmith@gentoo.org   | amd64          |
| Jane Doe    | NULL                  | Outsourced job |
+-------------+-----------------------+----------------+
5 rows in set (0.00 sec)


Команда успешно отработала, а получили представление о том, на что способны права пользователей. Но мы ведь еще создали пользователя admin. Он создавался для демонстрации того, что даже у пользователей, которым даны все права, могут быть ограничения. Выйдите из MySQL и зайдите как пользователь admin.

Листинг 33. Вход пользователя admin

mysql> quit
Bye
$ mysql -u admin -h localhost -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 7 to server version: 4.0.25

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>


Для начала, попробуем создать новую базу данных как пользователь admin. У пользователя admin схожие права с учетной записью root в MySQL, и он может вносить любые изменения, выбрав базу данных gentoo. Мы проверим права его доступа к главной базе данных MySQL. Вспомним, что ранее мы дали ему права только для доступа к конкретной базе данных.

Листинг 34. Попытка создания новой базы данных

mysql> CREATE DATABASE gentoo2;
ERROR 1044: Access denied for user: 'admin@localhost' to database 'gentoo2'


Разумеется, пользователь admin не может создавать базы данных в основной базе MySQL, несмотря на все права на базу данных gentoo. Но admin все еще может изменять базу данных gentoo, как показывает вставка данных в следующем примере.

Листинг 35. Права admin в базе данных gentoo

mysql> USE gentoo;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> INSERT INTO developers VALUES('Bob Simmons', 'bobsimmons@gentoo.org', 'python');
Query OK, 1 row affected (0.08 sec)


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

1.4.3. Удаление прав пользователя командой REVOKE

Команда REVOKE позволяет запретить доступ пользователю. Можно либо запретить любой доступ, либо только определенный. В самом деле, формат очень похож на GRANT.

Листинг 36. Синтаксис REVOKE

REVOKE [привилегии] ON база_данных.* FROM '[пользователь]'@'[узел]';


Параметры объясняются в разделе команды GRANT. А сейчас мы запретим пользователю любой вид доступа. Скажем, мы выяснили, что учетная запись guest вызывает проблемы с безопасностью. Мы решаем отозвать все права. Заходим как root делаем необходимое.

Листинг 37. Отзыв разрешений для пользователя user

mysql> REVOKE ALL ON gentoo.* FROM 'guest'@'localhost';
Query OK, 0 rows affected (0.00 sec)


Примечание

В данном случае, доступ пользователя прост, поэтому отмена прав на одну базу данных — не проблема. Но обычно вам, скорее всего, потребуется использовать *.* вместо gentoo.*, чтобы заодно отменить доступ пользователя ко всем остальным базам данных.

Давайте выйдем и попробуем зайти как пользователь guest.

Листинг 38. Попытка зайти как пользователь guest

$ mysql -u guest -h localhost -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9 to server version: 4.0.25

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>


Хотя нам удалось войти, доступ к базе gentoo уже пропал.

Листинг 39. Пользователю guest запрещен доступ

mysql> USE gentoo;
ERROR 1044: Access denied for user: 'guest@localhost' to database 'gentoo'


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

1.4.4. Удаление учетных записей командой DELETE

Таблица пользователей MySQL — это список пользователей и информации о них. Убедитесь, что вы зашли как root. Используйте основную базу данных MySQL.

Листинг 40. Использование основной базы mysql

mysql> USE mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql>


Посмотрим, какие в базе mysql существуют таблицы:

Листинг 41. Список таблиц БД mysql

mysql> SHOW TABLES;
+-----------------+
| Tables_in_mysql |
+-----------------+
| columns_priv    |
| db              |
| func            |
| host            |
| tables_priv     |
| user            |
+-----------------+
6 rows in set (0.00 sec)


Таблица user — та, что нужна. В ней 30 различных полей, и ее сложно читать. Для облегчения чтения используем третью форму команды SELECT. Искомые поля — Host (узел) и User (пользователь).

Листинг 42. Нахождение пользователя guest в таблице user

mysql> SELECT Host,User FROM user WHERE User = 'guest';
+-----------+-------+
| Host      | User  |
+-----------+-------+
| localhost | guest |
+-----------+-------+
1 row in set (0.00 sec)


Теперь, получив информацию, мы можем избавиться от пользователя guest. Это делается командой DELETE; вот ее синтаксис:

Листинг 43. Синтаксис DELETE

DELETE FROM имя_таблицы WHERE поле='значение';


Вы могли заметить, что формат DELETE чем-то схож с форматом SELECT. Укажем поле User и значение guest. Это удалит запись из таблицы user, где пользователь — guest, удаляя нашу гостевую учетную запись. Сделаем так:

Листинг 44. Удаление пользователя guest

mysql> DELETE FROM user WHERE User='guest';
Query OK, 1 row affected (0.07 sec)
(Команда FLUSH PRIVILEGES нужна, чтобы обновить разрешения)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)


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

Листинг 45. Попытка входа пользователя guest

mysql> quit
Bye
$ mysql -u guest -h localhost -p
Enter password:
ERROR 1045: Access denied for user: 'guest@localhost' (Using password: YES)


Все, пользователь успешно удален!

1.5. Заключение

В этом руководстве в основном рассматривалась настройка MySQL из командной строки. Существует несколько альтернатив с графическим интерфейсом:

  1. phpMyAdmin  — популярное средство администрирования MySQL, написанное на php.

  2. mysqlnavigator  — оболочка MySQL для Qt.

  3. gmyclient — клиент MySQL для GNOME.

  4. knoda — клиент MySQL для KDE.

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

В началоСлед.: PostgreSQL Guide
В начало → Gentoo и СУБД