Ошибка: команда выбора запрещена пользователю '<userid>' @ '«за столом»' - PullRequest
54 голосов
/ 22 января 2011

На моем сайте я использую базу данных 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();

Ответы [ 12 ]

141 голосов
/ 14 апреля 2011

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

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

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

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

28 голосов
/ 22 января 2011

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

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

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

Вы рассматривали эту вещь?

7 голосов
/ 31 января 2016

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

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

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

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

6 голосов
/ 14 октября 2015

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

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

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

3 голосов
/ 22 января 2011

Вам необходимо предоставить разрешения 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

2 голосов
/ 15 января 2015

если вы работаете из приложения Windows Forms, это сработало для меня "сервер = localhost; идентификатор пользователя = dbuser; пароль = пароль; база данных = имя_базы; Использовать элементы процедуры = false;"

просто добавьте«Использовать процедурные тела = ложь» в конце строки соединения.

2 голосов
/ 09 декабря 2014

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

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

hth

1 голос
/ 15 июля 2014

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

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

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

1 голос
/ 22 апреля 2012

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

SELECT ..... FROM LOCATION.PT

вместо

ВЫБРАТЬ ..... ОТ LOCATION_PT

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

0 голосов
/ 08 ноября 2017

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

...