我们当前的 Intranet 环境有点过时了。当前堆栈具有针对 SQL 2000 数据库进行查询的 ASP.NET 1.1/2.0 应用程序。
为了角色安全,用户加入的服务器上有用户组(所以需要在测试和生产机器上加入组)。这些用户组被同步到 SQL 2000 本身的用户角色中。根据需要向角色授予对存储过程的执行权限,以防止任何访问冲突。
在 Web 应用程序级别,我们使用基本身份验证(针对我们的 Active Directory 进行身份验证)并打开身份模拟。到数据库的连接字符串使用集成安全性。这将创建一个环境,其中 Web 应用程序在用户登录时连接到数据库,这将对被调用的存储过程强制执行数据库安全性。它还允许我们使用典型的 User.IsInRole() 方法在应用程序本身内执行授权。
这有几个问题。首先是只有我们的服务器管理员才能访问机器上的用户组,因此更新角色安全性或添加其他用户不在应用程序管理员的控制范围内。此外,获得该角色的唯一方法是调用一个名为“xp_logininfo”的 SQL 过程,该过程在 SQL 2005 中被锁定。虽然我不知道全部细节,但我们的 DBA 告诉我们这个通用模型不起作用考虑到较新版本中模式的性质,SQL 2005 很好。
现在我们已经准备好更新我们的环境了。我们正在编写 .NET 3.5 应用程序以利用更多 AJAX,而 SQL Server 2005 是我们数据库的主要环境。我们正在寻求更新安全模型,以便为应用程序管理员提供更灵活的服务,并可能更多地利用 Active Directory。
我们还有一个担忧是给定用户很可能可以访问多个应用程序,因此拥有某种集中式解决方案是最佳选择,这样我们就可以在需要时轻松删除用户。
在这种环境中维护角色安全的最佳实践是什么?