存储过程是否有助于消除 SQL 注入/存储过程相对于应用程序中的普通 SQL 语句有哪些优势?

2024-01-09

我对 SQL 世界还很陌生。这是我的问题:

  • 与应用程序中的普通 SQL 语句相比,存储过程有哪些优点?
  • 存储过程有助于消除 SQL 注入吗?
  • 在 Microsoft SQL Server 中,它称为存储过程。在 Oracle、MySQL、DB2 等中怎么样?

谢谢你的解释。


仅存储过程directly如果您以参数化方式调用它们,则可以防止 SQL 注入。如果您的应用程序中仍然有一个带有过程名称的字符串,并将用户输入的参数连接到代码中的该字符串,您仍然会遇到麻烦。

然而,当使用只,存储过程允许您禁用除 EXEC 命令之外的所有内容的权限,从而添加一些额外的保护。除此之外,参数化查询/准备语句通常由服务器缓存,因此几乎在每个方面都像存储过程一样。

尽管如此,存储过程对于大型企业来说有两大优势:

  • 它们允许您为数据库定义应用程序接口,以便可以在多个应用程序之间共享系统,而不必在这些应用程序中重复逻辑。
  • 他们将 sql 代码移至数据库,在那里您可以轻松地让经验丰富的 DBA 调整、更新或以其他方式维护它,而不是经常不知道自己在使用数据库代码做什么的应用程序开发人员。

当然,这些优势并非没有代价:

  • 跟踪源代码控制的变化更加困难
  • 数据库代码与使用它的代码相距甚远
  • 用于管理许多存储过程的开发人员工具并不理想(如果您曾经在 Management Studio 中打开存储过程文件夹来查找数据库的 200 个过程,您就知道我在这里所说的是什么)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

存储过程是否有助于消除 SQL 注入/存储过程相对于应用程序中的普通 SQL 语句有哪些优势? 的相关文章

  • 获取一组记录之间的时间差

    我有一个具有以下结构的表 ID ActivityTime Status 19 2013 08 23 14 52 1 19 2013 08 23 14 50 1 19 2013 08 23 14 45 2 19 2013 08 23 14 3
  • 什么会导致 Oracle ROWID 更改?

    AFAIK Oracle 中的 ROWID 表示相应数据文件中记录的物理位置 在什么情况下记录的ROWID可能会改变 我所知道的一个是分区表上的更新 它将记录 移动 到另一个分区 还有其他情况吗 我们的大多数数据库都是 Oracle 10
  • 如何在单个查询中搜索 RealmObject 的 RealmList 字段

    假设我有一堂课 public class Company extends RealmObject private String companyId private RealmList
  • VS 13/VS 15 - 无法导入 SQL 片段

    我想在中创建 SQL 片段VS2013 and VS2015 我不知道为什么 但我在导入时遇到错误 在两个 VS 中 C sql snippet Missing or unspecified Language attribute 我的片段
  • 在 SQL Server 中通过标准差消除异常值

    我试图通过标准差消除 SQL Server 2008 中的异常值 我只想要特定列中包含该列平均值的 1 标准差范围内的值的记录 我怎样才能做到这一点 如果您假设事件呈钟形曲线分布 则只有 68 的值与平均值相差 1 个标准差以内 95 的值
  • 如何在Oracle中从表中选择列,*?

    我正在创建很多脚本 有时为了检查表是否根据我的需要进行更新 我会即时编写几个 SELECT 语句 在 SQL SERVER 中你可以这样写 SELECT Column1 FROM MY TABLE 出于可见性原因 这很有用 但是这似乎在 O
  • 具有多个主键的 SQLAlchemy 不会自动设置任何

    我有一个简单的表 class test Base tablename test id Column Integer primary key True title Column String def init self title self
  • 计算包含字母/数字的行数

    我想要实现的目标很简单 但是解释起来有点困难 我不知道在 postgres 中这是否真的可能 我处于相当基础的水平 SELECT FROM WHERE LEFT JOIN ON HAVING 等等基本的东西 我正在尝试计算包含特定字母 数字
  • 按原样将 SQL 保存到 YAML

    我想以我自己的格式将 SQL 保存到 YAML 文件 如下所示 1 sql SELECT DISTINCT p id product p price AS price sp reduction AS discount FROM 我使用 YA
  • 我应该定义索引(A)和索引(B),还是索引(A,B),或者两者都定义?

    在我的表中 我有两个密切相关的列 A 和 B 我应该考虑哪些因素来决定是否创建 索引 A 和索引 B 索引 A B 以上两者 如果我 仅使用类似的查询where A 5 and B 10 并且从不喜欢where A 5 也可以使用类似的查询
  • 验证 sql/oracle 中的电子邮件/邮政编码字段

    对于以下方面的一些建议将不胜感激 是否可以通过 oracle 中的 sql 中的某种检查约束来验证电子邮件和邮政编码字段 或者我怀疑 pl sql 带有正则表达式的这种事情 Thanks 这是电子邮件地址的正则表达式语法 包括引号 a zA
  • 拉拉维尔; “SQLSTATE[HY000] [2002] 连接被拒绝”

    我在 OSX 主机上设置了 homestead 2 0 并使用 Sequel Pro 我可以进行迁移并确认数据已在Sequel Pro中迁移 因此看起来数据库连接没有问题 但是 一旦我尝试从 Laravel 4 2 应用程序获取数据 它就无
  • 为 java 项目创建安装

    我创建了一个 java 项目 它使用数据库来检索 编辑和保存数据 我使用 Netbeans 完成了该项目 现在我想在该项目之外创建一个安装 为此 我想包含与项目一起安装的数据库 我用来连接数据库的代码是 Class forName com
  • 使用转义换行符和回车符取消转义字符串

    我正在尝试编写一个 PLPGSQL 函数来混淆 审查 编辑文本 Obfuscate a body of text by replacing lowercase letters and numbers with symbols CREATE
  • SQL Server 大小写/排序规则问题

    今天我在客户数据库中遇到了一个奇怪的情况 SQL Server 2005 数据库排序规则不区分大小写 因此我可以使用任何大小写编写 SQL 查询 没有任何问题 除了一个 一张特定表中的一个特定列称为 DeadZone 如果我这样查询 从表名
  • 如何将彼此“接近”的纬度/经度点分组?

    我有一个用户提交的纬度 经度点的数据库 并且正在尝试将 接近 点分组在一起 接近 是相对的 但目前看来约为 500 英尺 起初 我似乎只能按前 3 个小数位具有相同纬度 经度的行进行分组 大约是一个 300x300 的盒子 了解当您远离赤道
  • 打印表数据mysql php

    我在尝试打印表格的一些数据时遇到问题 我是 php mysql 的新手 但我认为我的代码是正确的 这里是 h1 Lista de usu rios h1
  • 如何将 sql 数据输出到 QCalendarWidget

    我希望能够在日历小部件上突出显示 SQL 数据库中的一天 就像启动程序时突出显示当前日期一样 在我的示例中 它是红色突出显示 我想要发生的是 当用户按下突出显示的日期时 数据库中日期旁边的文本将显示在日历下方的标签上 这是我使用 QT De
  • nvarchar 值“3001822585”的转换溢出了 int 列

    我使用以下方法将 Excel 文件导入到 SQL Server Excel 文件将所有值作为字符串 我可以导入文件 除了Barcode SalePrice and Price2 我收到错误 nvarchar 值 3001822585 条形码
  • Riak 在 MapReduce 查询中失败。使用哪种配置?

    我正在与 riak riak js 结合开发一个 nodejs 应用程序 并遇到以下问题 运行此请求 db mapreduce add logs run 正确返回存储在存储桶日志中的所有 155 000 个项目及其 ID logs 1GXt

随机推荐

  • jQuery() 在 jQuery.parseHTML() 结果中找不到元素

    我正在使用 QUnit 编写测试并使用 ajax 从本地运行的开发站点中提取 HTML 进行一些测试 add elements function location selector ajax location async false don
  • 在单页应用程序中创建临时 URL

    在我的基于反应的单页面应用程序中 我的页面分为两个窗格 左窗格 过滤器面板 右窗格 网格 包含通过应用过滤器的数据的表 总之 我有一个看起来与 amazon com 非常相似的应用程序 默认情况下 当用户在浏览器中点击应用程序的根端点 时
  • 删除断开连接 socket.io 上的对象

    我正在使用 Nodejs 和 Socket io 当客户端连接时 会创建新的 JavaScript 对象 这些物体会永远存在吗 当客户端断开连接时是否应该删除或删除它们 甚至可以移除一个物体吗 我知道删除是行不通的 谢谢 我想这更像是一个一
  • Django url templatetag (但不是 reverse() )错误:渲染时捕获 NoReverseMatch

    我正在尝试使用 url 模板标签 url all labs map 但是当我查看该页面时 我收到此错误 Caught NoReverseMatch while rendering Reverse for all labs map with
  • SQL Server 2016 时间戳数据类型

    我有以下问题 我正在使用一种归档软件 将其数据导出到 MS SQL 数据库 其中一列被指定为 Timestamp S 代表 unix 时间 它是一个 32 位整数 该数据库需要通过不同的报告软件进行查询 问题是报告软件要求其条目有一个名为
  • 如何通过代码获取android中的默认设备辅助应用程序?

    我的手机安装了两个语音搜索 Google 应用程序和 S voice 应用程序 默认应用程序是 S voice 应用程序 如下图所示 我的问题是 我们如何在Android 6 0中使用编程方式获得默认的语音应用程序 先感谢您 这就是我所做的
  • 中等信任文件 I/O 权限

    根据这个关于中等信任度的 MSDN 文章 http msdn microsoft com en us library ff648344 aspx paght000020 mediumtrustsummary 在中等信任度下 文件IO权限受到
  • 在 C++ 中,编写在 main() 之前执行的代码是否是一种好的形式?

    全局声明的类的构造函数在进入 main 之前被调用 虽然这可能会让代码的新读者感到困惑 因为这种情况很少发生 但这一定是一个坏主意吗 它不是一定这是一个坏主意 但通常是的 首先 它是全局数据 而全局数据通常是一件坏事 你拥有的全局状态越多
  • PDE Headless 构建的目标平台不起作用

    我目前正在尝试让我的无头 pde 构建工作 但我陷入了一个我不知道如何继续的点 问题是如何定义相关的目标平台来编译插件 我有一个包含以下调用的 build bat 全部在一行中 java jar D target eclipse plugi
  • asp.net mvc 2 向导

    有人有 ASP NET MVC 2 中向导控件的一些代码的链接吗 最好不使用会话 我想保留步骤之间的所有值
  • 将 Javascript 添加到自定义语言 - ACE 编辑器

    我正在使用 ACE 编辑器来使用 JSON 作为基础的自定义元语言 但我想在用户输入类似内容时添加Javascript 自定义 函数 参数 javascript 代码 这个想法是使用 JS 已经使用的样式来突出显示 javascript 代
  • 有AES加密解密的cocoa源代码吗?

    我正在寻找一些关于 AES 加密的可可代码 并且我做了一些谷歌搜索 我发现这个非常有用的链接 http iphonedevelopment blogspot com 2009 02 strong encryption for cocoa c
  • 为什么 void{} 不存在? [复制]

    这个问题在这里已经有答案了 我想知道为什么void 是一个纯右值void but void 不存在 请参阅以下答案 https stackoverflow com a 37708167 293195 https stackoverflow
  • Spring-Hibernate 应用程序:非法访问:此 Web 应用程序实例已停止

    我正在以正确的方式处理连接 1 我在我的应用程序中使用 Hibernate 连接池 每当我从池中获得连接时 我都会在完成事务后返回池 2 我已监视数据库以检查连接 我将 空闲连接 时间设置为 60 秒 我发现没有连接对象运行时间超过 60
  • select2 在选择值时提醒所选选项

    在 select2 中 如何提醒为多重选择选择的选项 这是我在选择 select2 选项时触发的代码 这只会提醒已选择的值 不是我选择的选项 我也不能这样做 var test list val alert test 因为它只会提醒已经选择的
  • 通过CSS改变图像的颜色

    我正在尝试使用 css 将图像更改为红色 这就是我到目前为止所拥有的 img webkit filter invert 90 filter invert 90 https jsfiddle net md1 https jsfiddle ne
  • 使用远程身份验证进行单元测试

    我在我的应用程序使用 Django 的默认身份验证时编写了一套测试 但现在我添加了 Atlassian Crowd 作为身份验证方法 这些测试现在失败了 主要是因为当我想运行时 Crowd 服务器不存在我在家进行的测试 每个应用程序的 se
  • MySQL 生成嵌套 JSON 对象

    我正在尝试从 Many to many 关系生成嵌套 JSON 对象 我正在尝试找到下面的 JSON 模式 user id 151 user name Sam123 role desc Power User user id 152 user
  • 从媒体 id 获取 Instagram 帖子 url

    我有帖子media id在我手中 我想知道是否有办法从中创建有效的网址 例如 如果您手上有一个 Facebook 帖子 ID xxxx yyyy 您可以从中创建以下 url http facebook com http facebook c
  • 存储过程是否有助于消除 SQL 注入/存储过程相对于应用程序中的普通 SQL 语句有哪些优势?

    我对 SQL 世界还很陌生 这是我的问题 与应用程序中的普通 SQL 语句相比 存储过程有哪些优点 存储过程有助于消除 SQL 注入吗 在 Microsoft SQL Server 中 它称为存储过程 在 Oracle MySQL DB2