Windows 集成的身份验证连接SQL Server数据库,打造更安全的连接

server|window|安全|数据|数据库

摘要:今天用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 属性”对话框中,选择“目录安全性”选项卡。在“匿名访问和验证控制”下,单击“编辑”按钮。
随即出现“验证方法”对话框。

d.                     在“匿名访问”下,单击“编辑”按钮。
“匿名用户帐号”对话框随即出现。

e.                      清除“允许 IIS 控制密码”。这是必需的,因为 IIS 会存储凭据并在针对 SQL Server 进行身份验证时提供这些凭据。

f.                       在“用户名”和“密码”下,将匿名用户帐户替换为 FMStocks7_Application,并且输入它的密码。

g.                     最后,单击三次“确定”以完成。

2.             通过添加以下行启用 Web.config 中的模拟:

3.                   <system.web>

4.                      <identity impersonate="true" />

      ....

最后一步是在 FMStocks7 和 FMStocks7_GAM 数据库中配置 SQL Server,以授予 Fitch and Mather 7.0 Application 帐户适当的权限(如果这两个数据库在不同的计算机上运行,则需要在每台计算机上重复此过程):

在 FMStocks7 和 FMStocks7_GAM 数据库中配置 SQL Server 权限

1.             打开 SQL Server。

·                         在“开始”菜单上指向“程序”,然后指向“Microsoft SQL Server”并单击“企业管理器”。
“SQL Server 企业管理器”窗口随即打开。

2.             创建一个 SQL 登录。

a.  在“树”选项卡上,浏览目录树以搜索服务器名称下的“安全性”文件夹,然后展开该文件夹。

b. 右击“登录”文件夹并选择“新建登录”。
“SQL Server 登录属性 – 新建登录”对话框随即出现。

c.  在“名称”框中,输入“FMStocks7 Application”。

d. 在“身份验证”下,找到“域”框,并选择本地计算机名(如 MYDBSERVER)或您的域,具体取决于创建 Fitch and Mather 7.0 Application 帐户的位置。

e.  将“安全性访问”设置为“允许访问”。

f.   在“默认值”下,将“数据库”设置为 FMStocks7。

g. 选择“数据库访问”选项卡,并确保在各自的“允许”字段中选中 FMStocks7 和/或 FMStocsk7_GAM。

h. 在 FMStocks7 和/或 FMSTocks7_GAM 的数据库角色下,选择 db_denydatareader 和 db_denydatawriter 权限,以防止该帐户直接访问表。

3.             删除 FMStocks7_login,因为不再使用它。

 .   仍然是在“SQL Server 企业管理器”窗口中的“目录树”选项卡上,双击“安全性”文件夹下的“登录”。
各个登录显示在“SQL Server 企业管理器”窗口的右窗格中。

a.  找到 FMStocks7_Login 的项,并右击该项然后选择“删除”将其删除。
出现“FMStocks7_Login”对话框。选择“是”确认删除。

4.             给所有存储过程授予“执行”权限。

 .   仍然是在“SQL Server 企业级管理器”窗口的“树”选项卡上,浏览目录树以搜索位于“数据库”文件夹中服务器名下的 FMStocks7 数据库。

a.  在 FMStocks 数据库文件夹中找到并打开“存储过程”,然后对非系统存储过程执行以下操作:

双击该存储过程(例如 Account_Add 项)。
“存储过程属性”对话框随即出现。

单击“权限”按钮。
“对象属性 - FMStocks7”对话框随即出现。

在“权限”表中,找到“EXEC”列,并选择相应的框,向 FMStocks7 Application 帐户授予“EXEC”权限。

若要验证 SQL Server 权限配置得是否正确,请运行应用程序并使用 SQL 分析器验证所使用的帐户是否为 Fitch and Mather 7.0 Application。

对于每一个请求,现在将发生以下情况:

1.             传入一个匿名请求,IIS 模拟您为匿名用户指定的帐户(Fitch and Mather 7.0 Application),并将该请求传递给 aspnet_wp.exe。请注意,虽然 Fitch and Mather 使用 Forms 身份验证,但在 IIS 中,所有请求都是匿名的。

2.             由于您已将应用程序配置为使用模拟(通过更改 Web.config),ASP.NET 在当前线程中模拟 IIS 标识 (Fitch and Mather 7.0 Application)。

3.             应用程序打开 SQL 连接时,它在 Fitch and Mather 7.0 Application 登录下,使用集成 Windows 身份验证来执行存储过程。

分布式方案

运行分布式方案时,请注意以下内容:

远程 BLL
上述所有对 Web 服务器的更改需要在应用程序层(运行 BLL 的位置)中完成。

远程 GAM(.NET 远程处理)
上述所有对 Web 服务器的更改也需要在应用程序层(运行 GAM 的位置)中完成。

远程 GAM (DCOM)
上述更改只需要在 Web 服务器中进行。另外,在运行 GAM 的计算机(GAM COM+ 服务器应用程序驻留的计算机)上完成以下操作:

设置 GAM

1.             打开“组件服务”,然后修改 FMStocks7.GAM COM+ 组件的帐户。

a.                      在“开始”菜单上指向“程序”,然后指向“管理工具”并单击“组件服务”。
“组件服务”窗口打开。

b.                     在“树”选项卡上,浏览目录树以搜索“组件服务”->“计算机”->“我的电脑”->“COM+ 应用程序”下的“FMStocks7.GAM”文件夹。

c.                      右击 FMStocks7.GAM 项并选择“属性”。
“FMStocks7.GAM 属性”对话框出现。

d.                     选择“标识”选项卡,选择“本用户”,然后在“用户”和“密码”框中提供 FMStocks7 应用程序的 Windows 凭据。单击“确定”接受更改。

2.             更改 FMStocks7.GAM.7 构造函数字符串。

a.                      在“组件服务”窗口中“FMStocks7.GAM 应用程序”的“组件”文件夹下(参见上面的第 1 步),右击“FMStocks7.GAM.7”组件并选择“属性”。
“FMStocks7.GAM.7 属性”对话框出现。

b.                     选择“激活”选项卡。在“对象结构”下,找到“建立者字符串”,将字符串更改为:
Provider=SQLOLEDB;Data Source= MYDBSERVER;Integrated Security=SSPI;Initial Catalog=Fitch and Mather 7.0 _GAM;

时间: 2016-02-06

Windows 集成的身份验证连接SQL Server数据库,打造更安全的连接的相关文章

sqlserver2008r2-WINDOWS身份验证和SQL server身份验证都无法登录到数据库

问题描述 WINDOWS身份验证和SQL server身份验证都无法登录到数据库 今天早上使用SQL数据库本来好好的,但是后来我删除了一个东西后就无法再进入数据库了,我删除的东西是在打开SQL数据库后的安全性-登录名下的一个名字为我的电脑名的登录名(我用WINDOWS身份验证也是这个名字),然后就开始报错了,说无法连接到数据库,当我再次登录时也不行了,求教各位帮个忙啊,我才刚刚重装了系统,不想再次重装啊 解决方案 后来问一个我们学校的大牛,他给我弄好了,参照这个网址:http://www.msc

Windows和Linux系统下perl连接SQL Server数据库的方法_perl

本文将提供一些perl连接Microsoft SQL Server数据库的实例.perl脚本运行在Windows和Linux平台. Windows平台 如果在Windows平台下运行perl脚本,建议使用依赖DBI的两个模块包,提供标准的数据库接口模块. DBD::ODBC DBD::ADO 使用DBD::ODBC 如果选用DBD::ODBC,下面的实例代码将展示如何连接到SQL Server数据库: 复制代码 代码如下: use DBI;   # DBD::ODBC   my $dsn = '

sql server-JDBC连接SQL Server数据库

问题描述 JDBC连接SQL Server数据库 用windows身份验证,连接SQL Server数据库时,发生了异常.在网上找了,没找到什么有用的结论,特来请教. 这是代码: private static final String DRIVER=""com.microsoft.sqlserver.jdbc.SQLServerDriver"";private static final String URL=""jdbc:sqlserver://

C#连接SQL Server数据库实例及判断对象是否存在

C#连接SQL Server数据库 对于不同的.NET数据提供者ADO.NET采用不同的Connection对象连接数据库.这些Connection对象为我们屏蔽了具体的实现细节并提供了一种统一的实现方法. Connection类有四种SqlConnectionOleDbConnectionOdbcConnection和OracleConnection. SqlConnection类的对象连接SQL Server数据库OracleConnection 类的对象连接Oracle数据库OleDbCo

jdbc连接SQL Server数据库的注意事项及编程应用实例

首先,关于数据库的安装方法在本文中就不再累赘,详情请见我的上一篇博客. http://cq520.iteye.com/admin/blogs/1982097 不过需要注意的是,由于装有Windows操作系统下的电脑都默认有SQL Server,所以大家可以打开自己 的电脑看一下自己的电脑里面是哪个SQL Server 版本(在开始菜单中找到Microsoft SQL Server文件夹 ,后面的版本号就是本机的SQL Server 版本). 不过系统自带的SQL Server可能并没有管理工具(

《Tableau数据可视化实战》——1.5节连接SQL Server数据库

1.5 连接SQL Server数据库 尽管Tableau能很容易地连接Access.Excel以及其他平面文件,但数据经常是存储在服务器的关系型数据库中,比如SQL Server或者Oracle.Tableau也提供了一些其他数据存储的连接,本节将讨论如何使用Tableau连接Microsoft SQL Server. 准备工作 当你尝试从服务器访问数据时,安全角色.服务器连接.身份认证.端口.防火墙以及其他因素均可能产生问题,解决这些问题的方法超出了本书的范围,但你需要确定,你可以从已安装T

ThinkPHP连接sql server数据库

原文:ThinkPHP连接sql server数据库 亲身经历,在网上找连接sql server数据库的方法,还是不好找的,大多数都是照抄一个人的,而这个人的又写的不全,呵呵,先介绍一下我连接的方法吧.如果你是用THINKPHP连接,那么最重要的就是配置问题. 我的PHP版本是5.3,就说5.3的方法吧 1.首先要下载 php_pdo_sqlsrv_53_ts_vc9.dll php_sqlsrv_53_ts_vc9.dll 下载地址:http://share.weiyun.com/dc589f

php程序来连接SQL Server数据库的通用类

很多朋友问我如何用php程序来连接SQL Server数据库的通用类,其实这个并不是很难的,关键是一点点仔细,一点点耐心,用激情去理解 <?   class DB {    var $Host = "192.168.0.199"; // Hostname of our MySQL server    var $Database = "test"; // Logical database name on that server    var $User = &q

asp连接SQL server数据库二种方法

asp教程连接sql server数据库教程二种方法 本教程主要是讲了asp与mssql server 数据库的两种不同的连接方法,主要是讲sql server连接方法与sql server ole db连接方法. sql server连接方法: set adocon=server.createobject("adodb.recordset") adocon.open"driver={sql server};server=(local);uid=***;pwd=***;&qu