关闭 x
IT技术网
    技 采 号
    ITJS.cn - 技术改变世界
    • 实用工具
    • 菜鸟教程
    IT采购网 中国存储网 科技号 CIO智库

    IT技术网

    IT采购网
    • 首页
    • 行业资讯
    • 系统运维
      • 操作系统
        • Windows
        • Linux
        • Mac OS
      • 数据库
        • MySQL
        • Oracle
        • SQL Server
      • 网站建设
    • 人工智能
    • 半导体芯片
    • 笔记本电脑
    • 智能手机
    • 智能汽车
    • 编程语言
    IT技术网 - ITJS.CN
    首页 » SQL Server »SQL Server数据库对连接字符串的安全性处理

    SQL Server数据库对连接字符串的安全性处理

    2011-08-09 16:52:00 出处:ITJS
    分享

    本文我们主要介绍了关于SQL Server数据库连接字符串的定义以及它的安全性问题的一些知识,接下来就让我们一起来了解一下这一过程吧。

    一、数据库安全性

    1)尽量使用Windows身份验证而不是SQL Server 验证。

    安全容易管理:使用Windows身份验证:连接时需要写一个Windows集成的安全性,连接时使用的是本机正在使用的用户,或者是IIS正在连接到SQL Server的用户。使用集成的用户连接到SQL Server。在Web应用程序,我们需要了解是哪个用户连接到了SQL Server,默认下,放在IIS的虚拟目录应用程序,用集成的身份验证访问SQL Server,会通过IIS里的aspnet虚拟用户访问后台的SQL数据库。就需要指定它的权限来访问数据库。 假如通过希望客户端,集成Windows身份验证,需要在IIS里面对这个用户指定权限。Asp.net仍然后使用aspnet用户,需要通过web.config模拟<identity>结点来配置,就可以将IE传过来的用户传到后台,但是注意连接过多的话,因为每个人连接集成不一样,不会使用连接池。

    使用SQL Server 验证:连接到后台的SQL Server要知道哪个用户,连接时需要输入用户名和密码。

    不需要在连接字符串中设置用户名和密码:在登录时输入用户名和密码,更加安全,由Windows控制。用户名和密码放在本机的数据库里面,放在与环境里面。

    可以通过密码策略保证安全:比如:在域环境里面,指定密码策略,保证密码的复杂度,密码不重复。

    密码不会通过明文在网络中传递,集成Windows 身份验证:

    SqlClient : Integrated Security = true   or  Integrated Security = SSPI  OleDb   :Integrated Security = true  Odbc    :Trusted_Connection = yes ;   OracleClient :Integrated Security = true 

    二、定义连接字符串

    1)Persist Security Info的默认设置为 false。

    2)假如将其设置为TRUE 或FALSE,则允许再打开连接后通过获取安全敏感信息(包括用户ID和密码)确保的连接之后不会返回到应用程序。

    3)保持将Persist Security Info显示的设置为false ,以确保不受信任的来源不能访问连接字符串。

    DEMO1: 修改Persist Security Info

    using System;   using System.Data.SqlClient;   namespace 修改Persist_Security_Info   {   class Program   {   static void Main(string[] args)   {    //persist Security Info = false  SqlConnection conn2 = new SqlConnection("server=.;database=Test;uid =sa;pwd=sa; Persist Security Info = false");      conn2.Open();   if (!string.IsNullOrEmpty(conn2.ConnectionString))   {   Console.WriteLine(conn2.ConnectionString);   }   conn2.Close();   //persist Security Info = true  SqlConnection conn1 = new SqlConnection("server=.;database=Test;uid=sa;pwd=sa;Persist Security Info = true;");   conn1.Open();   if (!string.IsNullOrEmpty(conn1.ConnectionString))   {   Console.WriteLine(conn1.ConnectionString);   }   conn1.Close();   }   }   } 

    三、连接字符串的注入式攻击 

    有些连接是通过SQL Server身份验证连接的,比如:企业里面的Windows应用程序,输入用户名密码就是登录(SQL Server的用户名和密码),权限(能看哪些数据,不能看哪些数据)是通过SQL Server来控制的。

    1)类似于SQl 注入式攻击。

    2)在连接字符串中通过封号来加入其他的参数。

    3)例如: str = constr ="server= .; database=Test;uid =sa ;pwd="+password ;输入的是: password= "sa; Pooling = true ;Min Pool Size = 999999 ; Max Pool Szzie = 999999;"

    解决方法——>使用连接字符串生成器

    1)ADO.NET2.0 为不同数据库提供程序引入了新的连接字符串生成器

    2)从DbConnectionStringBuilder继承:

    提供程序

    ConnectionStringBuilder类

    System.Data.SqlClient

    SqlConnectionStringBuilder

    System.Data.OleDb

    OleDbConnectionStringBuilder

    System.Data.Odbc

    OdbcConnectionStringBuilder

    System.Data.OracleClient

    OracleConnectionStringBuilder

    便于不同数据库提供程序连接字符串的编写。

    可以避免连接字符串注入式攻击(还可以用 '.' 运算符赋值)

    DEMO2:连接字符串生成器。

    private void button1_Click(object sender, EventArgs e)   {   SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();   builder.DataSource = txtServer.Text.Trim();   builder.InitialCatalog = txtDb.Text.Trim();   builder.UserID = txtDb.Text.Trim();   builder.Password = txtPwd.Text.Trim();   this.txtConStr.Text = builder.ConnectionString;    } 

    四、存储连接字符串

    将整个连接字符串存储,不希望被查看连接字符串。

    方法一:放在一个不知道的地方

    方法二:加密

    连接字符串存储在:

    1)配置文件(不隐蔽)。

    2)COM+Catalog。

    3)Windows注册表里面。

    4)自定义文件结构。

    DEOM3:在配置文件中存储连接字符串。

    Load事件:

    private void Form1_Load(object sender, EventArgs e)   {   //连接字符串直接保存在 App.config里面   ConnectionStringSettings settings =  ConfigurationManager.ConnectionStrings["strCon"];   this.textBox1.Text = settings.ConnectionString;   //连接通过configSource保存在 connectionString.config   this.txtCon.Text = ConfigurationManager.AppSettings["conn"].ToString();   }   App.config:   < xml version="1.0" encoding="utf-8"  >  <configuration>  <connectionStrings >  <add name="strCon" connectionString="server=.;database=Test;uid=sa;pwd=sa"/>  </connectionStrings>  <!--在connectionString.config文件里面指定 appSettings 节点的配置   便于单独对这个节点进行加密 [需要将connectionString.confi复制到输出目录下,否则     App.config找不到]-->  <appSettings configSource="connectionString.config"/>  </configuration>  connectionString.config:   <appSettings>  <add key="conn" value="server=.;database=Test;uid=sa;pwd=sa"/>  </appSettings> 

    五、加密连接字符串

    .NET当中的加密算法:

    1)对称算法(3DES)  :保存密钥。

    2)非对称算法(RSA) :通过公钥(保存在XML里面)控制加密解密。

    3)数据保护(DPAPI)   :不是加密算法,而是使用DPAPI(一个WindowsAPI,数据保护的API,使用Windows本机用户的安全性)。

    六、受保护的配置

    1)使用受保护配置对连接字符串值进行加密的配置文件不以明文形式显示连接字符串, 而是以加密形式存储它们。

    2)在对页进行请求时在对页进行请求时,.NET Framework 对连接字符串信息进行解密,并使其可供应用程序使用。

    创建配置

    1)ASP.NET IIS 注册工具(Aspnet_regiis.exe) 

    –  对Web.config文件(其他的文件也是一样的)的节进行加密和解密、创建或删除密钥容器、导出和导入密钥容器信息以及管理对密钥容器的访问。

    2)System.Configuratiion 命名空间中的受保护配置命名空间中的类。

    – DPAPIProtectedConfigurationProvider。使用Windows 数据保护API (DPAPI) 对数据进行加密和解密。

    – RsaProtectedConfigurationProvider 。使用RSA 加密算法对数据进行加密和解密。

    关于SQL Server数据库连接字符串的安全性问题就介绍到这里了,希望本次的介绍能够对您有所帮助。

    上一篇返回首页 下一篇

    声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

    别人在看

    hiberfil.sys文件可以删除吗?了解该文件并手把手教你删除C盘的hiberfil.sys文件

    Window 10和 Windows 11哪个好?答案是:看你自己的需求

    盗版软件成公司里的“隐形炸弹”?老板们的“法务噩梦” 有救了!

    帝国CMS7.5编辑器上传图片取消宽高的三种方法

    帝国cms如何自动生成缩略图的实现方法

    Windows 12即将到来,将彻底改变人机交互

    帝国CMS 7.5忘记登陆账号密码怎么办?可以phpmyadmin中重置管理员密码

    帝国CMS 7.5 后台编辑器换行,修改回车键br换行为p标签

    Windows 11 版本与 Windows 10比较,新功能一览

    Windows 11激活产品密钥收集及专业版激活方法

    IT头条

    智能手机市场风云:iPhone领跑销量榜,华为缺席引争议

    15:43

    大数据算法和“老师傅”经验叠加 智慧化收储粮食尽显“科技范”

    15:17

    严重缩水!NVIDIA将推中国特供RTX 5090 DD:只剩24GB显存

    00:17

    无线路由大厂 TP-Link突然大裁员:补偿N+3

    02:39

    Meta 千万美金招募AI高级人才

    00:22

    技术热点

    微软已修复windows 7/windows 8.1媒体中心严重漏洞 用户可下载安

    卸载MySQL数据库,用rpm如何实现

    windows 7中使用网上银行或支付宝支付时总是打不开支付页面

    一致性哈希算法原理设计

    MySQL数字类型中的三种常用种类

    如何解决SQL Server中传入select语句in范围参数

      友情链接:
    • IT采购网
    • 科技号
    • 中国存储网
    • 存储网
    • 半导体联盟
    • 医疗软件网
    • 软件中国
    • ITbrand
    • 采购中国
    • CIO智库
    • 考研题库
    • 法务网
    • AI工具网
    • 电子芯片网
    • 安全库
    • 隐私保护
    • 版权申明
    • 联系我们
    IT技术网 版权所有 © 2020-2025,京ICP备14047533号-20,Power by OK设计网

    在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。