Вт, 19.06.2018, 21:39:06
Приветствую Вас Гость
Последние сообщения · Участники · Правила форума · Поиск · RSS
  • Страница 1 из 1
  • 1
Форум » Интернет » Вебмастеру » Ошибка доступа #196763: что это означает?
Ошибка доступа #196763: что это означает?
ingvarr
(65535) Вне сайта
Дата: 06.08.2012, 00:32:43 | Сообщение № 1
admin
Репутация: 731
Награды: 116
Причины возникновения ошибок Access denied (‘в доступе отказано’)

Если при попытке подсоединения к серверу MYSQL вы сталкиваетесь с ошибкой Access denied, то воспользуйтесь приведенным ниже списком. В нем перечислены меры, которые возможно взять для решения этой трудности:

Запускали ли вы после инсталляции MYSQL скрипт mysql_install_db для установки начального содержимого таблиц привилегий? Если нет, сделайте это. Обратитесь к разделу SeeРаздел 4.3.4, «Задание изначальных привилегий MYSQL». Проверьте первоначальные привилегии при помощи следующей команды:

shell> mysql -u root test
Подсоединение должно произойти без сбоя. Нужно тоже убедиться, что в каталоге базы данных MYSQL есть файл user.MYD. Как правило он располагается в директорииPATH/var/mysql/user.MYD, где PATH — путь к корневому каталогу инсталляции MYSQL.

После новой инсталляции нужно подсоединиться к серверу и сделать пользователей, и поставить для них права доступа:

shell> mysql -u root mysql
Сервер разрешит подсоединение, т.к. пользователь MYSQL с именем пользователя root исходно не имеет пароля. Однако в этом заключается к тому же и риск нарушения безопасности системы, потому при создании прочих пользователей MYSQL, вам, кроме прочего, нужно задать пароль для пользователя root. Если при попытке подсоединения от имени пользователя root вы получите последующую ошибку:

Access denied for user: ‘@unknown’ to database mysql
это значит, что в таблице user отсутствует запись со значением ‘root’ в столбце User и mysqld не может определить имя хоста для вашего клиента. В этом случае требуется заново запустить сервер с опцией —skip-grant-tables и отредактировать файл /etc/hosts или windowshosts, добавив в него запись для вашего хоста.

Если вы столкнетесь с подобной ошибкой, как:

shell> mysqladmin -u root -pxxxx verAccess denied for user: ‘root@localhost’ (Using password: YES)
это значит, что применяется неверный пароль. Обратитесь к разделу See Раздел 4.3.7, «Задание паролей». Если вы позабыли пароль для пользователя root, то перезапуститеmysqld с опцией —skip-grant-tables и измените пароль. Обратитесь к разделу See Раздел A.4.2, «Как переустановить забытый пароль пользователя root». Такая ошибка может появляться даже в том случае, если вы не задавали пароля вообще — значит, что в каком-то файле my.ini есть неверный пароль. Обратитесь к разделу See Раздел 4.1.2, «Файлы параметров my.cnf». Отменить применение файлов опций возможно при помощи опции the —no-defaults, как показано ниже:

shell> mysqladmin —no-defaults -u root ver
Запускали ли вы скрипт mysql_fix_privilege_tables при обновлении имеющейся инсталляции MYSQL, если установленная версия — более ранняя, чем 3.22.11, а обновляется она до 3.22.11 или более поздней? Если нет, сделайте это. Начиная с MYSQL 3.22.11, когда оператор GRANT стал функциональным, структура таблиц привилегий переменилась.

Если в ходе сеанса ваши привилегии изменились, вероятно, то, их изменил суперпользователь. Перезагрузка таблиц привилегий отражается не только лишь на новых подсоединениях клиентов, однако к тому же на уже имеющихся, как это показано в разделе See перемены в привилегиях вступают в силу»>Раздел 4.3.3, «Когда перемены в привилегиях вступают в силу».

Если не удается добиться, чтоб пароль работал, не забывайте, что функция PASSWORD() обязана применяться, если вы задаете пароль при помощи операторов INSERT, UPDATE илиSET PASSWORD. Если же вы задаете пароль при помощи оператора GRANT … INDENTIFIED BY или команды mysqladmin password, функция PASSWORD() не нужна. Обратитесь к разделу See Раздел 4.3.7, «Задание паролей».

localhost — это синоним имени вашего локального хоста, и, если хост явно не задан, к тому же устанавливаемое изначально имя хоста, к которому клиенты пытаются подключиться. Хотя подсоединения к localhost не действуют, если в вашей служебной системе применяются MIT-потоки и MYSQL старше версии 3.23.27 (подсоединения к localhostосуществляются с использованием сокетов Unix, а они не поддерживались тогда технологией MIT-потоков). Чтоб в подобных системах эта сложность не возникала, нужно очевидным образом задать имя серверного хоста при помощи опции —host. Т.о. будет установлено подсоединение к серверу mysqld по протоколу TCP/IP. В этом случае в записях таблицы user, хранящейся на серверном хосте, должно быть указано настоящее имя хоста. (Это справедливо даже для тех случаев, когда клиентская утилита и сервер запускаются на одном хосте).

Если при попытке подсоединения к базе данных при помощи команды mysql -u user_name db_name появляется ошибка Access denied, причина этого, вероятно, кроется в таблице user. Чтоб проверить это, выполните команду mysql -u root mysql и введите следующий SQL-оператор:

mysql> SELECT * FROM user;
В итоге будет выведена запись со столбцами Host и User, соответствующими имени вашего компьютера и вашему имени пользователя MYSQL.

Сообщение об ошибке Access denied информирует вас о том, под каким именем вы пытаетесь войти в систему, об имени хоста, с которого вы пытаетесь поставить соединение, и о том, применяли ли вы при этом пароль или нет. Чаще всего, в таблице user будет 1 запись, точно соответствующая имени хоста и имени пользователя, указанным в сообщении об ошибке. К примеру, если вы получите сообщение об ошибке, в коем сказано Using password: NO, это значит, что вы пробовали войти в систему, не указав пароль.

Если при попытке подсоединения не с того компьютера, на коем работает сервер MYSQL, а с иного, вы получите сообщение об ошибке, приведенное ниже, то в таблице userотсутствует строка с подобным именем хоста:

Host … is not allowed to связь to this MYSQL server
Чтоб поправить эту ошибку, при помощи программы командной строки mysql (на серверном хосте!) добавьте строку в таблицу user, db или host с комбинацией имени пользователя/хоста, соответствующей той, которую вы используете при попытке подсоединения. После выполните команду mysqladmin flush-privileges. Если вы используете MYSQL версии, отличной от Version 3.22, и вам неизвестно имя хоста или IP-адрес компьютера, с которого вы подсоединяетесь, введите в таблицу user запись со значением ‘%’ в поле Host и перезапустите mysqld на серверной машине с опцией —log. Когда соединение с клиентской машины будет установлено, вы найдете в журнале регистрации MYSQL информацию об имени хоста, с которого вы подсоединились. (После этого нужно заменить в записи таблицы user значение ‘%’ настоящим именем хоста, из журнала регистрации. По-другому ваша система останется незащищенной.)

В Линукс причиной подобной ошибки может оказаться то, что бинарная версия MYSQL скомпилирована с версией glibc, отличной от применяемой вами. В этом случае необходимо будет или обновить ОС/glibc, применяемые вами, или загрузить исходный код MYSQL и скомпилировать сервер своими силами. Обычно, исходный RPM компилируется и инсталлируется элементарно, так что это не будет составлять серьезной трудности.

Если будет выдано сообщение об ошибке, в коем имя хоста не указано вообще или указан IP-адрес, впрочем вы при попытке подсоединения указывали имя хоста:
shell> mysqladmin -u root -pxxxx -h some-hostname verAccess denied for user: ‘root@’ (Using password: YES)
то это значит, что ошибка появляется при попытке MYSQL сопоставить IP-адрес с именем хоста. В этом случае вы можете выполнить команду mysqladmin flush-hosts, чтоб сбросить внутреннюю кэш-память DNS. Обратитесь к разделу See Раздел 5.5.5, «Как MYSQL использует DNS». Вот отдельные способы решения этой трудности:

Попробуйте узнать, что не так с вашим сервером DNS, и устраните неисправность.

Задайте IP-адреса вместо имен хостов таблицах привилегий MYSQL.

Запустите mysqld с опцией —skip-name-resolve.

Запустите mysqld с опцией —skip-host-cache.

Подключитесь к localhost если ваш сервер и клиент работают на одном и том же компьютере.

Поместите имена клиентских машин в каталог /etc/hosts.

Если команда mysql -u root test работает успешно, а команда mysql -h your_hostname -u root test приводит к ошибке Access denied, вероятно, то, в таблице userимя вашего хоста указано неверно. 1 из распространенных проблем тут заключается в том, что в поле Host записи, хранящейся в таблице user, задается лишь имя хоста, в то время как процедуры разрешения имен, применяемые вашей системой, возвращают целиком некоторое доменное имя (или наоборот). К примеру, если в таблице user есть запись со значением ‘tcx’ в поле host, а DNS при этом передает MYSQL, что имя хоста — ‘tcx.subnet.se’, эта запись действовать не будет. Попробуйте прибавить в таблицу user запись, указав в колонке Host IP-адрес хоста. (В качестве альтернативы возможно прибавить в таблицу user запись со значением в поле Host, содержащим шаблонный знак, к примеру ‘tcx.%’. Однако применять имена хостов, оканчивающиеся на ‘%’ — небезопасно и делать это не рекомендуется!)

Если команда mysql -u user_name test работает успешно, а команда mysql -u user_name other_db_name — нет, то в таблице db нет записи, соответствующейother_db_name.

Если команда mysql -u user_name db_name выполняется успешно на том компьютере, где установлен сервер, а mysql -u host_name -u user_name db_name не работает при выполнении ее на иной клиентской машине, то в таблицах user или db эта клиентская машина не зарегистрирована.

Если не удается узнать причину ошибки Access denied, удалите из таблицы user все записи, в которых значение в поле Host включает шаблонные знаки (записи, содержащие знаки »%» или »_»). Весьма распространенной ошибкой является следующая: пользователь вставляет новую запись со значением ‘%’ в поле Host и со значением’some user’ — в поле User, полагая, что после этого для подсоединения с той же самой машины он сумеет применять localhost. Такой расчет неверен, и причина тут в том, что устанавливаемые изначально привилегии включают запись со значением ‘localhost’ в поле Host и пустым полем User. И так как в этой записи значение ‘localhost’более конкретно, чем ‘%’, то именно она при подсоединении с localhost предшествует новой записи и, соответственно, будет выбрана и сработает! Правильным в этом случае будет вставить вторую запись со значением ‘localhost’ в поле Host и значением ‘some_user’ — в поле User или удалить запись со значением ‘localhost’ в поле Host и пустым полем User.

Если вы получите последующую ошибку, то эта сложность, вероятно, связана с таблицей db или таблицей host:

Access to database denied
Если в записи, выбранной из таблицы db, столбец Host — пустой, удостоверьтесь, что в таблице host есть по крайней мере 1 соответствующая запись, указывающая, к каким хостам относится запись из таблицы db. Если ошибка появляется при выполнении SQL-команды SELECT … INTO OUTFILE или LOAD DATA INFILE, то в вашей записи из таблицыuser, возможно, отсутствует разрешение на предоставление привилегии FILE.

Не забывайте, что клиентские утилиты будут применять характеристики подсоединения, указанные файлах конфигурации или переменных окружения. Обратитесь к разделу SeeПриложение E, Переменные окружения. Если есть подозрение, что клиент отсылает неверные устанавливаемые изначально характеристики подсоединения, в случае, когда вы не задаете их в командной строке, проверьте ваше окружение и файл my.cnf в собственной домашней директории. Можете тоже проверить конфигурационные файлы MYSQL относящиеся ко все системе, впрочем характеристики клиентского подсоединения едва ли указаны именно тут. Обратитесь к разделу See Раздел 4.1.2, «Файлы параметров my.cnf». Если ошибка Access denied появляется при выполнении вашей клиентской утилиты без любых опций, убедитесь, что ни в одном из ваших файлов опций не указан старый пароль! Обратитесь к разделу See Раздел 4.1.2, «Файлы параметров my.cnf».

Если вы вносите перемены в таблицы привилегий именно (при помощи операторов INSERT или UPDATE), а ваши перемены, похоже, игнорируются, то нужно выдать оператор FLUSH PRIVILEGES или выполнить команду mysqladmin flush-privileges — для того, чтоб заставить сервер перечитать таблицы привилегий. Иначе ваши перемены вступят в силу только при последующем перезапуске сервера. Не забывайте, что затем, как вы зададите пароль от имени пользователя, вам необходимо будет указывать его лишь после сброса привилегий, т.к. серверу еще не будет известно о том, что вы изменили пароль!

При возникновении трудности с доступом при использовании Perl-, PHP-, Python- или ODBC-программ, попробуйте поставить соединение с сервером с помощью команды mysql -u user_name db_name или команды mysql -u user_name -pyour_pass db_name. Если ваш клиент mysql обеспечивает подсоединение, то сложность связана не с привилегиями доступа, а с вашей программой. (Заметим, что м/у -p и паролем пробела нет; для квесты пароля возможно тоже применять синтаксическую структуру —password=your_pass. Если вы используете лишь саму опцию -p, MYSQL запросит у вас пароль)

При тестировании запускайте демон mysqld с опцией —skip-grant-tables. Тогда вы сможете изменять таблицы привилегий MYSQL и при помощи скрипта mysqlaccessпроверять, произвели ли сделанные вами перемены желаемый эффект. Если результаты вас устраивают, выполните команду mysqladmin flush-privileges, чтоб приказать серверу mysqld приступить к применению новых таблиц привилегий. Внимание: перезагрузка таблиц привилегий отменяет опцию —skip-grant-tables. Это дает возможность заставить сервер приступить к применению новых таблиц привилегий без завершения его работы и перезагрузки.

Если ничего не помогает, запустите демон mysqld daemon с опцией отладки (к примеру —debug=d,general,query). В итоге будет выведена информация о неудачных подсоединениях, с указанием хоста и пользователя, и обо всех обработанных командах. Обратитесь к разделу See Раздел D.1.2, «Создание трассировочных файлов».

Если у вас есть какая-или сложность с таблицами привилегий MYSQL и вы полагаете, что требуется передать о ней в перечень рассылки, необходимо непременно приложить к собственному отчету распечатку таблиц привилегий MYSQL. Это возможно сделать при помощи команды mysqldump mysql. Отчет о проблеме, как и в иных ситуациях, отправляется при помощи скрипта mysqlbug. Обратитесь к разделу See отсылать отчеты об ошибках или проблемах»>Раздел 1.8.1.3, «Как отсылать отчеты об ошибках или проблемах». В некоторых ситуациях для исполнения скрипта mysqldump вероятно, понадобится заново запустить mysqld с опцией —skip-grant-tables.
Ответить



redblack
(7) Вне сайта
Дата: 21.02.2017, 00:38:41 | Сообщение № 2
Рядовой
Группа: Житель
Репутация: 0
Награды: 0
Замечания: 0%
Не решается.
Ответить
Форум » Интернет » Вебмастеру » Ошибка доступа #196763: что это означает?
  • Страница 1 из 1
  • 1
Поиск:



             Рейтинг@Mail.ru   HotLog