[英]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.