Информация о привилегиях
пользователя хранится в таблицах
user, db,
host, tables_priv и
columns_priv базы данных
mysql (т.е. в базе данных с
именем mysql). Сервер MySQL считывает
содержимое этих таблиц во время
запуска, и в случаях, указанных в
разделе See Раздел 4.3.3, «Когда изменения в привилегиях вступают в силу».
Ниже приведены имена, используемые в данном руководстве для ссылок на привилегии, предоставляемые в MySQL 4.0.2. Здесь же указаны имена табличных столбцов, ассоциированных с каждой из привилегий в таблицах привилегий, наряду с контекстом, в котором эти привилегии имеют силу:
| Привилегия | Столбец | Контекст |
ALTER |
Alter_priv |
таблицы |
DELETE |
Delete_priv |
таблицы |
INDEX |
Index_priv |
таблицы |
INSERT |
Insert_priv |
таблицы |
SELECT |
Select_priv |
таблицы |
UPDATE |
Update_priv |
таблицы |
CREATE |
Create_priv |
базы данных, таблицы или индексы |
DROP |
Drop_priv |
базы данных или таблицы |
GRANT |
Grant_priv |
базы данных или таблицы |
REFERENCES |
References_priv |
базы данных или таблицы |
CREATE TEMPORARY TABLES |
Create_tmp_table_priv |
администрирование сервера |
EXECUTE |
Execute_priv |
администрирование сервера |
FILE |
File_priv |
доступ к файлам на сервере |
LOCK TABLES |
Lock_tables_priv |
администрирование сервера |
PROCESS |
Process_priv |
администрирование сервера |
RELOAD |
Reload_priv |
администрирование сервера |
REPLICATION CLIENT |
Repl_client_priv |
администрирование сервера |
REPLICATION SLAVE |
Repl_slave_priv |
администрирование сервера |
SHOW DATABASES |
Show_db_priv |
администрирование сервера |
SHUTDOWN |
Shutdown_priv |
администрирование сервера |
SUPER |
Super_priv |
администрирование сервера |
Привилегии SELECT,
INSERT, UPDATE и
DELETE позволяют выполнять
операции над строками таблиц баз
данных.
Для операторов SELECT
привилегия SELECT
требуется только в том случае, если
они действительно извлекают
строки из таблицы.. В ряде случае
можно выполнять операторы
SELECT, даже не имея
разрешения на доступ ни к одной
базе данных на сервере. Например:
клиент mysql вы можете
использовать в качестве обычного
калькулятора:
mysql>SELECT 1+1;mysql>SELECT PI()*2;
Привилегия INDEX позволяет
создавать или уничтожать (удалять)
индексы.
Привилегия ALTER позволяет
использовать команду ALTER
TABLE.
Привилегии CREATE и
DROP позволяют создавать
новые базы данных и таблицы или
уничтожать (удалять) существующие
базы данных и таблицы.
Заметим, что в случае, если
пользователю предоставляется
привилегия DROP по
отношению к базе данных
mysql, он может уничтожить
базу данных, в которой хранятся
привилегии доступа в MySQL!
Привилегия GRANT позволяет
вам предоставлять другим
пользователям привилегии,
которыми обладаете вы сами.
Привилегия FILE дает вам
право читать и записывать файлы на
сервере с помощью операторов
LOAD DATA INFILE и SELECT ... INTO
OUTFILE. Любой пользователь,
которому предоставлена такая
привилегия, имеет право прочитать
или записать любой файл, который
может прочитать или записать
сервер MySQL. Пользователь также
может прочитать любой файл в
каталоге текущей базы данных.
Однако существующие файлы
перезаписывать нельзя.
Остальные привилегии используются
для операций администрирования,
выполняемых с помощью программы
mysqladmin. В таблице,
приведенной ниже, для каждой из
привилегий администрирования
показано, какие команды
mysqladmin она позволяет
выполнять.
| Привилегия | Команды, разрешенные обладателю привилегии |
RELOAD |
reload, refresh,
flush-privileges,
flush-hosts,
flush-logs, and
flush-tables
|
SHUTDOWN |
shutdown |
PROCESS |
processlist |
SUPER |
kill |
Команда reload заставляет
сервер перечитать таблицы
привилегий. Команда refresh
очищает все таблицы, а также
открывает и закрывает файлы
журналов. flush-privileges
является синонимом reload.
Остальные команды flush-*
выполняют функции, аналогичные
функциям команды refresh, но
с более узкой областью действия. В
некоторых случаях такие команды
могут оказаться более
предпочтительными. Например, если
вы хотите очистить только
системные журналы, команда
flush-logs лучше, чем
refresh.
Команда shutdown завершает
работу сервера.
Команда processlist выводит
информацию о задачах,
выполняющихся на сервере. Команда
kill уничтожает серверные
потоки. Собственные потоки всегда
можно просмотреть или уничтожить,
но для отображения потоков,
запущенных другими
пользователями, нужна привилегия
PROCESS,а для уничтожения
потоков, запущенных другими
пользователями, потребуется
привилегия SUPER.
Обратитесь к разделу See
Раздел 4.5.5, «Синтаксис команды KILL».
В общем случае идея предоставлять привилегии только тем пользователям, которым они необходимы, хорошая, но к предоставлению некоторых из них следует относиться особенно внимательно:
Привилегия GRANT
позволяет пользователям
передавать свои привилегии
другим пользователям. Два
пользователя с неодинаковыми
привилегиями, имея привилегию
GRANT, способны
объединить свои привилегии.
Привилегия ALTER может
быть использована для
переименования таблиц и
разрушения таким образом всей
системы привилегий.
Привилегия FILE может
использоваться злонамеренно для
считывания любого доступного
файла, хранящегося на сервере,
или любого файла в каталоге
текущей базы данных в таблицу, к
содержимому которой можно затем
получить доступ с помощью
команды SELECT.
Привилегия SHUTDOWN может
использоваться злонамеренно для
полного прекращения работы
сервера и, таким образом, полного
запрещения обслуживания других
пользователей.
Привилегия PROCESS может
быть использована для просмотра
открытого текста запросов
выполняющихся в данный момент,
включая запросы на установку или
изменение паролей.
Привилегии доступа к базе данных
mysql могут быть
использованы для изменения
паролей и другой информации,
относящейся к привилегиям
доступа. (Пароли хранятся в
зашифрованном виде, поэтому
злоумышленник не сможет просто
прочесть их, чтобы получить
пароли в виде обычного текста).
Получив доступ к столбцу паролей
mysql.user, любой
пользователь может войти на
сервер MySQL под именем другого
пользователя (имея достаточные
привилегии, тот же самый
пользователь может заменить
пароль на другой).
Есть вещи, которые система привилегий MySQL делать не может:
Нельзя явно указать, что данному пользователю должен быть закрыт доступ. Т.е. вы не можете явно выбрать пользователя и затем отказать ему в подключении.
Нельзя указать, что некий пользователь имеет привилегии создавать или удалять таблицы в базе данных, но не имеет привилегий создавать или удалять саму базу данных.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.
© 1995-2005 MySQL AB. All rights reserved.
