I’m having troubles with a certain query on one of my servers. On all other places I’ve tested it it works completely fine but on the server i want to use it it isn’t working.
It’s about the following SQL:
SELECT facturen.id AS fid,
projecten.id AS pid,
titel,
facturen.totaal_bedrag AS totaal,
betaald,
datum
FROM facturen,
projecten
WHERE facturen.project_id = projecten.id
AND projecten.eigenaar = '1'
ORDER BY datum DESC
This is the error code I get from it:
SELECT command denied to user 'marco'@'localhost' for table 'projecten'
The tables:
facturen:
CREATE TABLE IF NOT EXISTS `facturen` (
`id` int(11) NOT NULL auto_increment,
`project_id` int(11) NOT NULL,
`datum` int(11) NOT NULL,
`lever_datum` int(11) NOT NULL,
`totaal_bedrag` decimal(9,2) NOT NULL,
`btw` decimal(9,2) NOT NULL,
`bedrijf` varchar(40) NOT NULL,
`contactpersoon` varchar(60) NOT NULL,
`adres` varchar(60) NOT NULL,
`postcode` varchar(7) NOT NULL,
`plaats` varchar(30) NOT NULL,
`betaald` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=201200006 ;
projecten:
CREATE TABLE IF NOT EXISTS `projecten` (
`id` int(11) NOT NULL auto_increment,
`titel` varchar(80) NOT NULL,
`eigenaar` int(11) NOT NULL,
`creatie_datum` int(11) NOT NULL,
`eind_datum` int(11) NOT NULL,
`totaal_bedrag` decimal(9,2) NOT NULL,
`btw` decimal(9,2) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=201200004 ;
The strange part is that every other query on both the ‘projecten’ table and the ‘facturen’ table works completely fine, also this query works fine on two other servers of mine.
Having your own custom website is one of the most rewarding experiences you can have online, but from time to time, it can also throw seemingly random errors at you for no apparent reason. One of the more perplexing errors is MySQL error #1142 “INSERT command denied to user”. Unlike other errors, this particular issue can pop up in almost all content management systems, in phpMyAdmin, and even in code that you have written yourself. In this article, we will learn what causes the #1142 error and we will go over the possible solutions to this issue.
As the error message ”INSERT command denied to user” suggests, the root problem is that the INSERT command fails. The INSERT command is used to add new information to your MySQL database. So, you can potentially run into this problem whenever you update your website with new information or when you try to manually insert new data into your database.
Since this is a database-related issue, it can pop up on any website that uses a database to store information. The issue can affect everything from world-renowned content management systems like WordPress, Joomla, and Drupal, to small PHP websites that you may have coded yourself.
The #1142 error is most prevalent in shared hosting environments. Plans such as our free website hosting and our premium shared hosting packages fall into this category. The reason is that shared hosting plans often impose a limit, known as a quota, on the amount of information that can be stored in a single database.
What Is a Database Quota?
As more information is stored in a database, its size steadily grows. That is why hosting companies often impose a database quota which is essentially a storage limit for your database. When you reach this limit, you are no longer permitted to add new information in the database. In technical terms, when you reach your database storage limit, your database user loses its INSERT privileges.
How Can I Check My Database Quota and Current Space Usage?
You can easily check the current size of your MySQL database as well as the database quota imposed by your hosting plan using the Database Manager section of the Control Panel, as is shown below:
The only thing that we need to point out is that your current utilization statistics are not updated in real-time. As such, it may take an hour or so for any changes to the size of your database to be reflected in our Database Manager.
How Do I Fix MySQL Error #1142 “INSERT Command Denied to User”?
There are three approaches you can take to resolve the ”INSERT command denied to user” problem:
- you can optimize your database in order to reduce its size without sacrificing any of your data.
- you can delete information that you no longer need.
- you can upgrade to a better hosting plan that grants you additional database storage.
Below we will discuss the three options in greater detail.
Option 1: Optimize the Database
Optimizing the database is arguably the best approach to take as it allows you to instantly reduce your database’s size without sacrificing any data. The only downside to this option is that for large websites this can prove to be only a temporary solution.
To optimize your database, follow the steps below:
- Go to the Database Manager section of our Control Panel.
- Click on the name of the database that is over quota.
- Open the Management tab.
- Choose the 1-click Optimization option, as is shown in the screenshot below:
- At this point, your database is optimized. However, it may take some time for this optimization to be reflected. To speed up the process, scroll further down the list of management options and choose the 1-click Permissions Fix button. By doing so, you will be granted full access to your database immediately and you can continue working on your website.
For more information on how database optimization works and the different ways of optimizing your database that you have available, you can refer to our full guide on how to optimize a MySQL database.
Option 2: Delete Unnecessary Data
Your other alternative when it comes to reducing your database size is to straight-up delete any data that is no longer necessary. This can be achieved using phpMyAdmin to DROP (delete) any tables that you no longer need. An example of this can be seen below:
Some website software products offer the ability for you to log every site visit for further analysis at a later time. Such information is often stored in your database. While this may be a useful feature to some, it can very quickly take up the majority of your database, especially if you have regular site visitors who spend plenty of time on your site. Disabling this logging functionality and removing the existing logs from the database can free up hundreds of megabytes.
Another aspect of running a website that can consume a lot of database storage is user-generated content such as reader comments on a blog post. At the very least you should ensure that no SPAM comments are published as are not helpful in the slightest and take up valuable storage space. An even better approach would be to consider using a service like DISQUS as it not only helps protect you against SPAM comments, it even stores all comments on its own servers so they are not taking up any space at all in your database.
Option 3: Upgrade to a Better Hosting Plan
The last option that you have at your disposal is to upgrade to a better hosting plan. The next tier of hosting will always offer you more storage for your databases and our premier plans like the Max Pack Plus and all of our Semi-Dedicated web servers will provide you with unlimited storage, thus dealing with the #1142 error once and for all.
If you are using one of our Virtual Private Server packages and you run into the “INSERT command denied to user” error, it is possible that your VPS has run out of space and there is simply no room for additional information to be stored. Once you confirm that the lack of storage is indeed the issue, you can purchase additional disk space for your VPS through our Control Panel.
Conclusion
When you are using a shared hosting server, you can solve the MySQL error #1142 “INSERT command denied to user” by making sure that your current database utilization does not exceed your database quota. This can be done by optimizing the database, deleting data, or just increasing your database quota. Sadly, some content management systems use different wording for the exact same error, so if your hosting plan limits the maximum size of your MySQL database, it is always a good idea to regularly check that you are not reaching your storage limit.
Keep reading
- How Do I Fix the “Can’t Connect to Local MySQL Server Through Socket” Error?
Сегодня при изучении mysql, операции с медовым соком, при повторном использовании mysql я обнаружил, что независимо от того, какая подкоманда, возникает ошибка
mysql> select user,password from mysql.user;
ERROR 1142 (42000): SELECT command denied to user ‘root’@‘localhost’ for table ‘user’
После прочтения сообщения об ошибке разрешения недостаточно. , , Нет разрешения, так что просто дайте ему разрешение
step01
Выйдите из базы данных и закройте службу mysql.
mysql> quit
Bye
[[email protected] ~]# /etc/init.d/mysqld stop
Shutting down MySQL.. SUCCESS!
step02
Запустите mysql в безопасном режиме, войдите в систему как пользователь root
[[email protected] ~]# mysqld_safe --skip-grant-tables &
[[email protected] ~]# mysql -uroot -p123 mysql
step03
Переключение базы данных и просмотр локальных прав пользователя root в табличной информации
mysql> use mysql;
Database changed
mysql> show tables;
+---------------------------+
| Tables_in_mysql |
+---------------------------+
| columns_priv |
| db |
| event |
| func |
| general_log |
| help_category |
| help_keyword |
| help_relation |
| help_topic |
| innodb_index_stats |
| innodb_table_stats |
| ndb_binlog_index |
| plugin |
| proc |
| procs_priv |
| proxies_priv |
| servers |
| slave_master_info |
| slave_relay_log_info |
| slave_worker_info |
| slow_log |
| tables_priv |
| time_zone |
| time_zone_leap_second |
| time_zone_name |
| time_zone_transition |
| time_zone_transition_type |
| user |
+---------------------------+
28 rows in set (0.00 sec)
mysql> select * from user where user='root' and host='localhost'G;
*************************** 1. row ***************************
Host: localhost
User: root
Password: *23AE809DDACAF96AF0FD78ED04B6A265E05AA257
Select_priv: N
Insert_priv: N
Update_priv: N
Delete_priv: N
Create_priv: N
Drop_priv: N
Reload_priv: N
Shutdown_priv: N
Process_priv: N
File_priv: N
Grant_priv: N
References_priv: N
Index_priv: N
Alter_priv: N
Show_db_priv: N
Super_priv: N
Create_tmp_table_priv: N
Lock_tables_priv: N
Execute_priv: N
Repl_slave_priv: N
Repl_client_priv: N
Create_view_priv: N
Show_view_priv: N
Create_routine_priv: N
Alter_routine_priv: N
Create_user_priv: N
Event_priv: N
Trigger_priv: N
Create_tablespace_priv: N
ssl_type:
ssl_cipher:
x509_issuer:
x509_subject:
max_questions: 0
max_updates: 0
max_connections: 0
max_user_connections: 0
plugin: mysql_native_password
authentication_string: NULL
password_expired: N
1 row in set (0.00 sec)
ERROR:
No query specified
Здесь обнаружено, что все они N, что указывает на то, что пользователь root не имеет права на локальный вход
step04
Изменить права локального хоста пользователя root
mysql> update user set `Insert_priv` ='Y' where user='root' and host='localhost';
mysql> update user set `Update_priv` ='Y' where user='root' and host='localhost';
mysql> update user set `Delete_priv` ='Y' where user='root' and host='localhost';
mysql> update user set `Create_priv` ='Y' where user='root' and host='localhost';
mysql> update user set `Drop_priv` ='Y' where user='root' and host='localhost';
mysql> update user set `Reload_priv` ='Y' where user='root' and host='localhost';
mysql> update user set `Shutdown_priv` ='Y' where user='root' and host='localhost';
mysql> update user set `Process_priv` ='Y' where user='root' and host='localhost';
mysql> update user set `File_priv` ='Y' where user='root' and host='localhost';
mysql> update user set `Grant_priv` ='Y' where user='root' and host='localhost';
mysql> update user set `References_priv` ='Y' where user='root' and host='localhost';
mysql> update user set `Index_priv` ='Y' where user='root' and host='localhost';
mysql> update user set `Alter_priv` ='Y' where user='root' and host='localhost';
mysql> update user set `Show_db_priv` ='Y' where user='root' and host='localhost';
mysql> update user set `Super_priv` ='Y',`Create_tmp_table_priv` = 'Y' where user='root'' and host='localhost';
mysql> update user set `Lock_tables_priv` ='Y' where user='root' and host='localhost';
mysql> update user set `Execute_priv` ='Y' where user='root' and host='localhost';
mysql> update user set `Repl_slave_priv` ='Y' where user='root' and host='localhost';
mysql> update user set `Repl_client_priv` ='Y' where user='root' and host='localhost';
mysql> update user set `Create_view_priv` ='Y' where user='root' and host='localhost';
mysql> update user set `Show_view_priv` ='Y' where user='root' and host='localhost';
mysql> update user set `Create_routine_priv` ='Y' where user='root' and host='localhost'';
mysql> update user set `Alter_routine_priv` ='Y' where user='root' and host='localhost';;
mysql> update user set `Create_user_priv` ='Y' where user='root' and host='localhost';
mysql> update user set `Event_priv` ='Y' where user='root' and host='localhost';
mysql> update user set `Trigger_priv` ='Y' where user='root' and host='localhost';
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
Я немного глупый здесь. , , Я выбил его один за другим, и я могу напрямую использовать «,», чтобы закончить писать один раз ,,,
step05
Выйти и перезагрузить и войти
mysql> quit
Bye
[[email protected] ~]# /etc/init.d/mysqld restart
Shutting down MySQL.. SUCCESS!
Starting MySQL.. SUCCESS!
[[email protected] ~]# mysql -uroot -p123
step06
Переключить библиотеку
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
step07
Просмотр информации таблицы
mysql> select * from userG;
*************************** 1. row ***************************
Host: localhost
User: root
Password: *23AE809DDACAF96AF0FD78ED04B6A265E05AA257
Select_priv: Y
Insert_priv: Y
Update_priv: Y
Delete_priv: Y
Create_priv: Y
Drop_priv: Y
Reload_priv: Y
Shutdown_priv: Y
Process_priv: Y
File_priv: Y
Grant_priv: Y
References_priv: Y
Index_priv: Y
Alter_priv: Y
Show_db_priv: Y
Super_priv: Y
Create_tmp_table_priv: Y
Lock_tables_priv: Y
Execute_priv: Y
Repl_slave_priv: Y
Repl_client_priv: Y
Create_view_priv: Y
Show_view_priv: Y
Create_routine_priv: Y
Alter_routine_priv: Y
Create_user_priv: Y
Event_priv: Y
Trigger_priv: Y
Create_tablespace_priv: N
ssl_type:
ssl_cipher:
x509_issuer:
x509_subject:
max_questions: 0
max_updates: 0
max_connections: 0
max_user_connections: 0
plugin: mysql_native_password
authentication_string: NULL
password_expired: N
1 row in set (0.01 sec)
ERROR:
No query specified
Разрешения в основном там
Проверьте это
mysql> create database jinc;
Query OK, 1 row affected (0.00 sec)
mysql> select user,host from mysql.user;
+------+-----------+
| user | host |
+------+-----------+
| root | localhost |
+------+-----------+
1 row in set (0.00 sec)
mysql> drop database jinc;
Query OK, 0 rows affected (0.00 sec)
Хорошо, основные разрешения вернулись
I ran the following query to create a user with restrictions on what columns they can view/edit in a certain table. The table has foreign keys to other tables that I haven’t given any access to. I want the user to be able to edit the columns under INSERT and just have read-only access to the columns under SELECT.
CREATE USER 'user'@'hostname';
GRANT SELECT (`Status`,`Number`,`Location`), INSERT (`Name`,`Address`,`Email Address`,_
`Home Number`,`Work Number`,`Mobile Number`,`Date Available`) ON `project1`.`table1`_
TO 'user'@'hostname' IDENTIFIED BY 'password';
The query runs and creates the user. I am getting users to use HeidiSQL to edit data in this table. When I login as the user, the only table visible is table1, as expected, however when I click on the table I get the error:
/* SQL Error (1142): SHOW command denied to user 'user'@'<IP address different to hostname IP address>' for table 'table1' */
and cannot see any data at all under ‘Data’
The following question was asked on Stack Overflow, however none of the suggested solutions worked for me:
‘SHOW command denied to user’ when setting up user permissions
If I run the query
SHOW GRANTS FOR CURRENT_USER;
I get:
GRANT USAGE ON *.* TO 'user'@'%' IDENTIFIED BY PASSWORD '*<password different to one set originally>'
GRANT SELECT (Status,Number,Location), INSERT (Name,Address,Email Address,Home Number,Work Number,Mobile Number,Date Available) ON `project1`.`table1` TO 'user'@'%'
I get a view of the columns in the table if I run (but still can’t view any data):
SHOW COLUMNS FROM table1;
Does anyone know why this user is not getting a view of the data in table1?
DevilStar wrote:
А вы, как создатель панели, не можете сказать, как создаются пользователи из панели? Со всеми необходимыми правами или нет?
Пользователи имеют доступ к тем таблицам, которые они сами и сделали, если под рутом (читать: вручную), не сделано другое. Ошибка на скрине однозначно говорит о том, что у пользователя нет доступа к таблице.
Вместо уточнения вы сейчас отвечаете вопросом на вопрос. Еще раз:
— как создавалась таблица? кем? при установке или добавлена через панель? (судя по названию предполагаю, что добавлялась она позднее, руками и под рутом; впрочем есть вероятность, что phpmyadmin для debian 8 все-таки изменил пакет и доставляет с собой базу)
— пользователь под которым редактируете таблицу — рут mysql или не рут? (подозреваю что нет)
— какие у него права на эту таблицу? (скорее всего никаких)
Давайте определимся. Я не создатель панели, а скромный энтузиаст, который тратит свое время, пытаясь сделать жизнь других чуть лучше. Не хотите помощи или готовы разбираться сами, ради бога. Однако раз написали, давайте разбираться, но для этого не всегда достаточно предоставленной информации — как-то нужно же попытаться воспроизвести ошибку. Вы должны понимать, что наколбасить на сервере можно столько, что догадаться о порядке действий будет непросто.
So I went through the error while migrating one of the app to cloud. The full error statement goes like :
MySQL Error: #1142. Response form the database. SELECT command denied to user “username@ip” for table “table1”
From the error statement it looks like that ‘SELECT’ access is missing for the user for that particular table, which is actually true but we have already granted that access to the user then why do we still seeing that error.
From my understanding if you are getting this error then the possible issues and the solutions are:
Solutions for MySQL Error: 1142, SELECT command denied to user:
- Double check the Database name: This is the most common scenario as MySQL is case sensitive and using a single upper/lower character can throw this error. Just check that once again.
- Double check the user access: Again this is also possible as sometimes we just provide access on a particular table instead of whole database. So make sure you provide access on “database.*”
- Check if same table exists in any other database: As the error statement never mentions the database name for which the access is denied, I have ran into this issue because the application was trying to access the table with exactly similar name in some other database on which the access was not granted.
That would be it, let me know if there is any other case where you faced similar issue/error, mention in comments.
У меня возникают проблемы с определенным запросом на одном из моих серверов. Во всех других местах я протестировал его, он работает отлично, но на сервере я хочу использовать его, он не работает.
Это о следующем SQL:
SELECT facturen.id AS fid,
projecten.id AS pid,
titel,
facturen.totaal_bedrag AS totaal,
betaald,
datum
FROM facturen,
projecten
WHERE facturen.project_id = projecten.id
AND projecten.eigenaar = '1'
ORDER BY datum DESC
Это код ошибки, который я получаю от него:
SELECT command denied to user 'marco'@'localhost' for table 'projecten'
Таблицы:
facturen:
CREATE TABLE IF NOT EXISTS `facturen` (
`id` int(11) NOT NULL auto_increment,
`project_id` int(11) NOT NULL,
`datum` int(11) NOT NULL,
`lever_datum` int(11) NOT NULL,
`totaal_bedrag` decimal(9,2) NOT NULL,
`btw` decimal(9,2) NOT NULL,
`bedrijf` varchar(40) NOT NULL,
`contactpersoon` varchar(60) NOT NULL,
`adres` varchar(60) NOT NULL,
`postcode` varchar(7) NOT NULL,
`plaats` varchar(30) NOT NULL,
`betaald` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=201200006 ;
projecten:
CREATE TABLE IF NOT EXISTS `projecten` (
`id` int(11) NOT NULL auto_increment,
`titel` varchar(80) NOT NULL,
`eigenaar` int(11) NOT NULL,
`creatie_datum` int(11) NOT NULL,
`eind_datum` int(11) NOT NULL,
`totaal_bedrag` decimal(9,2) NOT NULL,
`btw` decimal(9,2) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=201200004 ;
Странная часть заключается в том, что каждый другой запрос как в таблице «projecten», так и в таблице «facturen» работает совершенно нормально, также этот запрос отлично работает на двух других моих серверах.
Ответ 1
Вам необходимо предоставить разрешения SELECT для пользователя MySQL, который подключается к MySQL
тот же вопрос, что и здесь Ошибка: выберите команду, запрещенную пользователю ‘<userid> ‘ @'< ip-address > ‘ для таблицы ‘< table-name > ‘
см. ответы на ссылку;)
Ответ 2
Я столкнулся с одной и той же ситуацией, но смешно, что причина ошибки была связана с использованием неправильной базы данных или имени схемы.
Правда, что несколько проблем могут привести к ошибке, о которой вы упомянули.
Ответ 3
Эта ошибка также возникает из-за синтаксической ошибки, возникающей из-за псевдонимов tablename.
Например, при выполнении запроса ниже
выберите * из таблицы a.table1, b.table2, где a.table1 = b.table2
ниже возникает ошибка:
Ошибка MySQL: # 1142. Ответ формирует базу данных. Команда SELECT запрещена для пользователя «username @ip» для таблицы «table1»
Решение. Синтаксис для псевдонима tablename должен использоваться правильно, синтаксическое решение для вышеуказанного экземплярa > выберите * из таблицы1 a, table2 b, где a.table1 = b.table2
Ответ 4
У меня тоже была эта проблема, и для меня проблема заключалась в том, что я перешел на новый сервер, а база данных, с которой я пытался подключиться, с моим кодом PHP изменилась с «my_Database» на «my_database».
Ответ 5
Это проблема с привилегиями пользователей вашей базы данных. первая проверка и предоставление разрешения пользователю
‘marco’ в локальном хостинге
Ответ 6
Итак, проблема, с которой я столкнулся, заключалась в следующем: приложение, которое я использовал для предоставления разрешений, превратило Schema.TableName в один оператор БД в неправильную таблицу, поэтому грант был действительно неправильным, но выглядел правильным, когда мы это делали SHOW GRANTS ДЛЯ UserName, если вы не обращали особого внимания на GRANT SELECT vs GRANT TABLE SELECT. Ручная корректировка выбора гранта в таблице с правильным экранированием Schema
. Table
решила мою проблему.
Может быть несвязанным, но я могу представить, может ли один клиент сделать это неправильно, другой тоже может быть.
Надеюсь, что это поможет.
Ответ 7
Эта ошибка произошла на моем сервере, когда я импортировал представление с недопустимым определителем.
Удаление неисправного вида исправило ошибку.
Сообщение об ошибке ничего не говорило о рассматриваемом представлении, но «жаловалось» на одну из таблиц, которая использовалась в представлении.
Ответ 8
В браузере запросов MySQL перейдите на вкладку «Инструменты» > «Администратор MySQL» > «Администрирование пользователя», а затем предоставите пользователю права.
Ответ 9
это о приватизации пользователя в mysql, поэтому вы должны установить большие гранты с вашими пользователями.
сделайте это!
В терминале введите код
mysql> show grants;
затем измените следующий код следующим образом:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '*3F9DF5A32114E05C12C50A83EAE02991016C917B' WITH GRANT OPTION;
Тогда это будет сделано.