Ошибка: выберите команду, запрещенную пользователю '<идентификатор пользователя>' @ '<IP-адрес>' для таблицы '<имя-таблицы>'
На моем сайте я использую базу данных MySQL. Я использую веб-сервис, где я делаю все манипуляции с базой данных.
Теперь в одном из методов этого веб-сервиса я получаю следующую ошибку.
команда выбора, запрещенная пользователю '' @ '' для таблицы ''
Что может быть не так?
Ниже приведен код, где я получаю эту ошибку. Я попытался отладки и обнаружил, что он не работает на линии
MySqlDataReader result1 = command1.ExecuteReader();
Вот мой код:
String addSQL = "Select Max(`TradeID`) from `jsontest`.`tbl_Positions";
MySqlConnection objMyCon = new MySqlConnection(strProvider);
objMyCon.Open();
MySqlCommand command = objMyCon.CreateCommand();
command.CommandText = addSQL;
MySqlDataReader result = command.ExecuteReader();
//int j = command.ExecuteNonQuery();
while (result.Read())
{
MaxTradeID = Convert.ToInt32(result[0]);
}
objMyCon.Close();
for (i = 1; i <= MaxTradeID; i++)
{
String newSQL = "Select `Strike`,`LongShort`,`Current`,`TPLevel`,`SLLevel` from `json`.`tbl_Position` where `TradeID` = '" + i + "'";
MySqlConnection objMyCon1 = new MySqlConnection(strProvider);
objMyCon1.Open();
MySqlCommand command1 = objMyCon1.CreateCommand();
command1.CommandText = newSQL;
MySqlDataReader result1 = command1.ExecuteReader();
objMyCon2.Close();
17 ответов
Пользователь базы данных не имеет права делать запрос выбора.
вы можете предоставить разрешение пользователю, если у вас есть root-доступ к mysql
http://dev.mysql.com/doc/refman/5.1/en/grant.html
Ваш второй запрос находится в другой базе данных на другой таблице.
String newSQL = "Select `Strike`,`LongShort`,`Current`,`TPLevel`,`SLLevel` from `json`.`tbl_Position` where `TradeID` = '" + i + "'";
А пользователь, с которым вы соединяетесь, не имеет прав доступа к данным из этой базы данных или этой конкретной таблицы.
Вы рассматривали эту вещь?
Я уверен, что проблема оригинального плаката уже давно решена. Однако у меня была такая же проблема, поэтому я решил объяснить, что стало причиной этой проблемы для меня.
Я делал запрос на объединение с двумя таблицами - 'foo' и 'foo_bar'. Тем не менее, в моем заявлении SQL у меня была опечатка: 'foo.bar'
Таким образом, вместо сообщения о том, что таблица 'foo.bar' не существует, в сообщении об ошибке указывается, что команда была отклонена - как будто у меня нет разрешений.
Надеюсь, это кому-нибудь поможет.
Эта проблема произошла со мной, потому что у меня было hibernate.default_schema
установить другую базу данных, чем в источнике данных.
Будучи строгим в отношении моих пользовательских разрешений mysql, когда hibernate пытался запросить таблицу, он запрашивал тот, что в hibernate.default_schema
база данных, для которой у пользователя не было разрешений.
К сожалению, mysql неправильно указывает базу данных в этом сообщении об ошибке, так как это бы сразу все прояснило.
команда выбора, запрещенная пользователю ''@'' для таблицы ''
Эта проблема в основном возникает после того, как условие соединения содержит неверное имя базы данных в вашем запросе на соединение. Поэтому, пожалуйста, проверьте ваш запрос выбора в имени объединяемой таблицы после базы данных.
Тогда решите, например, его правильный ответ
string g = " SELECT `emptable`.`image` , `applyleave`.`id` , `applyleave`.`empid` , `applyleave`.`empname` , `applyleave`.`dateapply` , `applyleave`.`leavename` , `applyleave`.`fromdate` , `applyleave`.`todate` , `applyleave`.`resion` , `applyleave`.`contact` , `applyleave`.`leavestatus` , `applyleave`.`username` , `applyleave`.`noday` FROM `DataEMP_ems`.`applyleave` INNER JOIN `DataEMP_ems`.`emptable` ON ( `applyleave`.`empid` = `emptable`.`empid` ) WHERE ( `applyleave`.`leavestatus` = 'panding' ) ";
Таблица соединения imputable
а также applyleave
в той же базе данных, но имя базы данных в сети отличается от указанной ошибки.
попробуйте предоставить привилегии еще раз.
GRANT ALL PRIVILEGES ON the_database.* TO 'the_user'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
Вам необходимо предоставить разрешения SELECT пользователю MySQL, который подключается к MySQL. Увидеть:
http://dev.mysql.com/doc/refman/5.0/en/privilege-system.html
http://dev.mysql.com/doc/refman/5.0/en/user-account-management.html
Если вы работаете с приложением Windows Forms, это работает для меня "сервер = localhost; идентификатор пользователя =dbuser; пароль = пароль; база данных = имя_базы; Использовать процедуры тела = ложь;"
Просто добавьте "Использовать процедурные тела = ложь" в конце строки соединения.
У меня было точно такое же сообщение об ошибке при экспорте базы данных через Sequel Pro на Mac. Я был пользователем root, поэтому я знал, что это не разрешения. Затем я попробовал это с mysqldump и получил другое сообщение об ошибке: Ошибка: 1449: Пользователь, указанный как определитель ('joey'@'127.0.0.1'), не существует при использовании LOCK TABLES
Ах, я восстановил эту базу данных из резервной копии на сайте разработчика, и я не создал этого пользователя на этом компьютере. "предоставить все на" joey'@'127.0.0.1 ", идентифицированном как" joeypass "; " сделал свое дело.
НТН
Что касается меня, я случайно включил имя своей локальной базы данных в запрос SQL, поэтому проблема отказа в доступе возникла при развертывании.
Я удалил имя базы данных из запроса SQL, и оно было исправлено.
Немного опоздал на вечеринку, но, если у вас есть root-доступ, вы можете сделать следующее напрямую:
Войдите в свой mysql как root,
$ mysql -u root -p
Показать базы данных;
mysql>SHOW DATABASES;
Выберите базу данных mysql, в которой находится информация обо всех привилегиях.
mysql>USE mysql;
Показать таблицы.
mysql>SHOW TABLES;
Таблица, касающаяся привилегий для вашего случая, называется 'db', поэтому давайте посмотрим, какие столбцы у нее есть:
mysql>DESC db;
Чтобы перечислить привилегии пользователей, введите следующую команду, например:
mysql>SELECT user, host, db, Select_priv, Insert_priv, Update_priv, Delete_priv FROM db ORDER BY user, db;
Если вы не можете найти этого пользователя или видите, что у этого пользователя есть столбец "N" в столбце Select_priv, то вам необходимо соответственно ВСТАВИТЬ или ОБНОВИТЬ:
ВСТАВИТЬ:
INSERT INTO db (Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv) VALUES ('localhost','DBname','UserName','Y' ,'N','N','N');
ОБНОВИТЬ:
UPDATE db SET Select_priv = 'Y' WHERE User = 'UserName' AND Db = 'DBname' AND Host='localhost';
Наконец, введите следующую команду:
mysql>FLUSH PRIVILEGES;
Чао.
Проблема, скорее всего, между. и _. Скажи в моем запросе я положил
ВЫБРАТЬ..... ИЗ LOCATION.PT
вместо
ВЫБРАТЬ..... ОТ LOCATION_PT
Поэтому я думаю, что MySQL будет считать LOCATION именем базы данных и выдаёт ошибку привилегии доступа.
Мои проблемы были исправлены после обновления до последней версии MySQL workbench 8.0.18
У меня такая же проблема. Это связано с гибернацией. Я изменил базу данных с dev на производственную в hibernate.cfg.xml, но в других файлах hbm.xml со старым именем базы данных был атрибут каталога, и это вызывало проблему.
Вместо того, чтобы указывать неправильное имя базы данных, он показал ошибку "Отказано в доступе".
Поэтому не забудьте изменить имя базы данных везде или просто удалить атрибут каталога
У меня был такой сценарий:
Я разработал базу данных на своем локальном хосте под названием . Затем я купил план хостинга с cpanel, где мне нужно было создать новую базу данных с каким-то префиксом (префиксом было имя моей учетной записи). Итак, новое имя базы данных было .
В своих процедурах я написал такие утверждения, как:
select * from test.t_table_name;
Поэтому, когда я импортировал базу данных, я забыл изменитьtest
сuser_test
и он дал мне это сообщение:SELECT command denied to user 'user'@'localhost' for table 't_table_name'
Итак, произошло следующее: сервер попытался получить доступ к какой-то другой базе данных (в моем случае тестовой базе данных), которая не была создана в cpanel (где существовал только user_test), и сервер выдал мне эту ошибку.
Я думаю, будет лучше сказать, что на этом сервере нет такой базы данных, потому что именно ее и нужно изменить.
Надеюсь, это кому-то поможет.
Ваше здоровье.
Я уверен, что это было решено, просто хочу указать, что у меня была опечатка в имени базы данных, и она все еще выдавала эту ошибку в имени таблицы. Так что в этом случае вы можете проверить наличие опечаток.
У меня такая же проблема. Я был очень расстроен этим. Может быть, это не отвечает на вопрос, но я просто хочу поделиться своим опытом ошибок, и могут быть другие, которые пострадали, как я. Очевидно, это была моя низкая точность.
У меня было это:
SELECT t_comment.username,a.email FROM t_comment
LEFT JOIN (
SELECT username,email FROM t_un
) a
ON t_comment.username,a.email
который должен быть таким:
SELECT t_comment.username,a.email FROM t_comment
LEFT JOIN (
SELECT username,email FROM t_un
) a
ON t_comment.username=a.username
Тогда моя проблема была решена в тот день, я боролся за два часа, только за эту проблему.
Подобно другим ответам, которые я пропустил, набрал запрос.
Я имел -
SELECT t.id FROM t.table LEFT JOIN table2 AS t2 ON t.id = t2.table_id
Должно было
SELECT t.id FROM table AS t LEFT JOIN table2 AS t2 ON t.id = t2.table_id
Mysql пытался найти базу данных с именем t, для которой у пользователя не было разрешения.