簡體   English   中英

如何在C#中安全地創建mysql數據庫

[英]How do I securely create a mysql database in C#

我有一個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();
        }

有什么想法嗎?

您可以使用反引號分隔符來確保正確引用字符串,並確保將用戶輸入的內容用作文字標識符。

請參閱: http//dev.mysql.com/doc/refman/5.0/en/identifiers.html使用字段名稱周圍的反引號

這樣,傳遞給服務器的命令看起來像:“DROP SCHEMA IF EXISTS foo ”,它將容忍使用保留字和其他不正確的字符串值作為標識符。

只需針對模式運行正則表達式以驗證它是否是有效名稱? (不包含空格,冒號等)。 在這種情況下,我不確定您是否可以使用參數化查詢,但如果這樣做,則無法創建名為TRANCATE TABLE的數據庫用戶; 無論如何:)

我不知道你為什么要動態創建數據庫,但我認為這樣做的正確方法不是動態生成數據庫。

我能想到的唯一例外是你是否在創建自己的數據庫管理系統。 如果是這種情況,也許您可​​以查看一些開源MySQL數據庫管理器的源代碼,如phpMyAdmin。 (我不知道.Net。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM