c# - 使用一种方法运行类似的存储过程(将 StoredProcedure 名称作为方法参数传递)是否安全

标签 c# sql stored-procedures sql-server-2012

好的,所以我了解使用 SqlParameters 的重要性,这个问题可能看起来有点愚蠢,但我并不完全确定答案,并希望确保我做出正确的决定。

考虑这个简单的 C# 方法:

public static void MakeLinks (int tableOneId, List<int> tableTwoIds, string storedProcedureName)
{
    using (SqlConnection conn = new SqlConnection(<connection string>))
    {
        // Code Omitted

        using (SqlCommand cmd = new SqlCommand(storedProcedureName, conn)
        {
            cmd.CommandType = System.Data.CommandType.StoredProcedure;

            // SqlParameterCollection code omitted

            cmd.ExecuteNonQuery();
        }
    }
}

基本上,我有大量方法来链接各种表组合中的行。在每个表中,“TableOne”都有一个 Id,而“TableTwo”则有一组 Id。每个组合在数据库中都有一个相关的StoredProcedure,并且.NET代码极其重复。因此,我正在考虑使用上述方法,将所有 StoredProcedure 参数名称更新为相同(例如 @Id 而不是“@tableOneId”、“@tableTwoId”等),然后简单地将 StoredProcedure 的名称传递给方法并创建命令字符串如下:

string commandString = String.Format("[DatabaseName].[dbo].{0}", storedProcedureName);

因此,我的问题是,这仍然安全吗,或者是否有更好的方法来处理/执行此操作?

非常感谢您的想法和建议。

最佳答案

更改存储过程参数的名称会使其不再安全或降低安全性。人们可能会争辩说,获得对您数据库的访问权限的人可能会注意到这种模式 - 但随后精明的人会意识到,如果攻击者获得了对您数据库的这种访问权限,那么无论如何您都完蛋了。

如果你可以通过使参数名称通用来使你的代码更具可重用性 - 那么就去做吧,我说。它还半记录了这些存储过程执行相同种类的功能,并且我希望我不幸遇到的更多存储过程具有某种类型的命名可以信赖的约定!

关于c# - 使用一种方法运行类似的存储过程(将 StoredProcedure 名称作为方法参数传递)是否安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21996716/

相关文章:

c# - SQL Server 中数据更改时自动刷新应用程序

c# - 查询具有远程计算的相关实体计数的实体

sql - 是否可以在 S3 Select 中执行嵌套查询?

mysql 限制无法针对 1 个 id 执行多条记录

sql-server - 存储过程的输出参数

c# - 使用 VS2012 中的构建发布项目失败并显示 "Skipping unpublishable project"

c# - 用户控制按钮绑定(bind)不响应主视图模型上的中继命令

mysql - SQL 语法错误 - Haversine 公式

sql - 一行中多个表的值

mysql - 提供要从 mysql 结果中排除的用户主机对