INSERT |
|
Разрешает использование |
|
|
|
|
|
|
|
|
|
INSERT |
|
|
|
|
|
||
|
|
|
|
|
|
|
|||
LOCK TABLES |
|
Разрешает использование |
|
|
на таблицах, |
|
|||
|
|
LOCK TABLES |
|
|
|
|
|
||
|
|
для которых есть привилегия SELECT |
|
|
|
|
|
||
PROCESS |
|
Разрешает использование SHOW FULL PROCESSLIST |
|
||||||
|
|
|
|
|
|||||
REFERENCES |
|
Зарезервировано для использования в будущем |
|
|
|||||
|
|
|
|
|
|
|
|
|
|
RELOAD |
|
Разрешает использование |
|
|
|
|
|
|
|
|
|
FLUSH |
|
|
|
|
|
||
REPLICATION |
|
Предоставляет пользователю право запрашивать |
|
||||||
CLIENT |
|
местонахождение головного и подчиненных серверов |
|
||||||
|
|
|
|
|
|
||||
REPLICATION |
|
Необходимо для подчиненных серверов при |
|
|
|
||||
SLAVE |
|
репликации (для чтения информации из бинарных |
|
||||||
|
|
журналов головного сервера) |
|
|
|
|
|
|
|
SELECT |
|
Разрешает использование |
|
|
|
|
|
|
|
|
|
SELECT |
|
|
|
|
|
||
SHOW |
|
SHOW DATABASES выводит все базы данных |
|
|
|
||||
DATABASES |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SHUTDOWN |
|
Разрешает использование |
|
|
|
|
|
|
|
|
|
mysqladmin shutdown |
|
||||||
SUPER |
|
Позволяет установить одно соединение (один раз), |
|
||||||
|
|
даже если достигнуто значение max_connections, и |
|
||||||
|
|
запускать команды CHANGE |
MASTER, KILL |
thread, |
|
||||
|
|
mysqladmin debug, PURGE |
MASTER LOGS и SET |
GLOBAL |
|
||||
UPDATE |
|
Разрешает использование |
|
|
|
|
|
|
|
|
|
UPDATE |
|
|
|
|
|
||
USAGE |
|
Без привилегий |
|
|
|
|
|
|
|
|
|
|
|||||||
Чтобы лишить пользователя привилегий, предоставленных |
|||||||||
командой GRANT |
, воспользуйтесь значением priv |
_type в GRANT |
OPTION: |
||||||
mysql> REVOKE GRANT OPTION ON ... FROM ...;
Для таблицы можно указать только следующие значения priv_type:
SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, GRANT, INDEX и ALTER.
Для столбца можно указать только следующие значения priv_type
(при использовании оператора column_list): SELECT, INSERT и UPDATE.
Глобальные привилегии можно задать, воспользовавшись синтаксисом ON *.*, а привилегии базы данных — при помощи синтаксиса ON db_name.*. Если указать ON * при открытой текущей базе данных, то привилегии будут заданы для этой базы данных. (Предупреждение: если указать ON * при отсутствии открытой текущей базы данных, это повлияет на глобальные привилегии!)
С тем, чтобы можно было определять права пользователям с конкретных компьютеров, в MySQL обеспечивается возможность указывать имя пользователя (user_name) в форме user@host. Если необходимо указать строку user, в которой содержатся специальные символы (такие как `-') или строку host, в которой содержатся специальные или групповые символы (такие как `%'), можно заключить имя удаленного компьютера или пользователя в кавычки (например,
'test-user'@'test-hostname').
В имени удаленного компьютера также можно указывать групповые символы. Например, user@"%.loc.gov" относится к user всех удаленных компьютеров домена loc.gov, а user@"144.155.166.%" относится к user
всех удаленных компьютеров подсети 144.155.166 класс C. Простая форма user является синонимом для user@"%".
Предупреждение: если при создании нового пользователя не указать оператор IDENTIFIED BY, будет создан пользователь без пароля. Это ненадежно с точки зрения безопасности.
Оператор WITH GRANT OPTION предоставляет пользователю возможность наделять других пользователей любыми привилегиями, которые он сам имеет на указанном уровне привилегий. При предоставлении привилегии необходимо проявлять
осмотрительность, так как два пользователя с разными привилегиями могут объединить свои привилегии!
Нельзя предоставить другому пользователю привилегию, которой нет у вас самого. Привилегия GRANT позволяет предоставлять только те привилегии, которыми вы обладаете.
Учтите, что если пользователю назначена привилегия GRANT на определенном уровне привилегий, то все привилегии, которыми этот пользователь уже обладает (или которые будут ему назначены в будущем!) на этом уровне, также могут назначаться этим пользователем. Предположим, пользователю назначена привилегия INSERT в базе данных. Если потом в базе данных назначить привилегию SELECT и указать WITH GRANT OPTION, пользователь сможет назначать не только привилегию SELECT, но также и INSERT. Если затем в базе данных предоставить пользователю привилегию UPDATE, пользователь сможет после этого назначать INSERT, SELECT и UPDATE.
Не следует назначать привилегии ALTER обычным пользователям. Это дает пользователю возможность разрушить систему привилегий путем переименования таблиц!
При запуске mysqld все таблицы назначения привилегий загружаются в память и с этого момента привилегии вступают в силу.
6.3. Утилита mysqldump
Утилита mysqldump позволяет получить дамп содержимого базы данных или совокупности баз для создания резервной копии или пересылки данных на другой SQL-сервер (не обязательно MySQL-сервер). Дамп будет содержать набор команд SQL для создания и/или заполнения таблиц.
Также mysqldump имеет возможность развертывания баз данных из созданного sql-файла.
6.3.1. Создание дампа
Разберем пример простейшее использования, задампим базу данных
"database" при помощи перенаправления потока в файл "database.sql": mysqldump -uroot -h82.82.82.82 -p database > database.sql
где:
-u или --user=... — имя пользователя;
-h или --host=... — удаленный хост (для локального хоста можно опустить этот параметр);
-p или --password — запросить пароль; database — имя базы данных; database.sql — файл для дампа.
Для того чтобы сделать дамп несколько баз данных, необходимо использовать параметр --databases (или сокращенно -B), пример:
mysqldump -uroot -h82.82.82.82 -p -B database1 database2
database3 > databases.sql
А для того чтобы сделать дамп всех баз данных, необходимо использовать параметр --all-databases (или сокращенно -A), пример:
mysqldump -uroot -h82.82.82.82 -p -A > all-databases.sql
6.3.2. Развертывание дампа
Перенаправляем поток в обратную сторону и развертываем базу данных:
mysql -uroot -h82.82.82.82 -p database < database.sql
Или через mysql-console:
mysql> use database;
mysql> source database.sql
6.4. Утилита mysqlhotcopy
Утилита mysqlhotcopy |
представляет собой Perl-сценарий, |
||
использующий SQL-команды |
LOCK |
TABLES, FLUSH |
TABLES и |
Unix-утилиты cp или scp для быстрого получения резервной копии базы
данных. Пожалуй, это наиболее быстрый способ копирования базы данных в целом или одиночных таблиц, но он может работать только на том же компьютере, где расположены каталоги копируемой базы данных.
mysqlhotcopy db_name [/path/to/new_directory]
mysqlhotcopy |
db_name_1 |
... |
db_name_n |
/path/to/new_directory
mysqlhotcopy db_name./regex/
Если не указывать имена таблиц или использовать параметры -databases или -all-databases, то будет получен дамп базы данных в целом (соответственно — всех баз данных).
6.5. Утилита mysqlcheck
Начиная с версии MySQL 3.23.38 можно применять новый инструмент для проверки и восстановления MyISAM-таблиц. Отличие mysqlcheck от myisamchk состоит в том, что утилита mysqlcheck должна использоваться при работающем сервере mysqld, в то время как myisamchk — при остановленном. Преимущество же заключается в том, что теперь не нужно останавливать сервер для проверки или восстановления таблиц.
Утилита mysqlcheck использует соответствующие команды
MySQL-сервера CHECK, REPAIR, ANALYZE и OPTIMIZE удобным для пользователя образом.
Существует три альтернативных способа запуска mysqlcheck:
shell> mysqlcheck [OPTIONS] database [tables]
shell> mysqlcheck [OPTIONS] --databases DB1 [DB2 DB3...] shell> mysqlcheck [OPTIONS] --all-databases
Команда SHOW CREATE TABLE TableName; позволяет получить sql-код создания таблицы TableName.