При подключении к серверу MySQL пользователь указывает имя и пароль, а сервер проверяет, имеет ли клиент право получить доступ к серверу, и в случае успеха наделяет пользователя соответствующими привилегиями. Данные о привилегиях пользователей хранятся в системной базе mysql.
Проверка пользователя осуществляется по трем полям таблицы user (host, user и password) базы mysql. Сервер устанавливает соединение только в том случае, если находит в таблице user запись, в которой имя пользователя и пароль совпадают с введенными значениями.
Посмотреть, в каком виде хранятся пароли в таблице user можно при помощи следующих команд:
mysql>USE mysql
mysql>SELECT password FROM user;
Ознакомиться со всеми таблицами базы mysql можно подав команду
mysql>show tables;
После установления соединения сервер начинает сеанс работы с пользователем. Для каждого поступающего запроса сервер проверяет, имеется ли у пользователя достаточно привилегий для выполнения запроса. Информация о привилегиях находится в таблицах — user, db, host, tables_priv или columns_priv.
|
|
Список привилегий представлен ниже:
Привилегия | К чему применяется |
ALTER | Таблицы |
DELETE | Таблицы |
INDEX | Таблицы |
INSERT | Таблицы |
SELECT | Таблицы |
UPDATE | Таблицы |
CREATE | Базы данных, таблицы или индексы |
DROP | Базы данных или таблицы |
GRANT | Базы данных или таблицы |
SHOW DATABASES | Администрирование сервера |
SHUTDOWN | Администрирование сервера |
Сервер MySQL считывает содержимое этих таблиц во время запуска и в случаях, когда изменения в привилегиях вступают в силу.
Привилегии SELECT, INSERT, UPDATE И DELETE позволяют выполнять операции над строками таблиц баз данных. Привилегия index обеспечивает создание или уничтожение индексов. Привилегия alter позволяет использовать команду alter table. Привилегии create и drop позволяют создавать новые или уничтожать существующие базы данных и таблицы. Привилегия GRANT gram позволяет вам предоставлять другим пользователям привилегии, которыми обладаете вы сами.
Остальные привилегии используются для администрирования SQL – сервера.. Команда shutdown завершает работу сервера.
При запуске сервера MySQL все сведения о привилегиях пользователей загружаются в память, и с этого момента привилегии вступают в силу.
Команды grant и revoke позволяют системным администраторам создавать пользователей MySQL а также предоставлять права пользователям или лишать их прав на четырех уровнях.
· Глобальный уровень.
Глобальные привилегии применяются ко всем базам данных на указанном сервере. Эти привилегии хранятся в таблице mysql.user.
· Уровень базы данных.
Привилегии базы данных применяются ко всем таблицам указанной базы данных. Эти привилегии хранятся в таблицах mysql.db и mysql.host.
|
|
· Уровень таблицы.
Привилегии таблицы применяются ко всем столбцам указанной таблицы.
Эти привилегии хранятся в таблице mysql. tables_priv.
· Уровень столбца.
Привилегии столбца применяются к отдельным столбцам указанной таблицы. Эти привилегии хранятся в таблице mysql.columns_priv.
Команда grant позволяет добавлять новых пользователей сервера:
mysql> GRANT SELECT, INSERT ON taxi.* TO Mike@localhost
IDENTIFIED BY 'secret';
Эта команда дает права insert и select на базу taxi (на все таблицы - это задается символом звездочки) пользователю Mike, который подключается локально (localhost), причем, при подключении к серверу пользователь должен указать пароль 'secret’. Пароль хранится на сервере в зашифрованном виде.
mysql> GRANT ALL PRIVILEGES ON *.* TO Ann@"%"
->IDENTIFIED BY 'some_pass' WITH GRANT OPTION;
Здесь Anna получает все права (all privileges) на все таблицы всех баз сервера (*. *), причем подключаться она может как локально, так и удаленно через сеть (это указано символом % после Anna@). Вдобавок Anna может передавать свои права другим пользователям (with grant option), т. е. сама может подавать команду grant и создавать новых пользователей системы.
mysql> GRANT USAGE ON *.* TO dummy@localhost
IDENTIFIED BY ‘password’;
Пользователь dummy, созданный в этом примере, может подсоединяться
к серверу, но только с локального компьютера. Привилегия USAGE
означает, что у пользователя отсутствуют все другие привилегии. Такое может потребоваться, когда человек принят на работу, но обязанности его еще не определены. Предполагается, что относящиеся к базам данных привилегии будут назначены позже. Не удастся создать пользователя с пустым паролем — система не позволяет это из соображений безопасности.
Команда REVOKE позволяет администратору лишать пользователей прав:
REVOKE SELECT (use_on) ON taxi.timetable FROM Mike @ localhost;
Пользователь Mike не может просматривать значения поля use_on в таблице timetable.
Команда set может устанавливать различные опции, влияющие на работу
сервера или клиента. Пароль для пользователя root также можно задать с помощью этой команды:
mysql> SET PASSWORD FOR root@localhost=PASSWORD('new_password’);
Пользователи могут работать и непосредственно с таблицами назначения привилегий:
mysql> USE mysql;
Mysql> UPDATE user SET Password=PASSWORD('new_password')
-> WHERE user='root';
После этого следует подать команду, заставляющую сервер перечитать таблицы привилегий — тогда они вступят в силу:
mysql> FLUSH PRIVILEGES;
Если пароль задается при помощи оператора grant...identified by, нет необходимости использовать функцию password (). Эта команда самостоятельно производит шифрацию пароля, поэтому пароль следует указывать в простом текстовом виде, например, таким образом:
mysql> GRANT USAGE ON *.* TO jeffrey@"%" IDENTIFIED BY 'biscuit';
Изменения, которые вносятся в таблицы назначения привилегий при помощи команд grant, revoke или set password, учитываются сервером сразу после выполнения этих инструкций.