S'agit-il d'un ensemble normal de privilèges MySQL?

9

En utilisant phpmyadmin sur une configuration de wamp de test local, ainsi que la plupart des états du titre, il y a 3 utilisateurs marqués comme utilisateur = ANY, mot de passe = NO, tels que:

USER | HOST    | Password | Global Priv | Grant
-----+---------+----------+-------------+------
Any  | %       | No       | USAGE       | No
Any  | Local   | No       | USAGE       | No
Any  | Domain  | No       | USAGE       | No
-----+---------+----------+-------------+------

Aucun des 3 utilisateurs n'a de privilèges spécifiques pour les tables, il semble donc qu'ils ne peuvent pas faire grand-chose. S'agit-il d'une sorte de mesure de sécurité générique, pour déclarer explicitement que «Tout» utilisateur qui ne fait partie d'aucun autre groupe d'utilisateurs n'a pas de privilèges?

Chris
la source
C'est en fait une très bonne question car mysql est livré avec des autorisations par défaut qui ne sont pas publiées. +1 !!!
RolandoMySQLDBA

Réponses:

6

En réalité, ces trois comptes d'utilisateurs sont en fait assez dangereux. Ils constituent une très grande menace pour tester les bases de données.

Malheureusement, mysql est livré avec un accès complet aux bases de données de test. Comment pouvez-vous les trouver?

Exécutez cette requête:

 SELECT user,host,db from mysql.db;

Lors de l'installation de mysql, vous verrez deux lignes qui donnent un accès complet à toute base de données nommée 'test' ou dont les 5 premiers caractères sont 'test_'.

Pourquoi c'est un problème ???

Essayez d'exécuter cette commande:

$ mysql -u'' -Dtest

Vous aurez connecté la base de données de test sans mot de passe.

Maintenant, créez une table et chargez-la avec une ligne:

CREATE TABLE mytable (a int);
INSERT INTO mytable VALUES (1);

OK, gros problème. Pourriez-vous doubler cette table en taille 30 fois ???

INSERT INTO mytable SELECT * FROM mytable;
INSERT INTO mytable SELECT * FROM mytable;
... (30 times)
INSERT INTO mytable SELECT * FROM mytable;

Qu'est ce que tu obtiens ?? Une table avec 1 073 741 824 lignes. Facilement, 4 Go +.

Imaginez créer une table de n'importe quelle taille. Que diriez-vous de créer un tas de tables dans la base de données de test et d'y accéder librement à volonté?

La meilleure chose que vous puissiez faire dans ces circonstances est d'exécuter cette requête:

DELETE FROM mysql.db;

et redémarrez mysql. Ensuite, ces trois comptes seront correctement rendus inopérants.

Essaie !!!

MISE À JOUR 2011-09-12 10:00 EDT

Cette suppression:

DELETE FROM mysql.db;
FLUSH PRIVILEGES;

est exactement ce dont vous avez besoin pour une installation initiale. Cependant, si vous avez déjà des utilisateurs, vous pouvez exécuter ceci à la place:

DELETE FROM mysql.db WHERE db IN ('test','test_%');
FLUSH PRIVILEGES;

Cela supprimera les deux autorisations DB spécifiques.

Comme je l'ai mentionné dans ma réponse, les trois autorisations sont très dangereuses pour les bases de données de test. L'exécution de cette suppression supprimera ces comptes pour avoir tous les droits de tester les bases de données.

RolandoMySQLDBA
la source
Merci pour l'explication, mais SUPPRIMER DE mysql.db supprimera-t-il autre chose qu'une partie de ces 3 utilisateurs? Je ne veux pas supprimer de données / privilèges en dehors de ces 3
Chris
@Chris - J'ai mis à jour ma réponse il y a 3 heures pour répondre à votre commentaire.
RolandoMySQLDBA
-1

Le danger de conserver ces comptes anonymes a déjà été très bien expliqué.

Le manuel fournit une liste de contrôle complète des étapes à suivre pour « sécuriser les comptes MySQL initiaux ».

En particulier, la section «Attribuer des mots de passe de compte anonymes» conseille de supprimer ces comptes.

De plus, le chapitre "Sécurisation des bases de données de test" conseille:

Par défaut, le mysql.dbtableau contient des lignes qui permettent à tout utilisateur d'accéder à la testbase de données et à d'autres bases de données dont le nom commence par test_. (...) Cela signifie que ces bases de données peuvent être utilisées même par des comptes qui, autrement, ne possèdent aucun privilège. Si vous souhaitez supprimer tout accès utilisateur aux bases de données de test, procédez comme suit:

mysql> DELETE FROM mysql.db WHERE Db LIKE 'test%';
mysql> FLUSH PRIVILEGES;

(...) Avec la modification précédente, seuls les utilisateurs qui ont des privilèges de base de données globaux ou des privilèges accordés explicitement pour la base de données de test peuvent l'utiliser.

En particulier, sur les systèmes non Windows, il est recommandé d'exécuter le mysql_secure_installationscript. Le programme d'installation de Windows, je crois, propose plusieurs profils d'installation. Certains d'entre eux désactiveront automatiquement les paramètres non sécurisés. Sinon, la liste de contrôle devra être exécutée manuellement.

Des précautions doivent être prises avec des installateurs tiers tels que WAMP. Les autorisations par défaut indiquées dans le manuel officiel de MySQL peuvent ne pas toujours s'appliquer à ces installations personnalisées (comme dans "en dehors du cadre du manuel). Bien sûr, pour un serveur de production, les installations WAMP et autres doivent être évitées à tout prix .

RandomSeed
la source
pourquoi le downvote sur cette réponse?
user12345