web-dev-qa-db-fra.com

Créer un nouvel utilisateur dans MySQL et lui donner un accès complet à une base de données

Je veux créer un nouvel utilisateur dans MySQL et lui donner un accès complet à une seule base de données, disons dbTest, que je crée avec une commande telle que create database dbTest;. Quelles seraient les commandes MySQL pour le faire?

579
jimgh

Essayez ceci pour créer l'utilisateur:

CREATE USER 'user'@'hostname';

Essayez ceci pour lui donner accès à la base de données dbTest:

GRANT ALL PRIVILEGES ON dbTest.* To 'user'@'hostname' IDENTIFIED BY 'password';

Si vous exécutez le code/site accédant à MySQL sur le même ordinateur, nomhôte serait localhost.

Maintenant, la panne.

GRANT - Il s'agit de la commande utilisée pour créer des utilisateurs et octroyer des droits sur des bases de données, des tables, etc.

ALL PRIVILEGES - Cela indique à l'utilisateur qu'il disposera de tous les privilèges standard. Cela n'inclut toutefois pas le privilège d'utiliser la commande GRANT.

dbtest.* - Ceci indique à MySQL d'appliquer ces droits pour pouvoir les utiliser dans toute la base de données dbtest. Vous pouvez remplacer le * par des noms de table spécifiques ou des routines de stockage si vous le souhaitez.

TO 'user'@'hostname' - 'utilisateur' est le nom d'utilisateur du compte d'utilisateur que vous créez. Remarque: vous devez avoir les guillemets simples ici. 'hostname' indique à MySQL à partir de quel hôte l'utilisateur peut se connecter. Si vous ne voulez que le même ordinateur, utilisez localhost

IDENTIFIED BY 'password' - Comme vous l'aurez deviné, cela définit le mot de passe de cet utilisateur.

785
Dan McGrath

Syntaxe

Pour créer un utilisateur dans MySQL/MariaDB 5.7.6 et supérieur, utilisez la syntaxe CREATE USER :

_CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'new_password';
_

puis, pour accorder tous les accès à la base de données (par exemple _my_db_), utilisez GRANT Syntax , par exemple.

_GRANT ALL ON my_db.* TO 'new_user'@'localhost';
_

ALL ( priv_type ) peut être remplacé par un privilège spécifique tel que SELECT, INSERT, UPDATE, ALTER, etc.

Ensuite, pour recharger les autorisations récemment attribuées, exécutez:

_FLUSH PRIVILEGES;
_

L'exécution

Pour exécuter les commandes ci-dessus, vous devez exécuter la commande mysql et les taper dans Invite, puis vous déconnecter par la commande quit ou Ctrl-D.

Pour exécuter à partir de Shell, utilisez le paramètre _-e_ (remplacez _SELECT 1_ par l'une des commandes ci-dessus):

_$ mysql -e "SELECT 1"
_

ou imprimer une déclaration à partir de l'entrée standard:

_$ echo "FOO STATEMENT" | mysql
_

Si vous avez Accès refusé avec les paramètres ci-dessus, spécifiez les paramètres _-u_ (pour l'utilisateur) et _-p_ (pour le mot de passe), ou pour un accès à long terme, définissez vos informations d'identification dans _~/.my.cnf_, par exemple.

_[client]
user=root
password=root
_

Intégration de shell

Pour les personnes ne connaissant pas bien la syntaxe MySQL, voici des fonctions Shell pratiques, faciles à mémoriser et à utiliser (pour les utiliser, vous devez charger les fonctions Shell incluses plus bas).

Voici un exemple:

_$ mysql-create-user admin mypass
| CREATE USER 'admin'@'localhost' IDENTIFIED BY 'mypass'

$ mysql-create-db foo
| CREATE DATABASE IF NOT EXISTS foo

$ mysql-grant-db admin foo
| GRANT ALL ON foo.* TO 'admin'@'localhost'
| FLUSH PRIVILEGES

$ mysql-show-grants admin
| SHOW GRANTS FOR 'admin'@'localhost'
| Grants for admin@localhost                                                                                   
| GRANT USAGE ON *.* TO 'admin'@'localhost' IDENTIFIED BY PASSWORD '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4' |
| GRANT ALL PRIVILEGES ON `foo`.* TO 'admin'@'localhost'

$ mysql-drop-user admin
| DROP USER 'admin'@'localhost'

$ mysql-drop-db foo
| DROP DATABASE IF EXISTS foo
_

Pour utiliser les commandes ci-dessus, vous devez copier-coller les fonctions suivantes dans votre fichier rc (par exemple, .bash_profile ) et Rechargez votre Shell ou sourcez le fichier. Dans ce cas, tapez simplement _source .bash_profile_:

_# Create user in MySQL/MariaDB.
mysql-create-user() {
  [ -z "$2" ] && { echo "Usage: mysql-create-user (user) (password)"; return; }
  mysql -ve "CREATE USER '$1'@'localhost' IDENTIFIED BY '$2'"
}

# Delete user from MySQL/MariaDB
mysql-drop-user() {
  [ -z "$1" ] && { echo "Usage: mysql-drop-user (user)"; return; }
  mysql -ve "DROP USER '$1'@'localhost';"
}

# Create new database in MySQL/MariaDB.
mysql-create-db() {
  [ -z "$1" ] && { echo "Usage: mysql-create-db (db_name)"; return; }
  mysql -ve "CREATE DATABASE IF NOT EXISTS $1"
}

# Drop database in MySQL/MariaDB.
mysql-drop-db() {
  [ -z "$1" ] && { echo "Usage: mysql-drop-db (db_name)"; return; }
  mysql -ve "DROP DATABASE IF EXISTS $1"
}

# Grant all permissions for user for given database.
mysql-grant-db() {
  [ -z "$2" ] && { echo "Usage: mysql-grand-db (user) (database)"; return; }
  mysql -ve "GRANT ALL ON $2.* TO '$1'@'localhost'"
  mysql -ve "FLUSH PRIVILEGES"
}

# Show current user permissions.
mysql-show-grants() {
  [ -z "$1" ] && { echo "Usage: mysql-show-grants (user)"; return; }
  mysql -ve "SHOW GRANTS FOR '$1'@'localhost'"
}
_

Remarque: Si vous préférez ne pas laisser de trace (telle que les mots de passe) dans votre historique Bash, vérifiez: Comment empêcher les commandes de s'afficher dans l'historique bash?

281
kenorb

Pour créer un utilisateur et accorder tous les privilèges sur une base de données.

Connectez-vous à MySQL:

mysql -u root

Maintenant créer et accorder

GRANT ALL PRIVILEGES ON dbTest.* To 'user'@'hostname' IDENTIFIED BY 'password';

Utilisateur anonyme (pour test local uniquement)

Si vous souhaitez simplement accorder un accès complet et illimité à une base de données (par exemple, sur votre ordinateur local pour une instance de test), vous pouvez accorder un accès à l'utilisateur anonyme, comme suit:

GRANT ALL PRIVILEGES ON dbTest.* To ''@'hostname'

Savoir

C'est bien pour les données indésirables en développement. Ne fais pas ça avec quoi que ce soit qui compte pour toi.

57
superluminary
$ mysql -u root -p -e "grant all privileges on dbTest.* to
`{user}`@`{Host}` identified by '{long-password}'; flush privileges;"

ignorer - p option, si l'utilisateur mysql n'a pas de mot de passe ou appuyez simplement sur "[Entrée] "bouton pour contourner. les chaînes entourées d'accolades doivent être remplacées par les valeurs réelles.

16
S.K. Venkat

Vous pouvez créer de nouveaux utilisateurs à l'aide de l'instruction CREATE USER et leur attribuer des droits à l'aide de GRANT .

13
candiru

Pour moi, cela a fonctionné.

CREATE USER 'spowner'@'localhost' IDENTIFIED BY '1234'; 
GRANT ALL PRIVILEGES ON test.* To 'spowner'@'localhost'; 
FLUSH PRIVILEGES;

  • 1234: mot de passe sur le géniteur
  • test: la base de données 'spowner' a le droit d'accès à
6
Park JongBum

La commande ci-dessous fonctionnera si vous voulez créer un nouvel utilisateur en lui donnant tous les accès à une base de données spécifique (pas toutes les bases de données de votre Mysql) sur votre hôte local.

GRANT ALL PRIVILEGES ON test_database.* TO 'user'@'localhost' IDENTIFIED BY 'password';

Ceci accordera tous les privilèges à une base de données test_database (dans votre cas dbTest) à cet utilisateur sur localhost.

Vérifiez quelles autorisations la commande ci-dessus a émises à cet utilisateur en exécutant la commande ci-dessous.

SHOW GRANTS FOR 'user'@'localhost'

Juste au cas où, si vous souhaitez limiter l'accès des utilisateurs à une seule table

GRANT ALL ON mydb.table_name TO 'someuser'@'Host';
2
Prabhakar