我需要使用从用户界面传入的凭据名称、身份和密码在 .NET 中创建 CREATE CREDENTIAL 语句。一个天真的实现看起来像这样(请原谅 VB):
Dim cmd As SqlClient.SqlCommand = c.CreateCommand
cmd.CommandText = "CREATE CREDENTIAL [" & credentialName & "] WITH IDENTITY = N'" & identityName & "', SECRET = N'" & password & "'"
它可以工作,但它容易受到 SQL 注入的攻击。我尝试使用这样的参数:
cmd.CommandText = "CREATE CREDENTIAL [@CREDENTIALNAME] WITH IDENTITY = @IDENTITYNAME, SECRET = @PASSWORD"
cmd.Parameters.AddWithValue("@CREDENTIALNAME", "myCred")
cmd.Parameters.AddWithValue("@IDENTITYNAME", "Tyler")
cmd.Parameters.AddWithValue("@PASSWORD", "SecretPassword")
但我在“@IDENTITYNAME”附近收到错误语法错误。我尝试了不同的括号组合/没有括号,但没有任何效果。