如何在C#中安全地创建mysql数据库

时间:2010-08-23 20:35:26

标签: c# mysql security

我有一个C#程序,我想动态创建数据库。虽然只有特权用户才会使用此应用程序,但我希望明智地遵循最佳实践。我该怎么做呢?我认为在这种情况下我不能使用参数化查询,因为我不想传入字符串,我想传入一个标识符。

这是我现在作为占位符进入的不安全方式:

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

有关于此的任何想法吗?

3 个答案:

答案 0 :(得分:1)

您可以使用反引号分隔符来确保正确引用字符串,并确保将用户输入的内容用作文字标识符。

请参阅:http://dev.mysql.com/doc/refman/5.0/en/identifiers.htmlUsing backticks around field names

这样传递给服务器的命令看起来像:“DROP SCHEMA IF EXISTS foo”,它将容忍使用保留字和其他不正确的字符串值作为标识符。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

我能想到的唯一例外是你是否在创建自己的数据库管理系统。如果是这种情况,也许您可​​以查看一些开源MySQL数据库管理器的源代码,如phpMyAdmin。 (我不知道.Net的任何内容。)