Ошибка: выберите команду, запрещенную пользователю '<идентификатор пользователя>' @ '<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, для которой у пользователя не было разрешения.

Другие вопросы по тегам