| |
GRANT
и REVOKE
GRANT priv_type [(column_list)] [, priv_type [(column_list)] ...] ON {tbl_name|*|*.*|db_name.*} TO user_name [IDENTIFIED BY 'password'] [, user_name [IDENTIFIED BY 'password'] ...] [REQUIRE {SSL|X509} [ISSUER issuer] [SUBJECT subject]] [WITH GRANT OPTION] REVOKE priv_type [(column_list)] [, priv_type [(column_list)] ...] ON {tbl_name|*|*.*|db_name.*} FROM user_name [, user_name ...]
GRANT
реализован в MySQL Version 3.22.11 или позже. Для более
ранних версий MySQL инструкция GRANT
не делает ничего.
Команды GRANT
и REVOKE
позволяют администраторам
системы создавать пользователей, предоставлять и отменять права на
MySQL-пользователей в четырех уровнях привилегий:
mysql.user
.
mysql.db
и
mysql.host
.
mysql.tables_priv
.
mysql.columns_priv
.Если Вы даете привилегии пользователю, который не существует, он будет
автоматически создан. За примерами по работе GRANT
обратитесь к
разделу "4.3.5 Добавление новых
пользователей к MySQL".
Для инструкций GRANT
и REVOKE
аргумент
priv_type
может быть определен как любой из следующего списка:
ALL PRIVILEGES FILE RELOAD ALTER INDEX SELECT CREATE INSERT SHUTDOWN DELETE PROCESS UPDATE DROP REFERENCES USAGE
ALL
представляет собой синоним для
ALL PRIVILEGES
. REFERENCES
пока не реализовано.
USAGE
в настоящее время представляет собой синоним для
``no privileges''. Это может быть применено, когда Вы хотите создать
пользователя, который не имеет никаких привилегий.
Чтобы отменять привилегию предоставленную командой grant,
используйте значение priv_type
параметра GRANT
OPTION
:
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'
).
Вы можете определять групповые символы в hostname. Например,
user@"%.loc.gov"
применяется к user
для любого
компьютера в домене loc.gov
, а user@"144.155.166.%"
будет применено к user
с любой машины в сети
144.155.166
класса C.
Простая форма user
представляет собой синоним для
user@"%"
. ОБРАТИТЕ ВНИМАНИЕ: Если Вы позволяете
анонимным пользователям соединяться с сервером MySQL (что является значением
по умолчанию), Вы должны также добавить всех локальных пользователей как
user@localhost
потому, что иначе анонимная запись в таблице
mysql.user
будет применяться, когда пользователь попробует
зарегистрироваться на сервере MySQL с локальной машины! Анонимные
пользователи определены вставкой записей с User=''
в таблицу
mysql.user
. Вы можете проверять, применяется ли это у Вас,
выполняя такой запрос:
mysql> SELECT Host,User FROM mysql.user WHERE User='';
В настоящий момент GRANT
поддерживает имена хоста, базы
данных, таблицы и столбца длиной только до 60 символов. Имя пользователя
может быть длиной до 16 символов.
Привилегии для таблицы или столбца сформированы из логического ИЛИ (OR)
привилегий в каждом из четырех уровней привилегии. Например, если таблица
mysql.user
определяет, что пользователь имеет глобальную
привилегию select, это не может быть отменено записью на
других уровнях доступа!
Привилегии для столбца могут быть вычислены следующим образом:
global privileges OR (database privileges AND host privileges) OR table privileges OR column privileges
В большинстве случаев Вы предоставляете права пользователю только в одном из уровней привилегии, так что обычно это просто. Детали проверяющей привилегии процедуры подробно рассмотрены в разделе "4.2 Общие проблемы защиты и система привилегий доступа MySQL".
Если Вы предоставляете привилегии для комбинации user/hostname, которая не
существует в таблице mysql.user
, запись будет добавлена и
останется там пока ее не удалят командой DELETE
. Другими
словами, GRANT
может создавать записи в таблице
user
, но REVOKE
не будет удалять их. Вы должны
делать это явно, используя вызов DELETE
.
В MySQL Version 3.22.12 или позже, если новый
пользователь создан, или если Вы имеете глобальные привилегии, пароль
пользователя будет установлен в пароль, определенный предложением
IDENTIFIED BY
, если оно задано. Если пользователь уже имел
пароль, он будет заменен новым.
ПРЕДУПРЕЖДЕНИЕ: Если Вы создаете нового пользователя, но
не определяете предложение IDENTIFIED BY
, пользователь не имеет
никакого пароля. Это опасно.
Пароли также могут быть установлены командой SET PASSWORD
.
Подробности в разделе "5.5.6 Синтаксис
SET
".
Если Вы предоставляете привилегии для базы данных, запись в таблице
mysql.db
будет создана, если необходимо. Когда все привилегии
для базы данных будут удалены с помощью REVOKE
, эта запись тоже
будет удалена автоматически.
Если пользователь не имеет привилегий на таблице, данная таблица не
отображается вообще, когда пользователь запрашивает список таблиц (например,
инструкцией SHOW TABLES
).
Предложение WITH GRANT OPTION
дает пользователю способность
передать другим пользователям любые привилегии, которые этот пользователь
имеет в определенном уровне доступа. Вы должны быть внимательным к тому, кому
Вы даете привилегию grant, поскольку два пользователя с
различными привилегиями могут быть способны соединить свои привилегии!
Вы не можете предоставлять другому пользователю привилегию, которую Вы не имеете сами. Привилегия grant позволяет Вам передавать только те привилегии, которыми Вы реально обладаете.
Знайте, что, когда Вы предоставляете пользователю привилегию
grant в специфическом уровне привилегии, любые привилегии,
которые пользователь уже имеет (или получит в будущем!) в этом уровне также
могут передаваться этим пользователем кому угодно. Предположите, что Вы
предоставляете пользователю привилегию insert на базе
данных. Если Вы затем предоставляете привилегию select на
базе данных и определяете WITH GRANT OPTION
, пользователь сможет
передавать не только привилегию select, но и
insert! Если Вы затем предоставляете ему еще и привилегию
update на базе данных, этот пользователь сможет передавать
insert, select и update.
Вы не должны предоставлять привилегию alter нормальному пользователю. Если Вы это сделаете, пользователь может попробовать разрушить систему привилегии, переименовывая таблицы!
Обратите внимание, что, если Вы используете привилегии столбца или таблицы даже для одного пользователя, сервер исследует привилегии столбца и таблицы для всех пользователей, и это замедлит немного MySQL.
Когда mysqld
запускается, все привилегии читаются в память.
Привилегии, связанные с базами данных, таблицами и столбцами начинают
действовать сразу же, а связанные с пользователями сработают, когда
пользователь соединится с сервером в следующий раз. Модификации к таблицам
предоставления, которые Вы выполняете, используя GRANT
или
REVOKE
воспринимаются сервером немедленно. Если Вы изменяете
таблицы предоставления вручную (используя INSERT
,
UPDATE
и т.д.), Вы должны выполнить инструкцию
FLUSH PRIVILEGES
или запустить команду
mysqladmin flush-privileges
, чтобы сервер перезагрузил все
таблицы предоставления привилегий.
Самые большие различия между ANSI SQL и MySQL
версиями оператора GRANT
:
TRIGGER
, EXECUTE
и
UNDER
из ANSI SQL.
INSERT
только на части
столбцов в таблице, Вы можете выполнять инструкции INSERT
относительно таблицы: столбцы, для которых Вы не имеете привилегию
INSERT
будут установлены к их значениям по умолчанию. ANSI SQL
требует, чтобы Вы имели привилегию INSERT
на всех столбцах.
REVOKE
или правкой таблиц предоставления привилегий MySQL.Имеются несколько различий между использованием имен и паролей MySQL и Unix или Windows:
-u
или --user
. Это означает, что Вы не можете
делать базу данных безопасной всегда, если все имена пользователей MySQL не
имеют паролей. Любой может пытаться соединиться с сервером, используя любое
имя, и это получиться, если использовано имя, которое не имеет пароля.
Пользователи MySQL и их привилегии обычно создаются командой
GRANT
. Подробности в разделе "4.3.1
Синтаксис GRANT
и REVOKE
".
Когда Вы входите в систему на сервере MySQL с помощью клиента командной
строки, Вы должны определить пароль с помощью опции
--password=your-password
. Подробности изложены в разделе
"4.2.7 Связь с сервером MySQL":
mysql --user=monty --password=guess database_name
Если Вы хотите, чтобы Вас запросили относительно пароля, Вы должны
использовать аргумент --password
:
mysql --user=monty --password database_name
Или в кратком виде:
mysql -u monty -p database_name
Обратите внимание, что в последнем примере пароль НЕ database_name.
Если Вы хотите использовать опцию -p
, чтобы задать пароль,
сделайте это так:
mysql -u monty -pguess database_name
На некоторых системах библиотечный вызов, который MySQL использует для запроса пароля, автоматически урежет пароль до длины в 8 символов. Внутренне MySQL не имеет ограничений на длину пароля.
При запуске mysqld
все содержание таблиц предоставления
привилегий читается в память и становится действующим.
Модификации к таблицам предоставления, которые Вы выполняете используя
GRANT
, REVOKE
или SET PASSWORD
вступают в силу немедленно.
Если Вы изменяете таблицы предоставления вручную (используя операторы
INSERT
, UPDATE
), Вы должны выполнить инструкцию
FLUSH PRIVILEGES
или запустить
mysqladmin flush-privileges
, или mysqladmin reload
,
чтобы сообщить, что сервер должен перезагрузил таблицы предоставления. Иначе
Ваши изменения не будут иметь никакого эффекта, пока Вы не перезапустите
сервер. Если Вы изменяете таблицы предоставления вручную, но забываете
перезагружать привилегии, Вы будете часто задаваться вопросом, почему Ваши
изменения не делают вообще ничего!
Когда сервер обращает внимания, что таблицы предоставления были изменены, на существующие подключения пользователей это воздействуют следующим образом:
USE db_name
.Изменения глобальных привилегий и пароля воздействуют, когда пользователь соединится в следующий раз.
После установки MySQL Вы устанавливаете начальные привилегии доступа
вызовом скрипта scripts/mysql_install_db
. Подробности в разделе
"2.3.1 Обзор быстрой установки".
Скрипт mysql_install_db
запускает сервер mysqld
и
устанавливает следующие привилегии:
root
создан как суперпользователь,
который может делать что угодно. Подключения должны быть обязательно с
локального компьютера. ОБРАТИТЕ ВНИМАНИЕ: начальный пароль
для root
пуст, так что любой может соединяться как
root
без пароля и предоставлять все привилегии.
test
, или их имя начинается с
test_
. Подключения должны быть с локального компьютера. Это
означает, что любой локальный пользователь может соединяться без пароля и
обрабатываться как анонимный пользователь.
mysqladmin shutdown
или mysqladmin processlist
.
ОБРАТИТЕ ВНИМАНИЕ: заданные по умолчанию привилегии иные для Windows. Подробности в разделе " 2.6.2.3 Запуск MySQL под Windows".
Первое, что следует сделать, это определить пароль для MySQL-пользователя
root
. Вы можете сделать это следующим образом (обратите
внимание, что Вы определяете пароль, используя функцию
PASSWORD()
):
shell> mysql -u root mysql mysql> UPDATE user SET Password=PASSWORD('new_password') WHERE user='root'; mysql> FLUSH PRIVILEGES;
Вы можете, в MySQL версии 3.22 и выше, использовать инструкцию
SET PASSWORD
:
shell> mysql -u root mysql mysql> SET PASSWORD FOR root=PASSWORD('new_password');
Другой способ устанавливать пароль: применить команду
mysqladmin
:
shell> mysqladmin -u root password new_password
Только пользователи с доступом на чтение/запись к базе данных
mysql
могут изменять пароль для других пользователи. Все
нормальные пользователи (не анонимные) могут менять только их собственный
пароль с помощью вышеупомянутых команд или вызовом
SET PASSWORD=PASSWORD('new password')
.
Обратите внимание, что, если Вы модифицируете пароль непосредственно в
таблице user
, используя первый метод, Вы должны сообщить, чтобы
сервер заново прочитал таблицы предоставления привилегий (команда
FLUSH PRIVILEGES
), иначе изменение будет не замечено.
Как только пароль root
был установлен, Вы должны использовать
его при соединении с сервером.
Изучение скрипта scripts/mysql_install_db
весьма пригодится
при сборе информации по созданию и настройке других пользователей.
Если Вы хотите, чтобы начальные привилегии были иными, чем те, которые
только что я описал, Вы можете изменять скрипт mysql_install_db
прежде, чем Вы его выполните.
Чтобы освежить таблицы
предоставления привилегий полностью (пересоздать их заново), удалите все
файлы `.frm', `.MYI' и `.MYD' в каталоге,
содержащем базу данных mysql
. Это каталог с именем
`mysql' в каталоге баз данных, который будет перечислен, когда
Вы выполняете mysqld --help
. Затем выполните скрипт
mysql_install_db
, возможно, после его редактирования, чтобы
иметь те привилегии, которые Вы хотите установить.
ОБРАТИТЕ ВНИМАНИЕ: Для MySQL версий старше, чем 3.22.10,
Вы не должны удалить файлы `.frm'. Если Вы случайно сделаете это, Вы
должны скопировать их обратно из Вашего дистрибутива MySQL перед выполнением
mysql_install_db
.
Вы можете добавлять пользователей двумя различными путями: используя
инструкции GRANT
или непосредственно управляя таблицами MySQL.
Имеются также много программ, например, phpmyadmin
, которые
могут использоваться, чтобы создать и администрировать пользователей.
Примеры ниже показывают, как использовать клиент mysql
, чтобы
установить новых пользователей. Эти примеры принимают, что привилегии
установлены согласно значениям по умолчанию, описанным в предыдущем разделе.
Это означает, что, чтобы делать изменения, Вы должны быть зарегестрированы на
той же самой машине, где работает сервер mysqld
, Вы должны
соединиться как MySQL-пользователь root
, и он должен иметь
привилегию insert для базы данных mysql
, а
также административную привилегию reload. Также, если Вы
изменили пароль для root
, Вы должны определить его в командах.
Вы можете добавлять новых пользователей, выдавая инструкции
GRANT
:
shell> mysql --user=root mysql mysql> GRANT ALL PRIVILEGES ON *.* TO monty@localhost IDENTIFIED BY 'some_pass' WITH GRANT OPTION; mysql> GRANT ALL PRIVILEGES ON *.* TO monty@"%" IDENTIFIED BY 'some_pass' WITH GRANT OPTION; mysql> GRANT RELOAD,PROCESS ON *.* TO admin@localhost; mysql> GRANT USAGE ON *.* TO dummy@localhost;
Эти инструкции GRANT
устанавливают трех новых пользователей:
monty
'some_pass'
. Обратите внимание, что
Вы должны выдать инструкции GRANT
для
monty@localhost
и monty@"%"
. Если мы не добавляем
запись с localhost
, анонимный пользователь для
localhost
, который создан mysql_install_db
, будет
иметь приоритет, когда мы соединяемся с локального компьютера потому, что это
имеет более специфическое поле Host
, и таким образом окажется
первым в отсортированной таблице user
.
admin
localhost
без пароля, и ему
предоставляют административные привилегии reload и
process. Это позволяет пользователю выполнять команды
mysqladmin reload
, mysqladmin refresh
и
mysqladmin flush-*
, также как mysqladmin
processlist
. Никакие связанные с базой данных привилегии ему не
предоставляются. Их можно предоставить позже, выдавая
дополнительные инструкции GRANT
.
dummy
'N'
.
Привилегия USAGE
позволяет Вам создавать пользователя без
привилегий. Принимается, что Вы предоставите ему специфические для базы
данных привилегии позже.Вы можете также добавлять то же
самое, обращаясь к информации непосредственно, выдавая инструкции
INSERT
и затем сообщая серверу перезагрузить таблицы:
shell> mysql --user=root mysql mysql> INSERT INTO user VALUES('localhost','monty',PASSWORD('some_pass'), 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y'); mysql> INSERT INTO user VALUES('%','monty',PASSWORD('some_pass'), 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y'); mysql> INSERT INTO user SET Host='localhost',User='admin', Reload_priv='Y', Process_priv='Y'; mysql> INSERT INTO user (Host,User,Password) VALUES('localhost','dummy',''); mysql> FLUSH PRIVILEGES;
В зависимости от Вашей версии MySQL, Вам, вероятно, придется использовать
выше различное число значений 'Y'
(версии до версии 3.22.11
имели меньшее количество столбцов привилегий). Для пользователя
admin
применен более удобный синтаксис INSERT
,
который является доступным, начиная с версии 3.22.11 и выше.
Обратите внимание, что, чтобы установить суперпользователя, Вы должны
только создать запись таблицы user
с набором полей привилегий,
выставленных в 'Y'
. Никаких записей в таблицах db
или host
не требуется.
Столбцы привилегии в таблице user
не были установлены явно в
последней инструкции INSERT
(для пользователя
dummy
), так что им будет установлено значение по умолчанию
'N'
.
Следующий пример добавляет пользователя custom
, который может
соединяться с компьютеров localhost
, server.domain
и whitehouse.gov
. Он хочет обращаться к базе данных
bankaccount
только с машины localhost
, базе данных
expenses
только с машины whitehouse.gov
, а к базе
данных customer
со всех трех компьютеров. Он хочет использовать
пароль stupid
для всех систем.
Чтобы установить привилегии этого пользователя, используя инструкцию
GRANT
, выполните эти команды:
shell> mysql --user=root mysql mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON bankaccount.* TO custom@localhost IDENTIFIED BY 'stupid'; mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON expenses.* TO custom@whitehouse.gov IDENTIFIED BY 'stupid'; mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON customer.* TO custom@'%' IDENTIFIED BY 'stupid';
Чтобы установить привилегии пользователя, изменяя таблицы предоставления
привилегий непосредственно, выполните эти команды (обратите внимание на вызов
FLUSH PRIVILEGES
в конце):
shell> mysql --user=root mysql mysql> INSERT INTO user (Host,User,Password) VALUES('localhost','custom',PASSWORD('stupid')); mysql> INSERT INTO user (Host,User,Password) VALUES('server.domain','custom',PASSWORD('stupid')); mysql> INSERT INTO user (Host,User,Password) VALUES('whitehouse.gov','custom',PASSWORD('stupid')); mysql> INSERT INTO db (Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv, Create_priv,Drop_priv) VALUES ('localhost','bankaccount','custom','Y','Y','Y','Y','Y','Y'); mysql> INSERT INTO db (Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv, Create_priv,Drop_priv) VALUES ('whitehouse.gov','expenses','custom','Y','Y','Y','Y','Y','Y'); mysql> INSERT INTO db (Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv, Create_priv,Drop_priv) VALUES('%','customer','custom','Y','Y','Y','Y','Y','Y'); mysql> FLUSH PRIVILEGES;
Первые три инструкции INSERT
добавляют записи таблицы
user
, которые позволяют пользователю custom
соединяться с трех различных компьютеров с данным паролем, но не дают ему
никаких прав доступа (все привилегии установлены в значение по умолчанию
'N'
). Следующие три инструкции INSERT
добавляют
записи таблицы db
, которые предоставляют custom
привилегии для баз данных bankaccount
, expenses
и
customer
, но только когда он обращается с соответствующих
компьютеров. Как обычно, когда таблицы предоставления привилегий изменяются
непосредственно, сервер должен перезагрузить их.
Если Вы хотите давать специфический доступ пользователю с любой машины в
данном домене, Вы можете выдать инструкцию GRANT
таким образом:
mysql> GRANT ... ON *.* TO myusername@"%.mydomainname.com" IDENTIFIED BY 'mypassword';
Чтобы сделать ту же самую работу, изменяя таблицы предоставления привилегий непосредственно, сделайте так:
mysql> INSERT INTO user VALUES ('%.mydomainname.com', 'myusername', PASSWORD('mypassword'),...); mysql> FLUSH PRIVILEGES;
Вы можете также использовать xmysqladmin
,
mysql_webadmin
и xmysql
, чтобы вставлять, изменять
и модифицировать значения в таблицах предоставления. Вы можете найти эти
утилиты в каталоге
http://www.mysql.com/Downloads/Contrib Web-сайта MySQL.
В большинстве случаев Вы должны использовать GRANT
, чтобы
установить Ваших пользователей и их пароли, так что следующее касается только
пользоваателей профессионального уровня.
Примеры в предшествующих разделах иллюстрируют важный принцип: когда Вы
сохраняете непустой пароль, используя инструкции INSERT
или
UPDATE
, Вы должны использовать функцию PASSWORD()
для его шифрования. Это потому, что таблица user
хранит пароли в
зашифрованной форме, а не как открытый текст. Если Вы забываете этот факт,
Вы, вероятно, будет пытаться устанавливать пароли подобно этому примеру:
shell> mysql -u root mysql mysql> INSERT INTO user (Host,User,Password) VALUES('%','jeffrey','biscuit'); mysql> FLUSH PRIVILEGES;
Результат: открытый текст 'biscuit'
будет сохранен как пароль
в таблице user
. Когда пользователь jeffrey
попытается подключиться к серверу, клиент mysql
шифрует его
пароль с помощью вызова функции PASSWORD()
, генерирует вектор
аутентификации, основанный на зашифрованном пароле и
произвольном числе, полученном с сервера, и посылает результат сервера. Он
использует значение password
в таблице user
(а там не зашифрованное значение biscuit
!),
чтобы выполнить те же самые вычисления, и сравнивает результаты. Разумеется,
они отличаются, и сервер отклоняет подключение (а Вы долго пытаетесь понять,
почему ничего не работает):
shell> mysql -u jeffrey -pbiscuit test Access denied
Пароли должны быть зашифрованы, когда они вставлены в таблицу
user
, так что инструкция INSERT
должна быть
определена подобно этому:
mysql> INSERT INTO user (Host,User,Password) VALUES('%','jeffrey',PASSWORD('biscuit'));
Вы должны также использовать функцию PASSWORD()
, когда Вы
применяете инструкции SET PASSWORD
:
mysql> SET PASSWORD FOR jeffrey@"%" = PASSWORD('biscuit');
Если Вы устанавливаете пароли, используя инструкции
GRANT ... IDENTIFIED BY
или вызов команды mysqladmin
password
, функция PASSWORD()
уже не нужна: там она
вызывается автоматически, так что Вы должны определить пароль
biscuit
примерно так (вот что мешало не путать людей, а сделать
единую процедуру настройки?!):
mysql> GRANT USAGE ON *.* TO jeffrey@"%" IDENTIFIED BY 'biscuit';
или примерно так:
shell> mysqladmin -u jeffrey password biscuit
ОБРАТИТЕ ВНИМАНИЕ: PASSWORD()
не выполняет
шифрование пароля так, как это делается в Unix.
Нецелесообразно определять Ваш пароль так, что его могут увидеть другие пользователи. Методы, которые Вы можете использовать, чтобы определить Ваш пароль, когда Вы выполняете программы-клиенты, перечислены ниже, наряду с оценкой рисков каждого метода:
mysql.user
. Знание зашифрованного пароля для пользователя делает
возможным вход в систему под именем этого пользователя.
-pyour_pass
или
--password=your_pass
в командной строке. Это удобно, но опасно
потому, что Ваш пароль становится видимым программам состояния системы
(например, ps
), которые могут вызываться другими пользователями,
чтобы отобразить командные строки. Клиенты MySQL обнуляют командные строки,
чтобы их не было видно в процессе выполнения, но имеется краткий интервал, в
течение которого значение является видимым.
-p
или --password
(без
определенного значения your_pass
). В этом случае
программа-клиент запросит пароль с терминала:
shell> mysql -u user_name -p Enter password: ********Символы * представляют Ваш пароль. Это более безопасно, чем определить пароль прямо в командной строке потому, что это не видно другим пользователям. Однако, этот метод ввода пароля подходит только для программ, которые Вы выполняете в интерактивном режиме. Если Вы хотите вызывать клиента из скрипта, который выполняется не в интерактивном режиме, не имеется никакой возможности ввести пароль с терминала. На некоторых системах Вы можете даже обнаружить, что первая строка Вашего скрипта читается и неправильно интерпретируется как Ваш пароль!
[client]
файла
.my.cnf в Вашем основном каталоге:
[client] password=your_passЕсли Вы сохраняете Ваш пароль в файле .my.cnf, не должен быть доступен на чтение (тем более на запись) никому, кроме Вас. Удостоверьтесь, что режим доступа файла
400
или 600
.
MYSQL_PWD
, но этот метод должен рассматриваться как чрезвычайно
опасный и не должен использоваться. Некоторые версии ps
включают
опцию, чтобы отобразить среду управления процессами. Ваш пароль будет видим
всем желающим использовать такую команду. Даже на системах без такой версии
ps
неблагоразумно считать, что не имеется никакого другого
метода наблюдать среды процесса.В целом, самые безопасные методы состоят в том, чтобы иметь запрос программы-клиента для пароля или определять пароль в правильно защищенном файле личных настроек .my.cnf.
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |