2010-08-23 88 views
4

我有一个C#程序,我想动态创建数据库。尽管只有特权用户才会使用此应用程序,但我希望遵循最佳安全方面的明智做法。我如何去做这件事?我不认为我可以在这种情况下使用参数化查询,因为我不想传入一个字符串,我想传入一个标识符。如何安全地在C中创建一个MySQL数据库#

这里是不安全的方式我已经在那里了,现在作为一个占位符:

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(); 
     } 

在这个任何想法?

+0

可否请您发布您的连接字符串?供参考 – Ramakrishnan 2010-08-25 12:48:43

+0

否。连接字符串成功连接到数据库。我对上面的代码没有任何问题。我只是问是否有更好的方法。 – 2010-08-25 13:46:28

回答

0

只需针对模式运行正则表达式来验证它是一个有效的名称? (不包含空格,冒号等)。我不确定在这种情况下是否可以使用参数化查询,但如果这样做,它将无法创建名为TRANCATE TABLE用户的数据库;无论如何:)

+0

所以你的建议是要非常小心?我想这会起作用。我希望有一种行业标准的做事方式。 – 2010-08-25 01:49:08

+0

是的,与任何用户输入一样,按照一组规则进行验证以确保其有效。 – 2010-08-25 06:13:32

0

我不知道你为什么要动态创建数据库,但我认为这样做的正确方法不是动态生成数据库。

我能想到的唯一例外是如果你正在创建你自己的数据库管理系统。如果是这样的话,也许你可以看看一些开源MySQL数据库管理器的源代码,比如phpMyAdmin。 (我不知道任何.Net)

+0

我想动态创建数据库的原因是因为我正在编写一个多租户应用程序,我希望允许应用程序的管理员在没有我的干预的情况下即时提供新客户。话虽如此,除了根据请求动态创建数据库之外,还有更好的方法吗? – 2010-08-25 13:40:01