将SQL登录作为参数传递

3

我对 MS 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个回答

1

非常感谢您的快速回复!您能告诉我如何正确处理DDL语句以使其免受注入攻击吗? - Stutz
@Stutz 在将用户名和密码放入 SQL 之前,您应该对其进行非常严格的验证,或者拥有一个白名单集合,其中包含有效的用户名和密码,以避免 SQL 注入攻击。 - Soner Gönül
再次感谢!你非常有帮助!:) 我本来希望有一些内置工具可以在C#中验证它。唉,看来我必须手动完成了! - Stutz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接