某某茶叶有限公司欢迎您!
金沙棋牌在线 > 必赢棋牌官网 > SQL Server 连接字符串和身份验证详解

SQL Server 连接字符串和身份验证详解

时间:2020-04-21 04:32

SQL Server 身份验证标准连接:

SQL Server .NET Data Provider 连接字符串包含一个由一些属性名/值对组成的集合。每一个属性/值对都由分号隔开。
          PropertyName1=Value1;PropertyName2=Value2;PropertyName3=Value3;.....
同样,连接字符串必须包含SQL Server实例名称:
          Data Source=ServerName;
          使用本地的SQL Server(localhost),如果想要使用远程服务器运行,应该在示例对象中把正确的服务器赋给Data Source 属性。此外,还必须指定所支持的两种身份验证方法(即Windows身份验证和SQL Server身份验证)中的其中一种。Windows身份验证使用Windows登录用户身份连接数据库,而SQL身份验证要求显式地指定SQL Server用户ID和密码。要想使用Windows身份验证,必须在连接字符串中包括 Integrated Security 属性:
          Data Source=ServerName;Integrated Security=True;

从一台服务器连接另一台 SQL Server 服务器时常使用 SQL Server 身份验证的方式连接,这种情况下是否安全呢?

在保密你的服务器和数据,防备当前复杂的攻击,SQL Server有你需要的一切。但在你能有效使用这些安全功能前,你需要理解你面对的威胁和一些基本的安全概念。这篇文章提供了基础,因此你可以对SQL Server里的安全功能充分利用,不用在面对特定威胁,不能保护你数据的功能上浪费时间。

Data Source = myServerAddress; Initial Catalog = myDataBase; User Id = myUsername; Password = myPassword;

          默认情况下,Integrated Security 属性为 False ,这意味着将禁用Windows身份验证。如果没有显式地把这个属性的值设置为True,连接将使用SQL Server身份验证,因此,必须提供SQL Server用户ID和密码。Integrated Security属性还能识别的其他值只有SSPI(Security Support Provider Interface,安全性支持提供者接口).在所有的Windows NT操作系统上,其中包括Windows NT 4.0、2000、XP,都支持值SSPI。它是使用Windows身份验证时可以使用的惟一接口,相当于把Integrated Security 属性值设置为True。

通常情况下,使用这种连接时,传输的密码是明文的,很容易被截获,有一种软件叫 Password Sniffer For MS SQL Server,将其安装在本地机上并运行,当本地机向远端 SQL Server 发送登录名和密码时,可以截获并记录(这款软件不能截获密码中的大写字母Z,也不能截获出现大写字母Z之后的字符)。

身份验证是验证主体的过程。主体需要唯一的身份,这样的话SQL Server可以决定主体有哪个许可。在提供安全访问数据库对象中,正确的身份验证是必须的第一步。

server=.sqlexpress; database=testDB; uid=sa; pwd=123456

          在Windows身份验证模式中,SQL Server使用Windows的安全子系统对用户连接进行有效性验证。即使显示地指定用户ID和密码,SQL Server也不检查连接字符串中的用户ID和密码。因为只有Windows NT、2000、XP支持SSPI,因此如果正使用的是这些操作系统,则只能使用Windows集成的安全策略去连接SQL Server。不论使用哪一个操作系统,当使用SQL Server身份验证时,必须在连接字符串中指定用户ID和密码:
Data Source=ServerName;User ID=donaldx;Password=unbreakable

要建立安全的连接,请参阅微软的如何使用 SSL 来确保与 SQL Server 2000 安全通信

SQL Server支持身份验证的两个途径:Windows集成身份验证和SQL Server身份验证。你使用的途径取决于网络环境,应用程序访问数据库的类型和这些应用程序的用户类型。

使用本地的SQL Server(localhost),如果想要使用远程服务器运行,应该在示例对象中把正确的服务器赋给Data Source 属性。此外,还必须指定所支持的两种身份验证方法(即Windows身份验证和SQL Server身份验证)中的其中一种。Windows身份验证使用Windows登录用户身份连接数据库教程,而SQL身份验证要求显式地指定SQL Server用户ID和密码。要想使用Windows身份验证,必须在连接字符串中包括 Integrated Security 属性:

          默认情况下,SQL Server .NET Data Provider连接指定用户的默认数据库,当在数据库中创建用户时,可以设置用户的默认数据库。此外,也可以在任意时间更改用户的默认数据库。例如,系统管理员的默认数据库是master。如果想要连接不同的数据库,应该指定数据库的名称:
Data Source=ServerName;Integrated Security=SSPI;Initial Catalog=Northwind

Windows身份验证:这个身份验证方式依赖于Windows来担当重任——当用户登录到Windows是验证身份。访问SQL Server对象的许可然后会分配给Windows登录。只有当SQL Server运行在支持Windows NT或Kerberos身份验证的Windows版本上才可以使用,这个自Windows 2000起已经几乎是标准。 SQL Server身份验证:SQL Server可以完全自主完成身份验证。在这个情况下,你可以创建唯一的用户名——在SQL Server调用登录——和密码。连接到SQL Server的用户或应用程序提供这些凭证来访问。许可然后直接分配到那个登录或通过角色里的资格。

Data Source=ServerName;Integrated Security=True;

          每一种身份验证都有它的优点和缺点。Windows身份验证使用单一的用户信息库源,因此,不需要为数据库访问去分别配置用户。连接字符串不包含用户ID和密码,因此消除了把用户ID和密码暴露给未授权的用户的危险。可以在Active Directory中管理用户和他们的角色,而不必在SQL Server中显式地配置他们的属性。
Windows身份验证的缺点是,它要求客户通过Windows的安全子系统支持的安全通道去连接SQL Server。如果应用种序需要通过不安全的网络(例如Internet)连接SQL Server,Windows身份验证将不工作。此外,这种身份验证方法也部分地把管理数据库访问控制的责任从DBA身上转移到了系统管理员身上,这在确定的环境中也许是一个问题。
          一般而言,在设计通用的应用程序时,为了使用Windows身份验证,将会对一些方面进行加强。大多数公司的数据库都驻留在比较健壮的Windows服务器操作系统上,那些操作系统都支持Windows身份验证。数据访问层和数据表示层的分离也促进了把数据访问代码封装在中间层组件思想的应用,中间层组件通常运行在具有数据库服务器的内部网络中。当这样设计时,就不需要通过不安全通道建立数据库连接。除此之外,Web服务也使直接连接不同域中数据库的需要大减少。

在SQL Server里在这2个类型之间配置身份验证不是一个非此即彼的选择。你可以在任何两个方式里配置身份验证:

默认情况下,Integrated Security 属性为 False ,这意味着将禁用Windows身份验证。如果没有显式地把这个属性的值设置为True,连接将使用SQL Server身份验证,因此,必须提供SQL Server用户ID和密码。Integrated Security属性还能识别的其他值只有SSPI(Security Support Provider Interface,安全性支持提供者接口)。在所有的Windows NT操作系统上,其中包括Windows NT 4.0、2000、XP,都支持值SSPI。它是使用Windows身份验证时可以使用的惟一接口,相当于把Integrated Security 属性值设置为True。

数据库的连接性已经发展成为应用程序开发的一个标准方面。数据库连接字符串现在已经成为每个项目的标准必备条件。我发现自己为了找到所需要的句法,经常要从另外一个应用程序中复制连接字符串或者进行一次搜索。这个在与SQL Server交互操作时更是如此,因为它有太多的连接字符串选项。现在就让我们来研究一下连接字符串的众多方面。

混合身份验证模式:服务器同时支持SQL Server和Windows身份验证。 Windows身份验证模式:服务器只支持Windows身份验证。

使用SQL Server的连接方式时,以本地服务器(LocalHost),数据库(testDB)为例,可以有以下一些连接方式

连接字符串

只要可能的话,微软强烈推荐使用Windows身份验证。Windows拥有可靠的验证选项,包括密码策略,但正真正的应用程序里,Windows身份验证并不总是可行的。SQL Server身份验证可以嵌入Windows验证的一些功能,但它不太安全。

Data Source=LocalHost;Initial Catalog= testDB;Integrated Security=SSPI;Persist Security Info=False;Workstation Id=XXX;Packet Size=4096;

在对象实例化或者建立期间,数据库连接字符串通过属性或方法被传递到必要的对象。连接字符串的格式是一个以分号为界,划分键/值参数对的列表。列表A中包括了一个C#中的例子,说明了怎样用创建SqlConnection对象的方法连接到SQL Server(实际的连接字符串是通过对象的ConnectionString属性分配的)。列表B中包括的是VB.NET的版本。

Windows身份验证

Server=LocalHost; Persist Security Info=False;Integrated Security=SSPI;Database= testDB;Uid=sa;Pwd=sa;Initial Catalog=Northwind;Data Source=LocalHost;Connect Timeout=20;

列表A

如果你配置你的SQL Server在Windows身份验证里操作,SQL Server认为与Windows服务器有信任关系。当它们登录到Windows里时,SQL Server认为Windows已经验证用户。然后SQL Server检查用户账号,任何Windows组和任何SQL Server角色,看用户是否是其成员之一来决定用户是否允许与各个SQL Server对象打交道。

在Windows身份验证模式中,SQL Server使用Windows的安全子系统对用户连接进行有效性验证。即使显示地指定用户ID和密码,SQL Server也不检查连接字符串中的用户ID和密码。因为只有Windows NT、2000、XP支持SSPI,因此如果正使用的是这些操作系统,则只能使用Windows集成的安全策略去连接SQL Server。不论使用哪一个操作系统,当使用SQL Server身份验证时,必须在连接字符串中指定用户ID和密码:

string cString = "Data Source=server;Initial Catalog=db;User ID=test;Password=test;";
SqlConnectionconn = new SqlConnection();
conn.ConnectionString = cString;
conn.Open();

与SQL Server身份验证比,Windows身份验证有很多优势,包括:

Server= ServerName,Data Source=DB;User ID=ID;Password=pwd

列表B

用户一次登录即可,因此她不需要单独登录到SQL Server审计功能简单化登录管理密码策略

Dim cString As String
cString = "Data Source=server;Initial Catalog=db;User ID=test;Password=test;"

Winows身份验证的另一个大优势是你对Windows用户和组的任何修改会自动在SQL Server里生效,因此你不需要单独管理它们。然后,如果你对Windows用户做出的修改,它们此时刚好连接到SQL Server,这些修改不会生效,直到下次用户连接到SQL Server才会生效。

Dim conn As SqlConnection = New SqlConnection()
conn.ConnectionString = cString
conn.Open()

配置SQL Server安全设置

连接字符串会指定数据库服务器和数据库,以及访问数据库必需的用户名和密码。但是这种格式并不是对所有数据库交互都适用,它的确有许多可用的选项,其中很多选项都有同义词。

当你安装SQL Server时,你可以选择SQL实例允许的验证模式。安装完成后你可以在SSMS里的服务器属性对话框里修改这个设置。这些设置适用于SQL Server实例里的所有数据库和其它对象。因此如果你需要为任何数据库使用SQL Server身份验证,你需要为服务器设置为混合模式。

和Data Source(数据源)、Initial Catalog(初始编目)、User ID(用户ID)、和Password(密码)等元素一起,下面这些选项都是可用的: 

插图2.1显示了在SSMS里选择了页的对话框。为了打开这个对话框,在对象浏览器里右击服务器实例名,从弹出的菜单里选择,然后点击页。通过点击对应的单选框和点击提交修改,就可以修改验证模式。

  • Application Name(应用程序名称):应用程序的名称。如果没有被指定的话,它的值为.NET SqlClient Data Provider(数据提供程序).
  • AttachDBFilename/extended properties(扩展属性)/Initial File Name(初始文件名):可连接数据库的主要文件的名称,包括完整路径名称。数据库名称必须用关键字数据库指定。
  • Connect Timeout(连接超时)/Connection Timeout(连接超时):一个到服务器的连接在终止之前等待的时间长度(以秒计),缺省值为15。
  • Connection Lifetime(连接生存时间):当一个连接被返回到连接池时,它的创建时间会与当前时间进行对比。如果这个时间跨度超过了连接的有效期的话,连接就被取消。其缺省值为0。
  • Connection Reset(连接重置):表示一个连接在从连接池中被移除时是否被重置。一个伪的有效在获得一个连接的时候就无需再进行一个额外的服务器来回运作,其缺省值为真。
  • Current Language(当前语言):SQL Server语言记录的名称。
  • Data Source(数据源)/Server(服务器)/Address(地址)/Addr(地址)/Network Address(网络地址):SQL Server实例的名称或网络地址。
  • Encrypt(加密):当值为真时,如果服务器安装了授权证书,SQL Server就会对所有在客户和服务器之间传输的数据使用SSL加密。被接受的值有true(真)、false(伪)、yes(是)和no(否)。
  • Enlist(登记):表示连接池程序是否会自动登记创建线程的当前事务语境中的连接,其缺省值为真。
  • Database(数据库)/Initial Catalog(初始编目):数据库的名称。
  • Integrated Security(集成安全)/Trusted Connection(受信连接):表示Windows认证是否被用来连接数据库。它可以被设置成真、伪或者是和真对等的sspi,其缺省值为伪。
  • Max Pool Size(连接池的最大容量):连接池允许的连接数的最大值,其缺省值为100。
  • Min Pool Size(连接池的最小容量):连接池允许的连接数的最小值,其缺省值为0。
  • Network Library(网络库)/Net(网络):用来建立到一个SQL Server实例的连接的网络库。支持的值包括: dbnmpntw (Named Pipes)、dbmsrpcn (Multiprotocol/RPC)、dbmsvinn(Banyan Vines)、dbmsspxn (IPX/SPX)和dbmssocn (TCP/IP)。协议的动态链接库必须被安装到适当的连接,其缺省值为TCP/IP。
  • Packet Size(数据包大小):用来和数据库通信的网络数据包的大小。其缺省值为8192。
  • Password(密码)/Pwd:与帐户名相对应的密码。
  • Persist Security Info(保持安全信息):用来确定一旦连接建立了以后安全信息是否可用。如果值为真的话,说明像用户名和密码这样对安全性比较敏感的数据可用,而如果值为伪则不可用。重置连接字符串将重新配置包括密码在内的所有连接字符串的值。其缺省值为伪。
  • Pooling(池):确定是否使用连接池。如果值为真的话,连接就要从适当的连接池中获得,或者,如果需要的话,连接将被创建,然后被加入合适的连接池中。其缺省值为真。
  • User ID(用户ID):用来登陆数据库的帐户名。
  • Workstation ID(工作站ID):连接到SQL Server的工作站的名称。其缺省值为本地计算机的名称。

插图2.1:为SQL Server实例配置验证模式

 

添加一个Windows登录

解决SQL Server 连接时的一些基本问题后总结

使用Windows身份验证,你的用户在能访问SQL Server前需要验证Windows登录账号。然后你可以授予一个Windows组连接到SQL Server,或者你可以授予许可给单独的Windows用户,如果你不想授予集体许可。

总结如下:

使用SSMS管理安全的一个好处是你可以同时配置登录和数据库访问。启用Windows登录到访问SQL Server和AdventureWorks2012数据库。使用下列步骤,并假定本地机器已经定义了woodytu用户。

1、SQL Server的连接方式

1.打开SSMS,确保对象浏览器窗体可见,并且你已经连接到SQL Server实例

以本地服务器(LocalHost),数据库(Northwind)为例,可以有以下一些连接方式

2.展开服务器对象的树状视图,然后展开节点。你会看到如插图2.2所示的多个子节点。

SqlConnection conn=new SqlConnection( "Server=LocalHost;Integrated Security=SSPI;Database=Northwind");

插图2.2:服务器对象浏览器的安全性部分,你定义的登录的地方

SqlConnection conn = new SqlConnection("Data Source=LocalHost;Integrated Security=SSPI;Initial Catalog=Northwind;");

3.右击节点,从弹出的菜单里选择来打开——新的对话框

SqlConnection conn = new SqlConnection(" Data Source=LocalHost;Initial Catalog=Northwind;Integrated Security=SSPI;Persist Security Info=False;Workstation Id=XURUI;Packet Size=4096; ");
SqlConnection myConn = new SqlConnection("Persist Security Info=False;Integrated Security=SSPI;Database=northwind;Server=LocalHost");
SqlConnection conn = new SqlConnection(" Uid=sa;Pwd=***;Initial Catalog=Northwind;Data Source=LocalHost;Connect Timeout=900");

4.确保单选框已经选择