Администрирование пакета MySQL
Предоставление доступа к базам данных
СУБД MySQL использует специальную базу данных для предоставления прав доступа к своим базам данных. Эти права могут базироваться на именах серверов и/или пользователей и предоставляться для одной или нескольких баз данных
Пользовательские аккаунты могут быть снабжены паролями. При обращении к базе данных, пароль шифруется. Поэтому он не может быть перехвачен и использован посторонним (это мнение автора СУБД...).
СУБД MySQL имеет три таблицы, а именно:
База данных: mysql Таблица: db
База данных: mysql Таблица: db
Поле | Тип | Null | Ключ | Умолчание | Extra |
Хост | char(60) | | PRI | | |
Db | char(32) | | PRI | | |
Пользователь | char(16) | | PRI | | |
Select_priv | char(1) | | | N | |
Insert_priv | char(1) | | | N | |
Update_priv | char(1) | | | N | |
Delete_priv | char(1) | | | N | |
Create_priv | char(1) | | | N | |
Drop_priv | char(1) | | | N | |
База данных: mysql Таблица: host
Поле | Тип | Null | Ключ | Умолчание | Extra |
Хост | char(60) | | PRI | | |
Db | char(32) | | PRI | | |
Select_priv | char(1) | | | N | |
Insert_priv | char(1) | | | N | |
Update_priv | char(1) | | | N | |
Delete_priv | char(1) | | | N | |
Create_priv | char(1) | | | N | |
Drop_priv | char(1) | | | N | |
База данных: mysql Таблица: user
База данных: mysql Таблица: user
Поле | Тип | Null | Key | Умолчание | Extra |
Хост | char(60) | | PRI | | |
Пользователь | char(16) | | PRI | | |
Пароль | char(8) | | | | |
Select_priv | char(1) | | | N | |
Insert_priv | char(1) | | | N | |
Update_priv | char(1) | | | N | |
Delete_priv | char(1) | | | N | |
Create_priv | char(1) | | | N | |
Drop_priv | char(1) | | | N | |
Reload_priv | char(1) | | | N | |
Shutdown_priv | char(1) | | | N | |
Process_priv | char(1) | | | N | |
File_priv | char(1) | | | N | |
Пример добавления новых пользователей:
$ mysql mysql
mysql> INSERT INTO user VALUES ('%','monty',password('something'),
-> 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
mysql> INSERT INTO user (host,user,password) values('localhost','dummy','');
mysql> INSERT INTO user VALUES
('%','admin','','N','N','N','N','N','N','Y','N','Y','N');
mysql> quit
$ mysqladmin reload
Добавлено три новых пользователя (юзверя):
monty: Суперпользователь (администратор), должен использовать пароль, для работы с mysql.
dummy: Должен быть допущен к индивидуальной базе данных по таблице 'db '.
admin: Не нуждается в пароле, но разрешено выполнение только команд 'mysqladmin reload' and 'mysqladmin processlist'. Может быть допущен к индивидуальной базе данных через таблицу 'db'.
ВНИМАНИЕ! Вы ДОЛЖНЫ использовать функцию password() при создании пользователя, имеющего пароль. СУБД MySQL ожидает получить зашифрованный пароль.
Атрибуты, установленные в таблице пользователей перекрывают атрибуты, установленные в таблице DB. Если сервер поддерживает много баз данных, лучше создавать пользователей без прав доступа в таблице пользователей и назначать им права доступа к базе данных по таблице db.
Если Вы используете MIT threads package, обратите внимание, что имя localhost не будет работать, так как MIT threads package не поддерживает socket-подключения. Это означает, что Вы должны всегда определять ваш hostname (имя сервера) при подключении, даже если Вы работаете с одним и тем же сервером.
Следует помнить следующие правила при настройке прав доступа:
- Имя сервера и поля в таблице db могут содержать регулярные выражения языка SQL: символы % и _. В других полях использовать их нельзя.
- Имя сервера может быть доменным именем, именем localhost, IP адресом или SQL выражением. Пустое поле "имя сервера" означает любой сервер.
- Поле db является именем базы данных или SQL выражением.
- Пустое имя пользователя эквивалентно любому пользователю.
- Пустой пароль эквивалентен любому паролю. Вы можете создать суперпользователя (super-user) установив все права для него в 'Y' в таблице пользователей при создании этого аккаунта. Этот пользователь сможет делать что угодно, не считаясь со значениями, установленными в таблице DB!
- Таблица серверов проверяется только когда в таблице db поле "имя сервера" пустое.
- Все таблицы, по возможности, сортируются в порядке host-user-db.
Пользователь | Сортируется по именам серверов и пользователей. |
db | Сортируется по именам серверов, пользователей и баз данных. |
Сервер | Сортируется по именам серверов и баз данных. |
Начиная с версии 3.20.19 сервера введена еще одна хитрость, для попытки вычислить, как данный пользователь обратится к данной базе данных. Допустим существование пользователя с именем Джо, который зарегистрирован так:
Проверка таблицы баз данных будет выполнена для пользователя '' (пустое имя), а не для пользователя Джо, даже если пользователь, Джо имеет запись в таблице доступа к базам данных (db таблице).
Создание пользовательских аккаунтов - вероятно, наиболее путающий аспект СУБД MySQL, (особенно, если никогда не имел с ней дела), так что не удивляйтесь, если потребуется некоторое время, чтобы во всем разобраться и получить парочку несколько неприятных сюрпризов. Использование программы mysqlaccess делает управление доступом несколько более ясным.
Вообще лучше избегать использования регулярных выражений SQL в полях имени сервера. Это упрощает отладку.
Конкретно, установите все поля "имя сервера" в '%' и очистите таблицу серверов. Как только все начнет нормально функционировать, можно начинать эксперименты с добавлением имен серверов в таблицу серверов в случае такой необходимости.
Если получено сообщение об ошибке 'Access denied', то скорее всего вы нормально связались с демоном mysqld, но имеете неправильную информацию в вашей таблице пользователей.
Назад | Вперед
Содержание (общее) | Содержание раздела
Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
|