构建安全的数据访问-身份验证(四)

当应用程序连接到 SQL Server 数据库时,可以在 Windows 身份验证或 SQL 身份验证之间进行选择。Windows 身份验证更安全。如果必须使用 SQL 身份验证(可能由于必须使用许多不同的帐户连接到数据库,并且希望避免调用 LogonUser),请执行其他几个步骤,以尽可能降低额外的风险。

注意 如果使用 LogonUser 创建模拟令牌,需要在 Microsoft Windows 2000 上具有功能强大的“作为操作系统的一部分工作”特权,因此应避免使用此方法。

考虑下面的建议:

•使用 Windows 身份验证。

•保护 SQL 身份验证的凭据。

•使用最小特权帐户进行连接。

使用 Windows 身份验证

Windows 身份验证不通过网络发送凭据。如果对 Web 应用程序使用 Windows 身份验证,请尽可能使用服务帐户或进程帐户(如 ASPNET 帐户)连接到数据库。Windows 和 SQL Server 都必须能够识别您在数据库服务器上使用的帐户。该帐户必须被授予 SQL Server 登录权限,而且需要具有与访问数据库相关的登录权限。

在使用 Windows 身份验证时,必须使用受信任连接。下面的代码片断显示了几个使用 Windows 身份验证的典型的连接字符串。

下例使用面向 SQL Server 的 ADO.NET 数据提供程序:

SqlConnection pubsConn = new SqlConnection(
"server=dbserver; database=pubs; Integrated Security=SSPI;");

下例使用面向 OLE DB 数据源的 ADO.NET 数据提供程序:

OleDbConnection pubsConn = new OleDbConnection(
"Provider=SQLOLEDB; Data Source=dbserver; Integrated Security=SSPI;" +
"Initial Catalog=northwind");
保护 SQL 身份验证的凭据

如果必须使用 SQL 身份验证,请确保凭据不以明文形式通过网络发送,并确保加密包含凭据的数据库连接字符串。

要使 SQL Server 能够自动加密通过网络发送的凭据,请在数据库服务器上安装服务器证书。也可以在 Web 服务器和数据库服务器之间使用 IPSec 加密通道,来确保进出数据库服务器的所有通信的安全。要确保连接字符串的安全,请使用 DPAPI。

使用最小特权帐户进行连接

应用程序应该通过使用最小特权帐户连接到数据库。如果您使用 Windows 身份验证进行连接,则从操作系统的角度看,Windows 帐户应该是最小特权帐户,而且该帐户应该具有有限的特权和对 Windows 资源的有限的访问能力。另外,无论您使用 Windows 身份验证还是 SQL 身份验证,相应的 SQL Server 登录都应该受到数据库中的权限的限制。

有关如何创建最小特权数据库帐户以及使用 Windows 身份验证将 ASP.NET Web 应用程序连接到远程数据库的选项的详细信息,请参阅模块 19 确保 ASP.NET 应用程序和 Web 服务的安全中的“数据访问”。

posted @ 2010-08-03 16:55  远大 光明  阅读(379)  评论(0编辑  收藏  举报