2010-08-23 6 views
4

J'ai un programme C# avec lequel je veux créer dynamiquement des bases de données. Bien que seuls les utilisateurs privilégiés utiliseront cette application, je souhaite suivre les bonnes pratiques en matière de sécurité. Comment vais-je faire cela? Je ne pense pas que je puisse utiliser une requête paramétrée dans ce cas puisque je ne veux pas passer une chaîne, je veux passer un identifiant.Comment créer en toute sécurité une base de données mysql en C#

est ici comme peu sûr que j'ai là maintenant comme un espace réservé:

using (MySqlConnection connection = new MySqlConnection(connectionString)) 
     using (MySqlCommand command = connection.CreateCommand()) 
     { 
      connection.Open(); 
      command.CommandText = "DROP SCHEMA IF EXISTS " + schema; 
      command.ExecuteNonQuery(); 
      command.CommandText = "CREATE SCHEMA " + schema; 
      command.ExecuteNonQuery(); 
     } 

Toutes les idées sur ce sujet? Il suffit d'exécuter une expression régulière sur le schéma pour vérifier qu'il s'agit d'un nom valide.

+0

pourriez-vous s'il vous plaît poster votre chaîne de connexion? pour référence – Ramakrishnan

+0

Non. La chaîne de connexion se connecte à la base de données. Je n'ai aucun problème avec le code ci-dessus. Je demande simplement s'il peut y avoir un meilleur moyen. –

Répondre

0

(ne contient pas d'espaces, de deux points, etc.) Je ne suis pas sûr si vous pouvez ou ne pouvez pas utiliser des requêtes paramétrées dans ce cas, mais si vous le faites, il échouera à créer une base de données appelée utilisateurs TRANCATE TABLE; de toute façon :)

+0

Donc, votre suggestion est simplement d'être très prudent? Je suppose que ça marcherait. J'espérais qu'il y avait une façon standard de faire les choses. –

+0

ouais, même chose avec n'importe quelle entrée utilisateur, validez-le par rapport à un ensemble de règles pour vous assurer qu'il est valide. –

0

Je ne sais pas pourquoi vous voulez créer des bases de données dynamiquement, mais je pense que la manière correcte de le faire n'est pas de générer dynamiquement des bases de données.

La seule exception que je peux penser est si vous étiez en train de créer votre propre système de gestion de base de données. Si c'est le cas, vous pourriez peut-être regarder le code source d'un gestionnaire de base de données MySQL open source, comme phpMyAdmin. (Je n'en connais pas pour Net.)

+0

La raison pour laquelle je veux créer dynamiquement une base de données est parce que j'écris une application multi-locataire et je veux permettre à l'administrateur de l'application de pouvoir provisionner un nouveau client à la volée sans mon intervention. Cela étant dit, avez-vous un meilleur moyen que la création dynamique de la base de données à la demande? –

1

Vous pouvez utiliser le délimiteur backtick pour vous assurer que les chaînes sont correctement citées et vous assurer que tout ce qui est entré par l'utilisateur est utilisé comme un identificateur littéral.

Voir: http://dev.mysql.com/doc/refman/5.0/en/identifiers.html et Using backticks around field names

De cette façon, la commande qui est transmis au serveur ressemblerait à ceci: « DROP SCHEMA IF EXISTS foo » qui tolérera en utilisant des mots réservés et d'autres valeurs de chaîne incorrectes comme des identificateurs.

Questions connexes