根据用户对数据库的访问类型,你可能会寻找一个显著一场艰苦的战斗。你开始对中介分层额外的安全性之前,通过采取长期在深入了解您允许用户使用自己的凭据做什么开始:
- 用户是否需要数据库机器上的用户帐户?如果可能,删除它们
- 用户是否授予最小权限访问权限?使用您认为合适的任何机制尽可能多地删除用户[exec]权利。我在最后看到的一件事是存储了实际具有适当的执行权限的procs,并且用户只对proc具有exec权限。
- 您是否删除了用户权限来运行任何表更改命令?包括运行系统存储过程的能力。这可以大幅减少事故(意外和恶意)
- 用户是否可以直接访问原始业务数据?如果这样考虑将访问权限移入视图,并在表格上自行删除和删除用户权限。它也解决了一些维护难题
- 你有审计吗?表级别或自定义。
如果你觉得你有一个坚实的设计,那么你可以开始寻找包装你的数据库在一个经纪人/外观访问。请注意,这在性能,部署和安全性方面可能很昂贵,并且不是一件容易的事情。关于模式的一些建议是:
- 寻找到一个服务代理:WSO2例如,他们有其他可以用来隐藏关键业务应用程序(虽然其本意是要发布对它们的访问)提供缓存和代理服务。它可能会减少你的攻击面,但配置和管理很容易超过那里的任何收益。
- 您可以推出自己的经纪商服务(基于WCF或类似的),以确保您充分考虑到负载和预计的增长,但如果您真的想要这样做并非不可能或甚至无法实现并有时间正确地设计出来。
谢谢。我会考虑在DBMS和自己的安全性之间进行选择。如果我想要保护的数据库是第三方并且不时升级,我应该考虑哪些其他考虑因素。我的应用程序提供额外功能 – 2010-05-22 04:27:42
@Andrew Florko,安全真的是兔子洞。你可以花费你的余生(自然或其他方式)试图关闭洞并让你的应用程序变得难以理解。我想说,你应该好好看看你认为最有可能在你的应用中渗透的候选人(你已经提到了用户名/密码泄漏),并按照最高优先级和/或最有可能发生的顺序来处理它们。 – GrayWizardx 2010-05-22 17:42:10