J'ai créé une base de données, par exemple «mydb».
CREATE DATABASE mydb CHARACTER SET utf8 COLLATE utf8_bin;
CREATE USER 'myuser'@'%' IDENTIFIED BY PASSWORD '*HASH';
GRANT ALL ON mydb.* TO 'myuser'@'%';
GRANT ALL ON mydb TO 'myuser'@'%';
GRANT CREATE ON mydb TO 'myuser'@'%';
FLUSH PRIVILEGES;
Maintenant, je peux me connecter à la base de données de partout, mais je ne peux pas créer de tables.
Comment accorder tous les privilèges sur cette base de données et (à l'avenir) les tables. Je ne peux pas créer de tables dans la base de données 'mydb'. Je reçois toujours:
CREATE TABLE t (c CHAR(20) CHARACTER SET utf8 COLLATE utf8_bin);
ERROR 1142 (42000): CREATE command denied to user 'myuser'@'...' for table 't'
mysql
mariadb
mysql-error-1142
marioosh
la source
la source
FLUSH PRIVILEGES
?flush privileges
n'est pas nécessaire lorsque vous utilisez desgrant
commandes. x4FLUSH PRIVILEGES;
uniquement si vous modifiez les tables de droits directement en utilisant des déclarations telles queINSERT
,UPDATE
ouDELETE
Réponses:
C'est ainsi que je crée mes privilèges de "super utilisateur" (bien que je spécifierais normalement un hôte).
NOTE IMPORTANTE
Bien que cette réponse puisse résoudre le problème d'accès,
WITH GRANT OPTION
crée un utilisateur MySQL qui peut modifier les autorisations des autres utilisateurs .Pour des raisons de sécurité, vous ne devez pas utiliser ce type de compte d'utilisateur pour tout processus auquel le public aura accès (c'est-à-dire un site Web). Il est recommandé de créer un utilisateur avec uniquement des privilèges de base de données pour ce type d'utilisation.
la source
myuser
par leur propre nom d'utilisateur personnalisé.C'est une vieille question mais je ne pense pas que la réponse acceptée soit sûre. C'est bon pour créer un super utilisateur mais pas bon si vous voulez accorder des privilèges sur une seule base de données.
%
semble ne pas couvrir les communications par socket, c'estlocalhost
pour ça .WITH GRANT OPTION
n'est bon que pour le super utilisateur, sinon c'est généralement un risque pour la sécurité.La mise à jour pour MySQL 5.7+ semble comme ceci met en garde contre:
La définition du mot de passe doit donc se faire avec des commandes distinctes. Merci au commentaire de @ scary-wombat.
J'espère que cela t'aides.
la source
WITH GRANT OPTION
et cibler une base de données spécifiée au lieu de tout (*
).unix sockets
. Lorsque vouslocalhost
utilisez le client myslq sous linux, vous essayez d'utiliser un socket unix au lieu d'une connexion TCP au serveur.Cela sera utile pour certaines personnes:
Depuis la ligne de commande MySQL:
Malheureusement, à ce stade, newuser n'a aucune autorisation pour faire quoi que ce soit avec les bases de données. En fait, si un nouvel utilisateur essaie même de se connecter (avec le mot de passe, le mot de passe), il ne pourra pas atteindre le shell MySQL.
Par conséquent, la première chose à faire est de fournir à l'utilisateur l'accès aux informations dont il aura besoin.
Les astérisques de cette commande font référence à la base de données et à la table (respectivement) auxquelles ils peuvent accéder. Cette commande spécifique permet à l'utilisateur de lire, modifier, exécuter et effectuer toutes les tâches dans toutes les bases de données et tables.
Une fois que vous avez finalisé les autorisations que vous souhaitez configurer pour vos nouveaux utilisateurs, assurez-vous toujours de recharger tous les privilèges.
Vos modifications seront désormais en vigueur.
Pour plus d'informations: http://dev.mysql.com/doc/refman/5.6/en/grant.html
Si vous n'êtes pas à l'aise avec la ligne de commande, vous pouvez utiliser un client comme MySQL Workbench , Navicat ou SQLyog
la source
flush privileges
n'est pas nécessaire lorsque vous utilisez desgrant
commandes. x4GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost' IDENTIFIED BY 'my_password' WITH GRANT OPTION;
(étrange ..., mais vrai)1. Créez la base de données
2. Créez le nom d'utilisateur pour la base de données db_name
3. Utilisez la base de données
4. Enfin, vous êtes dans la base de données db_name, puis exécutez les commandes comme créer, sélectionner et insérer des opérations.
la source
username
devrait avoir tous les privilègesdb_name
mais pas leDROP db_name;
privilège?Ce SQL accorde sur toutes les bases de données mais seulement des privilèges de base. Ils sont suffisants pour Drupal ou Wordpress et, pour plus de commodité, autorisent un compte développeur pour les projets locaux.
la source
Fonctionne pour les privilèges sur le schéma :)
Facultatif: après avoir
mypasswd
ajoutéWITH GRANT OPTION
la source
Je ne pouvais le faire fonctionner qu'en ajoutant
GRANT OPTION
, sans cela, toujours recevoir l'autorisation refusée erreurla source
Bonjour j'ai utilisé ce code pour avoir le super utilisateur dans mysql
et alors
la source
flush privileges
n'est pas nécessaire lorsque vous utilisez desgrant
commandes. x4GRANT
varie entre les versions de MySQL.Pour accéder du serveur distant à la base de données mydb uniquement
Pour accéder à partir du serveur distant à toutes les bases de données.
la source
Pour accorder tous les privilèges sur la base de données:
mydb
à l'utilisateur :,myuser
exécutez simplement:ou:
Le
PRIVILEGES
mot-clé n'est pas nécessaire.Je ne sais pas non plus pourquoi les autres réponses suggèrent de le
IDENTIFIED BY 'password'
mettre à la fin de la commande. Je pense que ce n'est pas obligatoire.la source