2009-11-12 6 views
0

Ok, j'essaie d'ajouter un utilisateur à une base de données MySQL. Cet utilisateur devrait pouvoir ajouter d'autres utilisateurs à la base de données pour laquelle il a des privilèges. J'ai donc fait ceci:Utilisateurs MySQL et tous les privilèges

GRANT ALL privileges ON thedbname.* TO 'topuser'@'%' IDENTIFIED BY 'pass'; 

Cependant, cet utilisateur ne peut pas ajouter d'utilisateur. Est-ce parce que je leur ai seulement donné «tout» pour une seule base de données? Les permissions apparaissent comme 'N' quand je les regarde alors que si je supprime le nom de la base de données, elles apparaissent comme 'Y'.

Je veux « topuser » pour pouvoir exécuter ce:

GRANT SELECT ON thedbname.* TO 'seconduser'@'%' IDENTIFIED BY 'pass'; 

Ils ne ont pas besoin d'ajouter des utilisateurs à d'autres bases de données, d'où mes tentatives ici.

Ceci est pour une application Web où les utilisateurs fournissent un nom d'utilisateur et un mot de passe pour accéder à une base de données afin qu'un mot de passe ne soit pas stocké dans le code. D'autres solutions sont bien accueillies!

Répondre

1

Vous devez accorder le "grant to other privilege". Le manuel du GRANT est disponible here.

MySQL pour inclure seulement les privilèges de base dans le tout, si vous regardez attentivement la documentation, il dit tout est:

Grant all privileges at specified access level except GRANT OPTION 

vous devez donc accorder l'option « subvention » à votre utilisateur haut:

GRANT GRANT OPTION ON thedbname.* TO 'topuser'@'%' IDENTIFIED BY 'pass'; 
+0

essayé déjà mais avec « code d'erreur 1410, état SQL 42000: Vous n'êtes pas autorisé à créer un utilisateur avec GRANT » erreur. – ajr

+0

avez-vous un accès root sur le serveur? – RageZ

0
DELETE FROM mysql.user WHERE user LIKE 'admin'; 
INSERT INTO mysql.user (host, user, password) VALUES ('localhost', 'admin', 'portal01'); 
INSERT INTO mysql.user (host, user, password) VALUES ('%', 'admin', 'portal01'); 
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' IDENTIFIED BY 'portal01' WITH GRANT OPTION;sudo 
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' IDENTIFIED BY 'portal01' WITH GRANT OPTION; 
FLUSH PRIVILEGES; 
SELECT * FROM mysql.user ORDER BY user; 
+0

Pouvez-vous utiliser les outils de code? Ca n'a pas l'air si beau ... – Castiblanco

+0

Bien sûr, vous pouvez le faire avec un script. Ceci est juste du code brut pour vous donner les informations nécessaires. J'ai copié une table mysql.user d'un serveur à un autre lorsque les informations root sont perdues. Il y a plus d'une façon de peler un chat. – Petrovitch

Questions connexes