是否应该授予开发人员查询(SELECT
/只读)生产数据库的权限?我以前工作的地方,开发团队有db_datareader
角色;我现在工作的地方,开发团队甚至无法连接到生产实例。
其中一个测试实例是每周一次从生产备份恢复的生产副本,因此开发人员实际查看数据没有任何问题。
不允许开发人员查询生产有什么好的理由(只是不希望他们有权读取敏感数据)?
是否应该授予开发人员查询(SELECT
/只读)生产数据库的权限?我以前工作的地方,开发团队有db_datareader
角色;我现在工作的地方,开发团队甚至无法连接到生产实例。
其中一个测试实例是每周一次从生产备份恢复的生产副本,因此开发人员实际查看数据没有任何问题。
不允许开发人员查询生产有什么好的理由(只是不希望他们有权读取敏感数据)?
这实际上取决于开发人员是否有任何支持责任。如果他们需要三线支持,那么他们可能需要查看生产数据库来执行此操作。
一般来说,在生产服务器上做任何事情都是一个坏主意,除非真的有必要在那里做。
对于大多数开发目的,生产数据库的镜像或快照就足够了,并且可能比实时生产数据库更好。如果您正在做任何涉及集成的事情,那么您将需要稳定的数据库环境,您可以在其中控制其中的内容。任何涉及和解的事情也需要能够查看一个受控时间点。
如果问题是您没有生产镜像环境或任何方法为您的开发人员在某处放置生产数据的副本,那么这是一个稍微不同的问题。在这种情况下,您的开发人员确实需要至少一个镜像环境。如果您看不到数据中的问题所在,那么很难对其进行故障排除。
不。
由于以下原因,开发人员不应访问生产数据库系统:
可用性和性能:拥有数据库的只读权限并非无害。写得不好的查询可以:
安全性:您的生产数据库可能包含敏感信息,例如:
只有绝对需要访问此信息的人才能拥有它。在组织良好的公司中,开发人员不在这些人中。此外,如果您的公司的开发人员可以使用这些数据访问生产系统,您的公司将无法遵守 PCI 和 SOX。
原因很明显。开发人员的开发工作在上线之前要经过很多人的努力。如何阻止具有直接生产访问权限的恶意开发人员窃取您的生产数据或使您的实时数据库瘫痪?
“但这也适用于 DBA!他们可以做到!” 确切地。您希望负责任地尽可能少的超级用户。
是的。
开发人员应该有权访问生产系统。
在我的公司,我们有四个团队负责处理生产数据库。他们是:
当您在这些其他组中存在某些缺陷时,授予您的开发人员生产访问权限是适当的。
例如:
性能将是一个重要原因。
仅仅因为他们不能更改数据并不意味着他们不能影响服务器。写得不好的查询可能会使生产环境崩溃,并可能导致其他问题(如 tempdb 溢出):
这是灾难的秘诀。请注意,这是一个带有 order by 的笛卡尔积,这意味着它将在 tempDB 中排序。
原则是“最小特权”和“需要知道”:开发者是否通过了这个测试?
尤其是当审计员或萨班斯-奥克斯利法案来敲门时。
然后,我的下一个假设:开发人员是愚蠢的。因此,如果他们确实需要 3 线支持的发言权,那么谁需要呢?网络猴子通常不会,但如果期望它们支持数据库类型,则可以。
那么,是否需要永久访问?他们可以使用需要注销的 SQL 登录或备用 Windows 帐户进行“打破玻璃”访问。在我们的案例中,是数据所有者(希望是一些精通技术的业务人员)和 IT 经理来批准它。
我已经看到开发人员在生产环境中测试或运行查询并因为无知而将其取消。话虽如此,开发人员应该为自己的行为负责:如果他们确实关闭了服务器,他们应该遭受相应的损失。发生一次事件后,我让某人降职...
当然,这些假设是一家规模合理的商店。人们戴的帽子越多,你的职责分离就越少
此外,是否存在开发人员可以针对最近数据运行查询的环境?在我的最后一家商店,prod 每天晚上都会恢复到测试服务器以提供此功能。
我认为答案是,就像 IT 的许多事情一样,“这取决于”。
包含大量敏感公司和客户信息的大型 ERP 数据库?可能不是(出于安全和性能原因)。
一个部门的 5 MB 数据库,带有一个 Access 前端,用于跟踪对甜甜圈和披萨基金的贡献?至少对于只读访问不会有很大的不同。
当然,第一个示例比第二个示例更常见,但是如果您负责制定这些类型的政策决策,则应该注意这些差异。但另一方面,令人惊讶的是,一个 5 MB 的甜甜圈和披萨基金数据库能够以多快的速度逐渐扩大到 50 GB 的零件编号/客户信用卡号/谁知道什么-如果您允许,则为其他数据库。
在通常的 24/7 OLTP 环境中,不应允许普通开发人员参与生产。时期!如果不时出现特定原因,则可以根据请求授予权限。但通常情况下没有。
我已经看到了很多原因:
从一个大表中选择 * 导致:
读取敏感数据(开发人员不应访问信用卡信息……或任何用户个人详细信息);
我敢肯定还有更多的原因。
需要考虑的几个项目
更小的资金需要更少的流程,需要更快的开发流程。
更大的美元需要更多的流程,需要更严格的开发实践标准。
使你的做法适应你正在做的事情。
我在一家非常大的公司担任开发人员。我们所有将提供任何类型支持的开发人员(基本上所有人)都可以访问相关的生产数据库。我只能代表我的特定团队发言,但我会告诉你为什么我们可以访问。
性能是一个问题。我们确实有开发人员导致减速。然而,这些都是孤立的实例,而且我们的 SQL 如此受性能驱动,以至于我们的开发人员很少不了解他们的查询的影响。
要问这个问题,必须假设他们目前没有访问权限。如果一个组织正在开发软件并且这是为了解决客户问题并且客户提供了他们的数据库副本,那么“是”。否则,我会主张让开发人员远离生产环境,并为他们的研究需求创建替代环境。一旦牙膏从管子里出来,就很难再放回去了。