【问题标题】:Converting string to SQLCommand将字符串转换为 SQLCommand
【发布时间】:2014-01-08 20:27:36
【问题描述】:

我正在创建一个具有文本框的应用程序,用户可以在其中输入要针对 SQL Server 实例运行的命令。我已经导入了 System.Data.SqlClient 对象,这是我目前拥有的代码:

 Dim preSQLcmd As String = Me.txtPreSQL.Text
 Databasefn.preTestSQL(preSQLcmd)

Databasefn.preTestSQL 看起来像这样:

Sub preTestSQL(cmd As SqlCommand)
    con = New SqlConnection("Data Source=" & utilnamespace.sqlSvr & ";Database=" & utilnamespace.testDbName & ";integrated security=SSPI;")
    cmd.Connection.Open()
    cmd.ExecuteNonQuery()
    cmd.Connection.Close()
End Sub

我在这里缺少什么?

【问题讨论】:

  • 这听起来不安全。 Delete From tableName哦,没有更多数据了!
  • 对于这个应用程序的使用方式,这绝对没问题。它是测试系统的一部分,不管怎样,在测试运行后数据库都将被恢复。

标签: .net vb.net sqlcommand


【解决方案1】:

更改您的preTestSql 以接收带有 sql 命令文本的字符串,然后在过程中构建 SqlCommand

Sub preTestSQL(cmdText As String)
    using con = New SqlConnection("Data Source=" & utilnamespace.sqlSvr & ";Database=" & utilnamespace.testDbName & ";integrated security=SSPI;")
    using cmd = new SqlCommand(cmdText, con)
         con.Connection.Open()
         cmd.ExecuteNonQuery()
    End Using
    End Using
End Sub

说我应该问。 你确定这样做是明智的吗?

恶意用户可以使用类似的功能轻松破坏您的整个数据库。

例子:

 UPDATE PayRoll SET WeekWage = 1000  -- (no where condition??)
 DELETE FROM Employee 

【讨论】:

  • 是的,没关系。这是一个用途极其有限的应用程序,只能在我们的测试系统中的测试数据库中使用。该数据库绝不是生产的。不过我很欣赏这个想法。
  • 我肯定会考虑安全性,以防万一它以某种方式泄露给公司外部的人,以确保它不能用于针对某些随机数据库运行某些东西。跨度>
  • 我肯定会考虑应用程序周围的安全模型。感谢您的提问,定期重温这些东西总是好的。
猜你喜欢
  • 1970-01-01
  • 2011-02-02
  • 2019-10-10
  • 2019-01-05
  • 2012-05-06
  • 2015-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多