Bonjour,

J'ai un petit souci en niveau MySQL.

J'ai crée un utilisateur avec les droits : insert, select, update et delete, avec la commande suivante :

MySQL> GRANT INSERT, SELECT, UPDATE, DELETE on blog.* to 'myuser'@'localhost' identified by 'mypass';
MYSQL> FLUSH PRIVILEGES;

Et j'ai l'erreur CakePHP suivante :

CakePHP is NOT able to connect to the database.

Connection to database could not be established: 
SQLSTATE[42000]: Syntax error or access violation: 1227 Access 
denied; you need (at least one of) the SUPER privilege(s) for this 
operation

J'aimerai bien éviter de faire un GRANT ALL PRIVILEGES. C'est quoi alors le minimum de privileges à donner à mon utilisateur afin que je puisse me connecter sans problème coté CakePHP.

Cordialement,

6 réponses


Bonsoir,

Le message d'erreur est pourtant claire , il te dit que l'operation qu'il a besoin est executé avec le droit SUPER donc pour un utilisateur avec des droits restreints pour cakephp est :

MySQL> GRANT INSERT, SELECT, UPDATE, DELETE, SUPER on blog.* to 'myuser'@'localhost' identified by 'mypass';
MYSQL> FLUSH PRIVILEGES;

Cordialement

azenakhi
Auteur

Bonjour,

Merci pour ta réponse. Mais le problème, quand je lance la commande ci-dessus, il génère l'erreur suivante :

MySQL> GRANT INSERT, SELECT, UPDATE, DELETE, SUPER on blog.* to 'myuser'@'localhost' identified by 'mypass';
ERROR 1221 (HY000): Incorrect usage of DB GRANT and GLOBAL PRIVILEGES

Du coup, j'ai fais ça en 2 étapes. Mais, le SUPER on *.* me dérange. Qu'est-ce que cela signifie exactement?. Pourquoi, je ne peux pas attribuer le privilege SUPER seulement à ma base?

MySQL> GRANT INSERT, SELECT, UPDATE, DELETE on blog.* to 'myuser'@'localhost' identified by 'mypass';
MySQL> GRANT SUPER ON *.* to 'myuser'@'localhost';

Cordialement,

Bonsoir, la réponse est dans la documentation de mysql :

Global Privileges

Global privileges are administrative or apply to all databases on a given server. To assign global privileges, use ON *.* syntax:

GRANT ALL ON *.* TO 'someuser'@'somehost';
GRANT SELECT, INSERT ON *.* TO 'someuser'@'somehost';
Before MySQL 5.1.12, privileges also are assigned at the global level if you use ON * syntax and you have not selected a default database. As of 5.1.12, ON * requires a default database and produces an error if there is none.

The CREATE USER, FILE, PROCESS, RELOAD, REPLICATION CLIENT, REPLICATION SLAVE, SHOW DATABASES, SHUTDOWN, and SUPER privileges are administrative and can only be granted globally.

Other privileges can be granted globally or at more specific levels.

MySQL stores global privileges in the mysql.user table.

Le droit de SUPER forcement un droit global donc il faut . pour qu'il fonctionne correctement.

Cordialement

azenakhi
Auteur

Bonjour,

Voici ce que j'ai trouvé dans cette page : http://cipcnet.insa-lyon.fr/sqltut/nexen/grant.html.

SUPER : Autorise une connexion unique même si max_connections est atteind, et l'exécution des commandes CHANGE MASTER , KILL thread , mysqladmin debug , PURGE MASTER LOGS et SET GLOBAL .

Selon ça, je peux dire que SUPER est un privilège dangereux. Il peut même tuer une connexion.

Cordialement

Bonsoir,

Le probleme est que tu utilise un framework qui a besoin d'un utilisateur qui a ce droit, si tu veux pas mettre ce droit car tu le trouve trop dangereux, tu n'utilise pas cakephp...

Cordialement

azenakhi
Auteur

Bonsoir,

Je suis d'accord avec toi si je ne veux pas casser pas la tête avec ça. Mais, quand la situation oblige son utilisation, c'est mieux de comprendre son niveau de risque pour savoir le gérer et le justifier aussi.

Cordialement