【发布时间】:2010-10-12 06:55:24
【问题描述】:
我对 ASP.NET 世界还很陌生,因此在想出在运行时配置连接字符串并让整个应用程序使用该连接字符串的最佳方法时遇到了一些麻烦。以下是有关我计划构建的应用程序的更多信息:
- 应用程序使用表单身份验证,而不是 Windows 身份验证
- 会有一个登录页面,用户在其中提供他们的 SQL Server 登录 ID 和密码
- 为简单起见,我希望所有 SQLDataSource 控件都指向一个 web.config 连接字符串。这将在设计时完成,而不是以编程方式设置它们。所以,他们会有这样的属性: ConnectionString=""
- 我想找到一种在运行时更改“MyDB”连接字符串的方法,以便它使用用户提供的登录 ID 和密码。但我不希望将其保存到 web.config。它应该只对该用户的会话有效。
人们通常这样做的“标准”方式是什么?我假设一种方法是使用连接字符串创建一个 Session 变量,然后在页面加载期间以编程方式更改每个 SQLDataSource 控件的 ConnectionString 属性。但我希望尽可能避免这种情况。
由于许多人问我为什么要为每个用户使用唯一的连接并且担心缺乏池,我想我会在这里对此发表评论,而不是对每个单独的回复发表评论。
此应用程序的性质要求每个用户都使用自己的帐户连接到数据库。后端安全性与他们的用户帐户相关联,因此我们不能使用“用户”和“管理员”等通用帐户。我们还需要知道每个用户的具体身份来进行审计控制。该应用程序通常只有 10 到 20 个用户,因此无需担心缺少池。我们可以再讨论一下这种方法的优点,但不幸的是我在这里没有选择 - 该项目要求每个用户使用自己的帐户连接到数据库。
我很想要求 Windows 身份验证,但不幸的是,此应用程序的某些实现需要 SQL 身份验证。
如果我可以像这样声明 SQLDataSource 控件时设置连接字符串,那就太简单了:
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString = "<%= Session("MyConnectionString") %>"
SelectCommand="SELECT * FROM [Customers]">
</asp:SqlDataSource>
但我收到一个错误,因为它不喜欢那里的 标记。如果我在声明控件时无法执行此操作,那么以编程方式为应用程序中的每个 SQLDataSource 控件执行此操作的最简单方法是什么?
非常感谢大家的帮助!
【问题讨论】:
标签: asp.net database authentication web-applications