【发布时间】:2012-07-26 05:07:10
【问题描述】:
我在 ASP.net 应用程序中使用集成安全性,IIS 和 SQL Server 都托管在同一台运行 Windows Server 2008 R2 的服务器上。
是否可以允许用户通过网络访问应用程序并登录用户,但不允许他们直接或通过 SQL Server Management Studio 访问数据库?
我正在尝试保护数据库访问,因为我的应用程序将部署在客户所在地的客户服务器上。
这是我当前正在使用的连接字符串
<add connectionString="Server=.\sqlexpress;Database=DB89akwA;Integrated Security=true" name="LocalSqlServer" providerName="System.Data.SqlClient" />
<add connectionString="Server=.\sqlexpress;Database=DB89akwA;Integrated Security=true" name="MainAppConnectionString" providerName="System.Data.SqlClient" />
这是我目前使用的两个连接字符串,一个用于 ASP.net 身份验证,第二个用于我的应用程序。这两个字符串是相同的,属于同一个数据库。
有什么建议吗?
【问题讨论】:
-
如果用户可以访问 SQL Server 数据库,那么无论他们使用什么工具,他(或她)都可以访问它。如果他们可以访问实际的数据表以便他们可以使用您的应用程序,那么他们还可以使用 MS-Access 或 Excel 连接到同一个数据库并获取(甚至可能操作)数据
-
单独的 ASP.NET 连接字符串(保持集成安全性),而对于 SQL Server 连接字符串(使用用户名和密码进行身份验证)......正如我的回答中已经提到的那样。谢谢
-
几种方式:(1)不使用SQL Server集成安全,所以你的用户没有直接访问权限;为您的 ASP.NET 应用程序使用对 SQL Server 具有必要权限的“应用程序”用户;这可以阻止“临时”黑客,但任何系统管理员都可以看到您的 SQL 连接字符串,包括 web.config 中的用户/密码。另外:使用数据库的权限——“普通”用户只能更改“普通”表(没有系统/查找表);使用数据库约束和参照完整性(外键)来防止无效数据
-
(2) 如果您真的对安全性有疑虑,请构建您的解决方案,以便任何用户只能使用存储过程访问您的数据;在这种情况下,数据库上的任何用户只需要执行存储过程的权限 - 他直接对表没有权限,因此他无法对这些表执行任何操作。但是,如果您从一开始就没有这样做,这需要进行大规模的重新架构
标签: asp.net sql-server-2008 security web-config integrated-security