上周,reddit 网 r/dotnet 区的网友 technolang 发帖:「你还在使用存储过程吗?」
我很好奇为什么 2024 年了我们还在使用存储过程。难道网络应用中没有一个业务层来处理所有事情吗?依赖 DBA 并在数据库层创建依赖关系似乎没有必要。另外,存储过程调试起来很麻烦。所以它有什么好处呢?
网友 xabrol 给出了非常用心的回答。
他说:
我不是说教,只是讲点事实。
我从事咨询行业,曾在银行和抵押贷款公司工作。我与数以百计的客户合作过,见过你能想象到的所有环境。大多数年收入超过十亿美元的大公司都有数据仓库,而应用程序开发者并没有太多的数据库访问权限。很多时候这很糟糕,但这是很多开发者不得不面对的现实。
我目前的一个客户根本不给任何访问权限,我们只能通过 RDP 虚拟桌面来使用他们的代码或系统;他们甚至不给我们配备笔记本电脑。我们必须构建和编写所有代码,通过虚拟桌面处理所有事务,而且不能复制粘贴到虚拟桌面;还必须详细记录每个开发者需要访问的电子表格、合理解释为什么开发者需要访问数据库或表格。我们团队中只有一个人能访问整个数据库。
大多数公司都不信任他们的开发者编写安全的代码。这是有道理的,因为每 10 个能写出基本的 20 页垃圾应用程序的开发者中,只有一个能产出有点用的东西。
他们也不冤枉。
我曾与开发者和企业家一起参加过扩充代码库的电话会议。开发者在电话中大谈他们的应用程序很好,为什么它可以拥有现有的访问权限,以及它有多么现代化和安全。然后我看了代码 – 我见过的最大的一堆烫手的垃圾。我发现了至少 6 个安全漏洞,它们公然允许我访问数据库或文件系统。
还有一次,有一个应用的应用池是以管理员身份运行的;他们有一个上传图片的文件上传功能,在那里我可以上传任何文件,甚至是可执行文件。这个网站是在 asp.net 网页表单上运行的,当时还是 2016 年。因此,你可以上传一个带有运行时脚本的 aspx 文件来运行 shell 命令,然后你可以通过上传路径浏览它,就像浏览普通的 aspx 页面一样,然后引擎就会渲染它并以管理员身份运行 shell 命令。
而且「超级安全」。他们的开发者也引以为豪。不过他们很快都被抓包,现在都不在那里工作了。
这就是为什么很多大公司都有超级严格的政策和环境,因为他们的开发者根本不知道自己在做什么。他们不知道如何正确设置安全的服务器环境、如何用正确的权限模式构建数据库,还把连接字符串的详细信息存储在应用程序设置文件中。而一群有权限获取的开发者可以看到这些连接字符串…
我可以说上一整天。
当你的公司每年赚 400 亿美元时,你必须保护自己免受最薄弱环节的影响。很多公司都喜欢外包,所以他们需要确保自己有一个安全的环境,在所有方面都是权限最低的。
db-master说:
有时候存储过程操作起来确实繁琐。怎样才能兼顾安全与操作的简明呢?
Bytebase 能为你解决 😼
💡 更多资讯,请关注 Bytebase 公号:Bytebase