2014-07-22 48 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