日期:2008-10-31 浏览次数:20389 次
摘要:今天用C#编写一个Windows 服务程序,其中要连接一个Windows 2003 Server上的SQL Server 2000 数据库,用SQL Server 身份验证。发现普通程序都能联上,但是Windows服务程序就是联不上。 后来查了资料,找到了解决方法。共享给大家。
三步解决:
1、 在服务器上创建一个用户,配置好SQL Server数据库访问权限。
2、 在客户端创建一个一样的用户。
3、 服务程序以刚创建的那个客户端用户登录。
搞定!
关键字:SSPI, Integrated Security, SQL Server 和 Windows,身份验证,SQL Server不存在,或者拒绝访问。
参考文档:Windows 身份验证和 SQL Server
http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/f_and_m/html/vxconWindowsAuthenticationSQLServer.asp
Visual Studio 示例:Fitch and Mather 7.0 |
|
Windows 身份验证和 SQL Server
Fitch and Mather 7.0 通过 SQL Server 身份验证访问 SQL Server。虽然它非常简单并提供了易于理解的示例,但它并不是最安全的方法。Fitch and Mather 7.0 将连接字符串(包含数据库凭据)存储在两个位置:Web.config 文件和 COM+ Admin 目录(在 FMStocks7.GAM.7 组件的构造函数字符串中)。默认情况下,任何用户都可以读取这两个位置,因此很容易无意中泄露保密信息(凭据)。
一种更好的解决方案是使用 Windows 集成安全性。首先,需要 Internet 信息服务 (IIS) 服务器和 SQL Server 数据库都能识别的 Windows 标识。有两种方法可供选择:
· 域帐户
如果服务器是域的一部分,并且管理员可以创建应用程序的域帐户,那么这是最佳方法。
· 具有同步密码的本地帐户
如果网络的实现不支持域帐户,则通过在两台计算机上创建相同的本地帐户(使用相同的密码),可以安全地访问 IIS 和 SQL Server 数据库。
选择上述方法中的一种,然后创建一个名为 FMStocks_7 Application 的帐户(在域中或在两台计算机上),并使它仅属于“Guest”组。这样,应用程序只需要最低程度的特权即可运行。
然后,更改连接字符串(在 Web.config 和 COM+ admin 目录中),移除显式凭据以便能够使用集成安全性。例如,如果连接字符串如下:
Data Source=MYDBSERVER; User Id=Fitch and Mather 7.0 _login; Password=*********;
Initial Catalog=Fitch and Mather 7.0 ;
然后将其更改为:
Data Source=MYDBSERVER;Integrated Security=SSPI;
Initial Catalog=Fitch and Mather 7.0 ;
这一更改意味着,可以使用线程运行所用的标识来访问 SQL Server 数据库。默认情况下,ASP.NET(aspnet_wp.exe 进程)在本地 ASPNET 帐户下运行,但是,应用程序代码应在 Fitch and Mather 7.0 应用程序帐户下运行。在 Fitch and Mather 7.0 Application 帐户下运行应用程序代码的优点是,这是一个 Windows 帐户,并且您可以授予它适当的 SQL Server 权限。
下一步,需要将帐户与 Fitch and Mather 7.0 应用程序关联。
将帐户与 Fitch and Mather 7.0 关联
1. 配置 IIS。
a. 在“开始”菜单上指向“程序”,然后指向“管理工具”并单击“Internet 服务管理器”。
“Internet 信息服务”窗口随即打开。
b. 在“树”选项卡上,浏览目录树以搜索 FMStocks7 虚拟目录。(此虚拟目录的位置因具体的安装而异。)找到之后,右击“FMStocks7”并选择“属性”。
“FMStocks7 属性”对话框随即出现。
c. 在“FMStocks7 属性”对话框中,选择“目录安全性”选项卡。在“匿名访问和验证控制”下,单击“编辑”按