EF 数据库连接字符串-集成安全性访问 SQL Server
使用 Windows 集成安全性访问 SQL Server
如果您的应用程序运行在基于 Windows 的 Intranet 上,则也许可以将 Windows 集成身份验证用于数据库访问。集成安全性使用在操作系统线程上建立的当前 Windows 标识来访问 SQL Server 数据库。然后,您可以将 Windows 标识映射到 SQL Server 数据库和权限。
若要使用 Windows 集成身份验证连接到 SQL Server,必须标识是以什么 Windows 标识来运行 ASP.NET 应用程序的。还必须确保已授予该标识访问 SQL Server 数据库的权限。本主题包括显示 ASP.NET 应用程序的当前 Windows 标识的代码示例。
如果 SQL Server 与 Web 服务器在不同的计算机上,则 Windows 标识必须能够通过网络传递给 SQL Server 的远程实例。(已使用 Kerberos 身份验证正确进行配置的 Windows 网络能够实现此目的。)但是,在 ASP.NET 应用程序的操作系统线程上建立的 Windows 标识也许无法正确地传递给远程 SQL Server,这取决于 identity 配置元素中的设置。
您可以为网站的辅助进程标识提供特定的用户名和密码(如如何:使用映射的 Windows 域用户访问 SQL Server 中所示),也可以模拟 Internet 信息服务 (IIS) 提供的已验证的标识。若要模拟 IIS 提供的 Windows 标识,请将 identity 配置元素的 impersonate 属性设置为 true,如下面的示例所示:
<system.web>
<identity impersonate="true" />
</system.web>
在 IIS 中,只有基本身份验证使用通过网络传递给远程 SQL Server 的安全标记来使用户登录。默认情况下,与 identity 配置元素设置一起使用的其他 IIS 安全模式将不会生成可以通过远程 SQL Server 的身份验证的标记。
如果网站配置为仅支持 IIS 中的匿名访问,则从 IIS 传递的安全标记将是 IIS 中配置的匿名访问的 Windows 用户帐户的安全标记。匿名用户帐户可用于通过远程 SQL Server 的身份验证。但是,默认的匿名用户帐户是本地计算机帐户,因而将不会作为远程 SQL Server 上的帐户存在。您可以更改 IIS 匿名帐户以使用域帐户,也可以镜像远程 SQL Server 上的本地计算机帐户(方法为在远程 SQL Server 上创建一个具有相同用户名和密码的本地帐户)。此外,还必须将 IIS6 的 LogonMethod 元数据库属性设置为允许通过网络传递凭据的选项。例如,元数据库设置MD_LOGON_NETWORK_CLEARTEXT 允许通过网络传递登录凭据。
如果您不确定您的应用程序的 Windows 标识,并且不确定标识是否使用可以通过网络传递的标记登录,可以运行下面的 ASP.NET 页(作为应用程序的一部分)来显示 Windows 标识的名称以及一个指示是否可以通过网络传递标识的值。请注意,下面的示例不考虑是否已经成功地为您的域设置了 Kerberos 委托。
%@ Page Language="C#" %>
<%@ Import namespace="System.Security.Principal" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>ASP.NET Example</title>
<script runat="server"> public bool WillFlowAcrossNetwork(WindowsIdentity w)
{
foreach (SecurityIdentifier s in w.Groups)
{
if (s.IsWellKnown(WellKnownSidType.InteractiveSid)) { return true; }
if (s.IsWellKnown(WellKnownSidType.BatchSid)) { return true; }
if (s.IsWellKnown(WellKnownSidType.ServiceSid)) { return true; }
} return false;
} </script>
</head>
<body>
<%
WindowsIdentity current = WindowsIdentity.GetCurrent();
Response.Write(current.Name + ", " + WillFlowAcrossNetwork(current) + "<br />");
%>
</body>
</html>
下面的过程演示如何在 Intranet 方案中使用 Windows 集成身份验证访问 SQL Server 数据库,而在该方案中,已分别授予每个用户访问 SQL Server 的权限。
开始时,您需要在 IIS 中将应用程序配置为禁用匿名访问并启用 Windows 身份验证。
为 Windows 集成身份验证配置 IIS
在 Windows 中,打开“Internet 信息服务”管理工具。
在 Microsoft Windows 2000 Server 或 Windows Server 2003 操作系统中:在 Windows“开始”菜单中,依次指向“程序”、“管理工具”和“Internet 服务管理器”。
在 Microsoft Windows XP Professional 操作系统中:打开控制面板中的“管理工具”。
打开您的服务器的节点,然后继续打开节点,直到找到您的应用程序的节点(通常在“默认网站”之下)。
右击您的应用程序,再单击“属性”。
在“目录安全性”选项卡上,单击“编辑”。
在“身份验证方法”对话框中,清除“匿名访问”复选框,然后执行下列操作之一:
如果 SQL Server 与 IIS 位于同一台计算机上,选中“集成 Windows 身份验证”复选框。
如果 SQL Server 是远程服务器,选中“基本身份验证”复选框,并清除“集成 Windows 身份验证”复选框。
关闭所有对话框。
在应用程序配置文件 (Web.config) 中,指定应用程序将模拟 IIS 提供的用户凭据。
将 Web.config 配置为模拟 IIS 提供的标识
打开应用程序的 Web.config 文件并向 system.web 元素添加以下内容:
<identity impersonate="true"/>
说明:Web.config 中的元素区分大小写。
在创建连接字符串以访问 SQL Server 时,必须包含通知 SQL Server 您正在使用集成安全性的属性。
为 Windows 集成安全性配置连接字符串
在 SQL Server 的任何连接字符串中,包含属性 Trusted_Connection=Yes 并移除用户名和密码属性。
下面显示的是一个为 Windows 集成安全性配置的典型连接字符串:
"workstation id=WebServer1;packet size=4096;
Trusted_Connection=Yes;data source=SQLServer01";
persist security info=False;initial catalog=northwind"
将 SQL Server 设置为可以识别将访问它的用户。
为 Windows 集成安全性配置 SQL Server
从 Windows 的“开始”菜单中,选择“Microsoft SQL Server”,然后选择“企业管理器”。
打开服务器的节点,并展开希望将其权限授予用户的数据库的节点。
右击“用户”节点,选择“新建数据库用户”。
在“数据库用户属性”对话框中,在“登录名”框中输入域\用户名,然后单击“确定”。另外,将 SQL Server 配置为允许所有域用户访问数据库。
-------------------------------------------------------------------------------------------------------------------------------------------------
使用映射的 Windows 域用户访问 SQL Server
默认情况下,在 Microsoft Windows 2000 和 Microsoft Windows XP 中,ASP.NET 应用程序在名为 ASPNET 的本地用户帐户的上下文中运行;在 Windows Server 2003 中,该应用程序在名为 NETWORK SERVICE 的本地用户帐户的上下文中运行。这两种用户帐户具有有限的访问权限。但 ASPNET 帐户是 Web 服务器的本地帐户。 因此,在远程计算机上并不会将它识别为用户。若要避开此限制,您可以让您的应用程序在 Windows 域用户(Web 服务器和运行 Microsoft SQL Server 的计算机都可以识别)的上下文中运行。
将您的应用程序进程映射到 Windows 域用户帐户时,要求您配置下列内容:
Web 服务器。
必须确保您所指定的 Windows 域用户帐户具有足够(但仅此而已)的用户权限来运行 Web 应用程序。
应用程序。
必须配置 ASP.NET 的 Web.config 文件以识别域用户帐户名。
说明:有关 Machine.config 和 Web.config 文件的信息,请参见 ASP.NET 配置概述。
连接字符串。
在为应用程序中的连接对象创建连接字符串时,必须指定这些连接字符串将使用 Windows 集成安全性。
SQL Server。
必须添加指定的域用户帐户作为 SQL Server 登录用户。
为 Windows 域用户帐户设置用户权限
在 Web 服务器上,使用 Windows 管理工具确保映射的 Windows 域用户帐户具有必需的用户权限。
有关详细信息,请参见 ASP.NET 必需的访问控制列表 (ACL)。
使用 -ga 开关运行 aspnet_regiis.exe,以授予将用于应用程序模拟的标识所需的一般用户权限。
在为域用户帐户建立正确的用户权限后,需要配置应用程序标识模拟。
安全说明:
将用户凭据放入 Web.config 文件时,可能会对安全构成威胁。对包含 Web.config 文件的目录具有访问权限的用户可以读取该文件,进而查看这些凭据。有关如何针对此威胁采取保护措施的详细信息,请参见使用受保护的配置加密配置信息。
为模拟配置 Web 应用程序
打开应用程序的 Web.config 文件,然后添加下面的标识模拟代码:
<identity impersonate="true" userName="domain\username" password="********"/>
请将以上示例中列出的值替换为正确的密码。
说明:Web.config 文件中的元素区分大小写。
最后,在为数据库访问创建连接字符串之后,请将这些连接字符串配置为使用 Windows 集成安全性。
在连接字符串中使用 Windows 集成安全性
在为应用程序创建连接字符串时,不要包含用户名和密码。相反,对于连接字符串,应将 Integrated Security 属性设置为 SSPI。
下面的示例演示了一个包含适当属性的连接字符串:
data source=myserver;initial catalog=northwind;Integrated Security=SSPI
为集成安全性配置 SQL Server
在 Windows 中,单击“开始”,指向“Microsoft SQL Server”,然后单击“企业管理器”。
打开服务器的节点,然后展开要向其授予用户权限的数据库的节点。
右击“用户”,然后单击“新建数据库用户”。
在“数据库用户属性”对话框中,在“登录名”框中输入域\用户名,然后单击“确定”。
---------------------------------------------------------------------------------------------------------------------------------
以本地用户身份访问 SQL Server
默认情况下,当 ASP.NET 应用程序运行时,它运行在名为 ASPNET(在 Microsoft Windows 2000 和 Microsoft Windows XP 中)或 NETWORK SERVICE(在 Microsoft Windows Server 2003 中)的特殊本地用户帐户的上下文中。此用户帐户具有的用户权限足以在 Web 服务器上运行应用程序。
如果 Microsoft SQL Server 和 Web 服务器位于同一台计算机上,则可以将 ASPNET 或 NETWORK SERVICE 用户帐户定义为运行 SQL Server 的计算机上的本地用户帐户。
此方法的优点在于它是安全的,因为 Web 应用程序在有限的安全性上下文内运行。在 SQL Server 中使用单个用户名也是高效的,因为这使 SQL Server 可以利用连接池来进一步增强应用程序的可伸缩性。
将 SQL Server 用户权限授予 ASPNET 或 NETWORK SERVICE 用户帐户
在 Windows 中,单击“开始”,指向“程序”,再指向“Microsoft SQL Server”,然后单击“企业管理器”。
展开服务器的节点,然后展开您要授予用户权限的数据库的节点。
右击“用户”,然后单击“新建数据库用户”。
在“数据库用户属性”对话框中,在“登录名”框内输入计算机名称\ASPNET 或 NT AUTHORITY\NETWORK SERVICE,然后单击“确定”。
-------------------------------------------------------------------------------
使用预设的凭据访问 SQL Server
连接到 SQL Server 的可靠方法是在连接字符串中传递用户名和密码。您可以使用预设的用户名和密码。建议的方法是将预设的用户名和密码作为 connectionStrings 配置节的一部分存储在服务器中,然后使用受保护的配置来加密连接字符串内容。有关详细信息,请参见受保护配置概述。此外,建议使用 NTFS 文件系统权限来限制对 Web.config 文件的访问。
安全说明:
决不将凭据以字符串形式硬编码到您应用程序的程序中。能够访问代码文件(甚至是已编译的代码)的任何人员,都将能够获取凭据。
安全说明:
始终将资源的最少访问特权给予预设用户名。决不使用“sa”或任何其他管理级别的用户名。始终使用强密码。
将凭据存储在 Web.config 文件中
在 Web.config 文件的 connectionStrings 元素中创建一个新的 add 关键字。connectionStrings 元素必须作为 configuration 元素的子元素出现。有关详细信息,请参见配置节架构。
下面的示例阐释一个包含用户名和密码的 add 关键字:
<configuration>
<connectionStrings>
<add name="NorthwindConnection"
connectionString="Data Source=localhost;
Initial Catalog=Northwind;
User Id=ApplicationUserID;
Password=#P%19!ef2" />
</connectionStrings>
</configuration>使用受保护的配置加密连接字符串值,如演练:使用受保护的配置加密配置信息中所示。
在您的应用程序中,从 ConfigurationManager 类的 ConnectionStrings 属性读取凭据。
下面的示例显示如何在运行时读取凭据并将它们串联到连接字符串中:
Dim settings As ConnectionStringSettings
settings = System.Configuration.ConfigurationManager.ConnectionStrings("NorthwindConnection")
Dim connectionString As String = settings.ConnectionStringConnectionStringSettings settings;
settings = System.Configuration.ConfigurationManager.ConnectionStrings["NorthwindConnection"];
string connectionString = settings.ConnectionString;
参考
如何:使用 Windows 集成安全性访问 SQL Server
如何:使用映射的 Windows 域用户访问 SQL Server
EF 数据库连接字符串-集成安全性访问 SQL Server的更多相关文章
- .NET跨平台之旅:升级至ASP.NET 5 RC1,Linux上访问SQL Server数据库
今天微软正式发布了ASP.NET 5 RC1(详见Announcing ASP.NET 5 Release Candidate 1),.NET跨平台迈出了关键一步. 紧跟这次RC1的发布,我们成功地将 ...
- 原生的ado.net(访问sql server数据库)
本文介绍原生的ado.net(访问sql server数据库) 写在前面 数据库连接字符串 过时的写法 string str = "server=localhost;database=my_ ...
- Ubuntu12.10下Python(pyodbc)访问SQL Server解决方案
一.基本原理 请查看这个网址,讲得灰常详细:http://www.jeffkit.info/2010/01/476/ 二.实现步骤 1.安装linux下SQL Server的驱动程序 安装Free ...
- ASP调用存储过程访问SQL Server
ASP调用存储过程访问SQL Server 2011-02-15 10:22:57 标签:asp 数据库 sQL 存储过程 Server ASP和存储过程(Stored Procedures)的文章 ...
- ODBC database driver for Go:Go语言通过ODBC 访问SQL server
Go语言通过ODBC 访问SQL server,这里需要用到go-odbc库,开源地址::https://github.com/weigj/go-odbc 一.驱动安装 在cmd中打开GOPATH: ...
- 在oracle中通过链接服务器(dblink)访问sql server
在oracle中通过链接服务器(dblink)访问sql server 2013-10-16 一. 工作环境: <1> Oracle数据库版本:Oracle 11g 运行环境 :IB ...
- Oracle Gateways透明网关访问SQL Server
自己的本机安装了Oracle 12c,公司的平台需要同时支持Oracle与SQL Server,很多时候都有将数据从Oracle同步到SQL Server的需求.通过SQL Server的link S ...
- ADO.NET访问SQL Server调用存储过程带回参
1,ADO.NET访问SQL Server调用存储过程带回参 2,DatabaseDesign use northwind go --存储过程1 --插入一条商品 productname=芹菜 un ...
- ORACLE透明网关访问SQL Server配置总结
透明网关概念 ORACLE透明网关(Oracle Transparent Gateway)可以解决ORACLE数据库和非ORACLE数据库交互数据的需求.在一个异构的分布式环境中,通过ORACLE ...
随机推荐
- 7.5 数据注解特性--MaxLength&&MinLength
MaxLength attribute can be applied to a string or array type property of a domain class. EF Code Fir ...
- .NET 扩展方法 (一)
我还记得刚刚学编程的时候,老师经常会提到一句话:注意空指针.所以经常在某些“入口”位置,进行代码校验,空指针的判断就是其中的一项工作. string类型作为常用的数据类型,它在项目中出现的机率极高,所 ...
- T-SQL 循环表的一种方式
原文来自:https://www.lesg.cn/netdaima/sqlservert-sql/2016-463.html SsqlServer 中循环表有几种方式 1.临时表 2.游标 3-. 下 ...
- 【Java每日一题】20161220
package Dec2016; public class Ques1220 { public static void main(String[] args) { Integer num1 = new ...
- 又一个半成品库 weblog rpc client
我基本上属于半成品专业户,去看我的github就知道. 下午又撸了一个weblog rpc client库,而这又一次证明了一个有技术但没有产品能力的程序员是没有卵用的. 因为当做好了库的雏形,但与具 ...
- java——获取从控制台输入的数据的方法
一.使用标准输入串System.in System.in.read(); //一次只读入一个字节数据,但是我们往往希望获得的是一个字符串或者一组数字 二.使用Scanner获得一个字符串或一组 ...
- 微软Microsoft开源历程与相关资源
2001 Open source is bad for business, saysMicrosoft Linux is a cancer 2005 Enterprise Library 1.0 re ...
- 适应手机端的jQuery图片滑块动画DEMO演示
在线预览 下载地址 实例代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "htt ...
- React Native常用组件Image使用
前言 学习本系列内容需要具备一定 HTML 开发基础,没有基础的朋友可以先转至 HTML快速入门(一) 学习 本人接触 React Native 时间并不是特别长,所以对其中的内容和性质了解可能会有所 ...
- OpenGL渲染流程
一.什么是openGL OpenGL被定义为“图形硬件的一种软件接口”.从本质上说,它是一个3D图形和模型库,具有高度的可移植性,具有非常快的速度. 二.管线 管线这个术语描述了opengl渲染的整个 ...