Документация на MySQL

       

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


СУБД MySQL использует специальную базу данных для предоставления прав доступа к своим базам данных. Эти права могут базироваться на именах серверов и/или пользователей и предоставляться для одной или нескольких баз данных

Пользовательские аккаунты могут быть снабжены паролями. При обращении к базе данных, пароль шифруется. Поэтому он не может быть перехвачен и использован посторонним (это мнение автора СУБД...).

СУБД MySQL имеет три таблицы, а именно:

База данных: mysql Таблица: db

База данных: mysql Таблица: db

ПолеТипNullКлючУмолчаниеExtra

Хостchar(60)PRI  
Dbchar(32) PRI  
Пользовательchar(16) PRI  
Select_privchar(1)  N 
Insert_privchar(1)  N 
Update_privchar(1)  N 
Delete_privchar(1)  N 
Create_privchar(1)  N 
Drop_privchar(1)  N 



База данных: mysql Таблица: host

ПолеТипNullКлючУмолчаниеExtra

Хостchar(60) PRI  
Dbchar(32) PRI  
Select_privchar(1)  N 
Insert_privchar(1)  N 
Update_privchar(1)  N 
Delete_privchar(1)  N 
Create_privchar(1)  N 
Drop_privchar(1)  N 

База данных: mysql Таблица: user

База данных: mysql Таблица: user

ПолеТипNullKeyУмолчаниеExtra

Хостchar(60) PRI  
Пользовательchar(16) PRI  
Парольchar(8)    
Select_privchar(1)  N 
Insert_privchar(1)  N 
Update_privchar(1)  N 
Delete_privchar(1)  N 
Create_privchar(1)  N 
Drop_privchar(1)  N 
Reload_privchar(1)  N 
Shutdown_privchar(1)  N 
Process_privchar(1)  N 
File_privchar(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, (особенно, если никогда не имел с ней дела), так что не удивляйтесь, если потребуется некоторое время, чтобы во всем разобраться и получить парочку несколько неприятных сюрпризов. Использование программы делает управление доступом несколько более ясным.

Вообще лучше избегать использования регулярных выражений SQL в полях имени сервера. Это упрощает отладку.

Конкретно, установите все поля "имя сервера" в '%' и очистите таблицу серверов. Как только все начнет нормально функционировать, можно начинать эксперименты с добавлением имен серверов в таблицу серверов в случае такой необходимости.

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


Содержание раздела