我正在寻找内部Web应用程序到数据库层的端到端身份验证的最佳实践。
我见过的最常见的情况是使用单个SQL帐户,其权限设置为应用程序所需的权限。所有应用程序调用都使用此帐户。然后,当人们需要通过查询工具访问数据库时,或者使用查询访问创建一个单独的组,并且人们可以访问该组。
我看到的另一个场景是使用完整的Windows身份验证端到端。因此,用户自己被添加到具有所有权限集的组中,以便用户能够在应用程序的参数之外更新和更改。这通常涉及将人员保护到适当的存储过程,因此他们不会直接更新表。
第一种情况似乎相对容易维护,但如果应用程序中存在安全漏洞则会引起关注,那么整个数据库都会受到损害。
第二种情况似乎更安全,但在数据库上存储过程中需要很多业务逻辑时却存在相反的问题。这似乎限制了一些非常酷的技术如Nhibernate和LINQ的使用。然而,在人们可以以多种不同方式使用数据的这个时代,我们无法预见,例如混搭等是最好的方法。
答案 0 :(得分:2)
如果他们希望自动完成部分工作,并且他们可以显示他们具备必要的知识,那么请继续,授予他们的域帐户访问后端的权限。这样他们通过他们的小VBA自动化做的任何事情都与他们的帐户有关,而且你知道在数据被软管时要去看谁。
我的基本观点是数据库是应用程序的众所周知的圣杯。你想要尽可能少的手指在那个特定的馅饼。
作为一名顾问,每当我听到有人允许普通用户进入数据库时,我的眼睛就会亮起来,因为我知道当我被要求修复它时,它最终将成为我的一大笔薪水。
答案 1 :(得分:1)
就个人而言,我不希望数据库中有正常的最终用户。对于Intranet应用程序(尤其是驻留在域中的应用程序),我将为数据库的应用程序访问提供一个帐户,该帐户仅具有应用程序运行所需的权限。
然后可以通过用户的域帐户控制对应用程序的访问(关闭IIS中的匿名访问等)。
IF 用户需要并且可以证明直接访问数据库,然后他们的域帐户将获得对数据库的访问权限,并且他们可以登录到DBMS使用适当的工具。
答案 2 :(得分:0)
过去一年,我一直负责开发多个内部网络应用程序。
我们的解决方案是使用Windows身份验证(Active Directory或LDAP)。
我们的目的仅仅是允许使用现有公司ID /密码进行简单登录。我们还希望确保现有部门仍然负责验证和管理访问权限。
虽然我无法回答有关Nhibernate或LINQ的论点,但除非你有一个特定的杀手级功能,否则这些东西可以实现,Active Directory或LDAP很简单,可以实现和维护,值得尝试。
答案 3 :(得分:0)
我想这里暗示的另一条路径是您可以通过服务打开应用程序,然后通过组保护这些服务,并且仍然将用户与数据库分开。
然后通过委派,您可以允许各部门根据Jonathan的帖子通过群组控制对自己帐户的访问。
答案 4 :(得分:0)