内联网应用程序的数据库身份验证
我正在寻找针对内部Web应用程序到数据库层的端到端身份验证的最佳实践。
我看到的最常见的情况是使用单个SQL帐户,其权限设置为应用程序所需的权限。所有应用程序调用都使用该帐户。然后,当人们需要通过查询工具访问数据库时,或者使用查询访问权限创建了这样一个单独的组,并且人们被授予对该组的访问权限。
我看到的另一种情况是使用完整的Windows身份验证端到端。因此,将用户本身添加到已设置了所有权限的组中,以便用户能够在应用程序参数之外进行更新和更改。这通常涉及确保人员使用适当的存储过程,因此他们不会直接更新表。
第一种情况似乎相对容易维护,但是如果应用程序中存在安全漏洞,则会引起整个数据库的安全隐患。
第二种情况似乎更安全,但存在相反的问题,即数据库中的存储过程中必须包含大量业务逻辑。这似乎限制了某些非常酷的技术(如Nhibernate和LINQ)的使用。但是,在当今时代,人们可以以多种不同方式使用数据,我们无法预见,例如混搭等是最好的方法。
解决方案
回答
就个人而言,我不希望普通的最终用户进入数据库。对于Intranet应用程序(尤其是驻留在域中的应用程序),我将为应用程序访问数据库提供一个帐户,该帐户仅具有应用程序正常运行所需的那些权限。
然后,将通过用户的域帐户控制对应用程序的访问(在IIS中关闭匿名访问等)。
如果用户需要并且可以证明直接访问数据库的权限,则将为其域帐户授予对数据库的访问权限,并且他们可以使用适当的工具登录到DBMS。
回答
在过去的一年中,我负责开发多个内部Web应用程序。
我们的解决方案是使用Windows身份验证(Active Directory或者LDAP)。
我们的目的仅仅是允许使用现有的公司ID /密码进行简单的登录。我们还想确保现有部门仍然负责验证和管理访问权限。
尽管我无法回答有关Nhibernate或者LINQ的争论,但是除非我们具有这些功能可以实现的特定杀手级功能,否则Active Directory或者LDAP足够简单地实现和维护,值得尝试。
回答
Stephen将普通的最终用户排除在数据库之外是很好的选择,但是我想知道在当今时代,这么多经验丰富的计算机用户来自大学/学院是否是正确的道路。如果有人想自动化其工作的一部分,包括对数据库的VBA更新(我允许他们通过普通应用程序执行),那么我们将通过限制这种访问方式而失去收益。
我想这里暗示的另一条路径是,我们可以通过服务打开应用程序,然后通过组保护这些服务,并且仍然使用户与数据库分离。
然后,根据乔纳森(Jonathan)的职务,我们可以通过委派来允许部门控制通过组访问其自己的帐户的权限。
回答
我同意斯蒂芬·赖顿。域安全性是解决之道。如果我们想使用混搭而不是其他方式,则可以通过机器可读的RESTful接口公开数据库的某些部分。 SubSonic内置了一个。
回答
戴尔就是这样。如果要向这些用户提供对基础数据存储的访问,则可以通过服务进行访问。根据我的经验,是那些来自Uni / College的经验丰富的计算机用户造成的损失最大。俗话说,他们知道足够危险。
如果他们要自动执行部分工作,并且可以显示他们具有必不可少的知识,那么请继续,授予其域帐户对后端的访问权限。这样,他们通过其小型VBA自动化所做的任何事情都将与他们的帐户绑定在一起,并且我们确切地知道在清理数据后该去找谁。
我的基本观点是,数据库是应用程序众所周知的圣杯。我们想要在该特定饼图中尽可能少的手指。
作为一名顾问,每当我听到有人允许普通用户进入数据库时,我的眼睛就会亮起来,因为我知道当我接到要修理它的费用时,这对我来说最终将是一笔可观的报酬。