Подтвердить что ты не робот

Ошибка: выберите команду denied для пользователя '<userid>' @'<ip-address>' для таблицы '<имя-таблицы>'

На моем веб-сайте я использую базу данных MySQL. Я использую webservice, где я выполняю все мои манипуляции с базой данных.

Теперь В одном из методов этого веб-сервиса я получаю следующую ошибку.

выберите команду, запрещенную пользователю '' @'' для таблицы ''

Что может быть неправильным?

Ниже приведен код, где я получаю эту ошибку. Я попробовал отладку и обнаружил, что она не работает на линии

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();
4b9b3361

Ответ 1

Пользователь базы данных не имеет права делать запрос select.

вы можете предоставить разрешение пользователю, если у вас есть 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 + "'";

И пользователь, с которым вы подключаетесь, не имеет доступа к данным из этой базы данных или этой конкретной таблицы.

Считаете ли вы эту вещь?

Ответ 2

Я уверен, что оригинальная проблема с плакатом давно решена. Однако у меня была такая же проблема, поэтому я подумал, что объясню, что вызвало эту проблему для меня.

Я делал запрос объединения с двумя таблицами - "foo" и "foo_bar". Однако в моей инструкции SQL у меня была опечатка: 'foo.bar'

Итак, вместо того, чтобы сообщать мне, что таблица "foo.bar" не существует, сообщение об ошибке указывает, что команде было отказано - как будто у меня нет разрешений.

Надеюсь, это поможет кому-то.

Ответ 3

выберите команду, запрещенную пользователю '' @'' для таблицы ''

Эта проблема в основном сгенерирована после условия соединения - это неправильное имя базы данных в вашем запросе соединения. Поэтому, пожалуйста, проверьте ваш запрос выбора в имени таблицы соединений после базы данных.

Затем разрешите его, например, его правильную ans ware

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 в той же базе данных, но имя онлайн-базы данных отличается от заданной ошибки при этой проблеме.

Ответ 4

Эта проблема произошла со мной, потому что у меня был hibernate.default_schema установлен в другую базу данных, чем та, что в DataSource.

Будучи строгим в моих разрешениях пользователя mysql, когда hibernate попытался запросить таблицу, он запросил запрос в базе данных hibernate.default_schema, для которой у пользователя не было разрешений.

Несчастливо, что mysql неправильно задает базу данных в этом сообщении об ошибке, так как это сразу очистило бы.

Ответ 6

У меня было то же сообщение об ошибке, делающее экспорт базы данных через Sequel Pro на mac. Я был пользователем root, поэтому я знал, что это не разрешения. Затем я попробовал его с mysqldump и получил другое сообщение об ошибке:  Получена ошибка: 1449: Пользователь, указанный как определитель ('joey'@'127.0.0.1'), не существует при использовании LOCK TABLES

Ahh, я восстановил эту базу данных из резервной копии на сайте dev, и я не создал этого пользователя на этом компьютере. "предоставить все на. joey'@'127.0.0.1", идентифицированный "joeypass", "сделал трюк.

HTH

Ответ 7

если вы работаете в приложении Windows Forms, это сработало для меня "server = localhost; user id = dbuser; password = password; database = dbname; Use Procedure Bodies = false;"

просто добавьте "Use Procedure Bodies = false" в конец строки коннектора.

Ответ 8

Проблема, скорее всего, между a. и _. Скажем в моем запросе, я положил

SELECT..... FROM LOCATION.PT

вместо

SELECT..... FROM LOCATION_PT

Итак, я думаю, что MySQL будет думать, что LOCATION является именем базы данных и дает ошибку привилегий доступа.

Ответ 9

У меня была та же проблема. Это связано с спящим режимом. Я изменил базу данных с dev на производство в файле hibernate.cfg.xml, но в других файлах hbm.xml со старым именем базы данных был атрибут каталога, и это вызывало проблему.

Вместо того, чтобы сообщать неправильное имя базы данных, она обнаружила ошибку отказа от разрешения.

Поэтому не забудьте изменить имя базы данных всюду или просто удалить атрибут каталога

Ответ 10

У меня была та же проблема. Я был очень расстроен этим. Возможно, это не отвечает на вопрос, но я просто хочу поделиться своим опытом с ошибками, и могут быть другие, которые страдали, как я. Очевидно, это была моя низкая точность.

У меня было это:

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

Тогда моя проблема была решена в этот день, я боролся через два часа, только для этой проблемы.

Ответ 11

Немного поздно, но если у вас есть 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:

UPDATE db SET Select_priv = 'Y' WHERE User = 'UserName' AND Db = 'DBname' AND Host='localhost';

Наконец, введите следующую команду:

mysql>FLUSH PRIVILEGES;

Ciao.

Ответ 12

мои проблемы были исправлены после обновления до MySQL Workbench последней версии 8.0.18

Ответ 13

Как и другие ответы, я пропустил запрос.

У меня было -

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, для которой у пользователя не было разрешения.