2014-07-22 80 views
3

我對MS SQL沒有太多經驗,所以如果這是一個非常愚蠢的問題,我很抱歉 - 但我無法在Intenet上獲得任何有關它的真實信息。將SQL登錄作爲參數傳遞

所以,我只是想創建一個SQL登錄名和SQL用戶爲登錄名和它去像:

SqlCommand CreateDatabaseUser = new SqlCommand("CREATE LOGIN @NewUserLogin " + 
               "WITH PASSWORD = '@NewUserPassword' " + 
               "CREATE USER @NewUserLogin FOR LOGIN @NewUserLogin", AddUserConnection); 
CreateDatabaseUser.Parameters.AddWithValue("@NewUserLogin", NewUserLoginTextbox.Text); 
CreateDatabaseUser.Parameters.AddWithValue("@NewUserPassword", PasswordTextbox.Text); 

AddUserConnection.Open(); 
CreateDatabaseUser.ExecuteNonQuery(); 

我得到一個錯誤說Incorrect syntax near '@NewUserLogin',但如果我這樣做不正確的,這樣的不安全的方式:

"CREATE LOGIN " + NewUserLoginTextbox.Text + 
" WITH PASSWORD = '" + PasswordTextbox.Text + "'" +              
" CREATE USER " + NewUserLoginTextbox.Text + " FOR LOGIN " + NewUserLoginTextbox.Text 

那麼它工作!

所以,我想弄清楚我在那裏做什麼工作。提前致謝!

回答

1

CREATE statemen t是Data Definition Language (DDL) statement

SqlCommand.Parameters都支持Data manipulation language操作不Data definition language操作。

數據操縱語言=

SELECT ... FROM ... WHERE ... 
INSERT INTO ... VALUES ... 
UPDATE ... SET ... WHERE ... 
DELETE FROM ... WHERE ... 

數據定義語言=

CREATE TABLE ... 
DROP TABLE ... ; 
ALTER TABLE ... ADD ... INTEGER; 

AFAIK,沒有辦法與參數註明。您需要將它們用作SQL的一部分。

+0

非常感謝您的快速回復!您能否告訴我,處理DDL語句以確保注射安全的正確方法是什麼? – Stutz

+0

@Stutz爲了避免SQL注入攻擊,您應該在將用戶名和密碼放入SQL之前對其進行非常嚴格的驗證,或者在白名單中添加一組有效的用戶名和密碼。 –

+0

再次感謝!你非常樂於助人! :)你,我希望有一些內置的工具來驗證它在C#!Welp,猜我必須手動做! – Stutz