SQL Server安全性崩溃

作为一个城市的SQL Server数据库pipe理员,我已经工作了两年。

我被引入来支持现有的DBA,所以我慢慢地把所有的东西都拿进来,一直在努力工作,试图在组织中赢得信誉。 是时候处理最棘手和最重要的问题了:安全。

我们的主服务器是SQL 2005的故障转移群集。 它拥有166个数据库。 它为大多数应用程序提供了550个左右的应用程序池连接,因此可以轻松支持数千个用户。 我们还为公共网站提供相当数量的stream量。 供应商应用程序,内部应用程序,访问后端 – 与一些关键应用程序相当多种。

许多开发人员拥有生产权限 RFCstream程之外正在进行更改,我们不知道开发人员正在更改哪些数据。 他们也喜欢在系统的实现过程中拥有生产访问权限 – 我也想停下来。

有这么多的应用程序运行,任何理智的DBA会locking服务器

你将如何从一个开放的安全开发团队过渡到一个更严格的环境?

我正在制定一个紧急请求系统,让他们在有限的时间内访问他们的数据库。 这将使我们审计访问和ddl更改。 希望这不会被使用 – 因为这意味着我们没有回应一个页面。 它将使用HTTP,encryption的webconfig,屏幕上的login/密码(不是电子邮件),请求限制到每12小时3。 login时,我们也会被分页。

有关这种types的系统的任何警告?

我所看到的主要风险是,如果用户的ntlogin受到了损害,那么他们的数据库也是如此。 我们现在有这个漏洞,因为他们总是有权访问,但是永远不知道是否发生了。


编辑:开发和分期是强大的系统与8核心和8GB内存。 规划如何实施prd to stg复制机制,开发人员可以在其数据库不是大规模且不包含敏感信息的情况下运行。

pipe理是支持的。 如果我们能在紧急情况下保证他们的通行,他们最大的担心就是照顾好。 另一个问题可能是在实现过程中获得生产 – 我宁愿不给。 我们可以练习先行升级,并在上线期间进行testing和修复 – DBA将迁移到prd。

我一直在我公司工作。 实际上我发现大多数人比我想象的更容易接受,但有一些事情是关键:

  • 提醒他们这是为了防止事故的主要目的。 事故是每个人都可以涉及的事情。 几乎没有人认为他们会被黑客攻击,而内部黑客的谈论立即就将他们置于防御之中(“你不相信我?”)。
  • 快速响应请求,当他们遇到一个块。
  • 愿意和他们一起工作。 我们发现,我最初locking的一些东西是他们做好工作所需要的,如果他们稍微打开一些,就不会造成问题。
  • 始终如一。 你必须普遍适用这些政策。 如果可能的话,也将它们应用于自己。

我也一直试图以较小的增量来做到这一点,以减less破坏性。 例如:

  • 所有新数据库从一开始就具有限制性权限。 你不会错过你从未有过的。
  • 首先删除系统pipe理员和其他服务器级别的权限,如果他们目前有他们。 大多数人会同意他们不需要重新configuration服务器,并且消除了很多安全漏洞。 一旦他们看到他们能够生存下去,就为更多的紧缩政策设下了基础。
  • 一次收紧一个应用程序的数据库。 这使得它更容易pipe理,再加上你可以随时了解他们需要什么样的权利,使未来的紧缩更顺利。

祝你好运!

首先放置一个DDL触发器来选取发生的任何模式更改。 只需logging每个经过的DDL命令,看看谁和什么时候。

你可能会发现事情并不像看起来那么糟糕。 弄清楚谁正在把最大的变化推出去,并让他们上船。 之后,你应该能够把事情做得更好。

另外 – 把一个跟踪来拿起什么是从应用程序不是你的正确的应用程序运行。 查看跟踪中的ApplicationName和/或HostName字段。 这将帮助您获得专门查询的字段。 那么你应该能够找出谁经常跳入数据。

我总是先从监视这种情况开始。 尽快将其locking,但现在开始监控,以了解问题的严重程度。

这是一个认真的事业。 这些人可能是非常沉迷于自己的方式,这将需要上级的大力支持来改变。 他们已经有一个testing环境吗? 我假设他们这样做,但如果他们不这样做应该是第一步。 此外,确保它是鼻烟。 如果它变得越来越老,就会被迫使用它。 你需要做好准备,把他们放在其他方面,比如考试,以便在外交上让他们摆脱困境。

与领先的开发人员会面,并获得他们的生产访问的原因。 你们大概已经知道了。 然后删除/解决他们的原因。 我是一个拥有完整生产服务器的开发者团队之一,我知道我不应该拥有它。 到目前为止,我已经看到三位同事因SQL或自满而导致严重的中断。 “我们需要立即执行变更” – “写一个脚本,我会审查它,如果没有问题,就运行它”。 “我们需要现场数据” – “真的吗?还是昨晚的备份呢? “我需要testing这个,看看它是否有效” – “向新的虚拟testing服务器问好。”

到目前为止,我们已经发生了三起事故,而且我们相信我们会有更多的事情,因为我们的安全locking还有一段路要走。

你说你在一个城市工作,但是我不能确定你是政府雇员,合同公司还是你在哪个国家工作。

如果你想做这个改变(实际上,开发人员不应该永远不能访问实时环境(我是一个高级开发人员BTW)),那么你需要pipe理层的支持来让你的业余开发人员(即,生产数据库是为生产使用,而不是为了弄清楚为什么你的半驴代码不工作,通过运行随机查询“看看会发生什么”)

我强烈build议您检查一下是否适用于您的组织:

SOX(萨class斯 – 奥克斯利法案,适用于美国上市公司)
第198号法案(安大略省,通过CSA规则间接加拿大其他地区)
CLERP-9(澳大利亚)
J-SOX(日本)

所有这些都做同样的事情,确保向股东报告的财务尽可能没有欺诈。 其中一个要素是责任的分离 – 在IT中,这意味着开发人员不应直接访问生产数据的读取或写入。 所有操作都必须经过服务器pipe理员,并完成书面和签名的请求(implimentation表单),这些请求必须保留以用于审计目的。

在所有情况下,pipe理层都会很快到达你的身边 – 在SOX下,如果没有适当的“控制”, pipe理层将被追究责任(监禁时间!)。

你最大的担心是login应用程序login不适当的帐户,如DBA。 在关上门之前,您必须对您的连接进行审核。

要让开发人员closures生产SQL访问是非常困难的,所以尽可能使访问尽可能突出。 如果你有pipe理上的支持,外交不是最要紧的。 安全性和可靠性胜过所有。

如果你一定要好起来,让所有的开发人员坐下来,告诉他们会发生什么事情,紧急情况下的stream程是什么。 定期将生产数据备份。 他们可以安全地玩数据。

如果出现紧急情况,您可以随时将备份恢复到登台状态,他们可以编写所需的更改,testing并向您发送脚本。

我是一个开发人员,可以访问数据库。 运行更新语句并忘记where子句非常简单。

如果你不想这么苛刻的话,那么只读数据库的权利应该是一个很好的临时措施。

我不得不把它作为开发者扔在那里。

我恨你。

数据库pipe理员想要限制我们从事工作的事实是愚蠢的。 我们有自由的制度。 所以你locking我的帐户? 我所需要做的就是将生产连接string放在Visual Studio的debugging代码中,然后closures,我可以控制应用程序可以执行的任何操作。

这种限制开发人员从生产数据库提供任何安全的想法是愚蠢的信念。

现在作为一名开发人员,我build议不要试图强制他们完全脱离数据库(特别是在部署期间为了业务成本),而是采取一种策略来要求所有产生大量更新/删除/插入的脚本需要由db团队审查。

正如罗布所说,把所有的DDLlogging到数据库中,然后是否所有的开发者都会违反这个规则,向pipe理层报告,让他们处理这个问题。

你唯一需要保护数据库与开发人员是一个写得不好的连接语句,更新整个表,而不是它应该的100个logging,因为我们厌倦了写sql,因为我们不能等待一天的数据库不'再也不存在我们的生活了