数据库相关知识点

  1. SQL, 对表的理解, 对表的主键, 外键的理解, 视图, 为什么要有视图, 视图有什么功能, 视图与表有什么区别
    1. 主键是唯一标识的一条记录,不能重复,不能为空.
    2. 表的外键是另一个表的主键,可以重复,可以为空
    3. 索引,字段没有重复值,可以有空值,可以有一个或者多个唯一索引.

      视图 

      1. 是一个或者多个表按照条件组合成的结果集
      2. 对表用增删改查等SQL进行操作,对视图权用select操作
      3. 表是物理存在的,视频是虚拟的内存表
  2. 存储过程, 什么是存储过程
    1. 是一组完成特定功能的程序集,编译存放数据库中,用户指定名称和参数就可以执行,接受参数,返回单个或多个结果集
    2. 储存过程创建编译时存在Precedure Cache中,所以比SQL执行要快
    3. 储存过程存在服务器端,容易修改,而SQL存在客户端,修改后部署比较麻烦
  3. 如何通过Dataset更新数据
    1. 使用DataAdpater的批量更新,好处是不用写具体的sql脚本,尤其是做web服务这个优势非常吸引人。
  4. sql server中Join有几种
    1. JOIN: 如果表中有至少一个匹配,则返回行 (也就是 inner join)
      LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
      RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
      FULL JOIN: 只要其中一个表中存在匹配,就返回行
  5. dataset强类型和弱类型的区别
    1. 弱类型 DataSet 和强类型 DataSet 在性能上肯定是有区别的,但这种区别非常细微,完全可以忽略不计,总的来说强类型 DataSet 应用起来简单,不容易出错
  6. 事实
    1. 事务具有原子性,一致性,隔离性,持续性.
    2. 事实是应用程序一列表操作,所有操作必须成功完成,否则每个操作中所有的更改会被取消.
    3. 事务有两种结果,1.当所有操作全部执行,事务提交.2.如果其中一步失败,发生回滚操作.撤销所有的操作.(select, update,delete).
  7. 游标
    1. 定位结果集的行,通过判断全局变量@@Fetch_Status是否到最后不等于0表示到最后
  8. 触发器类型?区别?

    事前触发器和事后触发器。事前触发器是在事件触发之前完成,而事后触发器是在事件完成之后触发。

    语句级触发器和行级触发器。语句级触发器可以在语句执行完之前或者之后执行,而行级触发器发生在触发器所影响的每一行后触发。

  9. 聚集索引和非聚集索引?

    聚集索引,索引的顺序就是物理存储顺序,而非聚集索引却没有这么规定。

  10. 什么是SQL 注入,如何防范。

    欺骗服务器执行恶意的SQL命令。
    第一:替换单引号,即把所有单独出现的单引号改成两个单引号
    第二:删除用户输入内容中的所有连字符
      ⑵ 用存储过程来执行所有的查询
      ⑶ 限制表单或查询字符串输入的长度。
      ⑷ 检查用户输入的合法性,确信输入的内容只包含合法的数据。
      ⑸ 将用户登录名称、密码等数据加密保存。
      ⑹ 检查提取数据的查询所返回的记录数量。

如何防范SQL注入式攻击?

好在要防止ASP.NET应用被SQL注入式攻击闯入并不是一件特别困难的事情,只要在利用表单输入的内容构造SQL命令之前,把所有输入内容过滤一番就可以了。过滤输入内容可以按多种方式进行。

⑴ 对于动态构造SQL查询的场合,可以使用下面的技术:

第一:替换单引号,即把所有单独出现的单引号改成两个单引号,防止攻击者修改SQL命令的含义。再来看前面的例子,"SELECT * from Users WHERE login = ''' or ''1''=''1' AND password = ''' or ''1''=''1'"显然会得到与"SELECT * from Users WHERE login = '' or '1'='1' AND password = '' or '1'='1'"不同的结果。

第二:删除用户输入内容中的所有连字符,防止攻击者构造出类如"SELECT * from Users WHERE login = 'mas' -- AND password =''"之类的查询,因为这类查询的后半部分已经被注释掉,不再有效,攻击者只要知道一个合法的用户登录名称,根本不需要知道用户的密码就可以顺利获得访问权限。

第三:对于用来执行查询的数据库帐户,限制其权限用不同的用户帐户执行查询、插入、更新、删除操作。由于隔离了不同帐户可执行的操作,因而也就防止了原本用于执行SELECT命令的地方却被用于执行INSERT、UPDATE或DELETE命令。

⑵ 用存储过程来执行所有的查询。SQL参数的传递方式将防止攻击者利用单引号和连字符实施攻击。此外,它还使得数据库权限可以限制到只允许特定的存储过程执行,所有的用户输入必须遵从被调用的存储过程的安全上下文,这样就很难再发生注入式攻击了。

⑶ 限制表单或查询字符串输入的长度。如果用户的登录名字最多只有10个字符,那么不要认可表单中输入的10个以上的字符,这将大大增加攻击者在SQL命令中插入有害代码的难度。

⑷ 检查用户输入的合法性,确信输入的内容只包含合法的数据。数据检查应当在客户端和服务器端都执行——之所以要执行服务器端验证,是为了弥补客户端验证机制脆弱的安全性。

在客户端,攻击者完全有可能获得网页的源代码,修改验证合法性的脚本(或者直接删除脚本),然后将非法内容通过修改后的表单提交给服务器。因此,要保证验证操作确实已经执行,唯一的办法就是在服务器端也执行验证。你可以使用许多内建的验证对象,例如 RegularExpressionValidator,它们能够自动生成验证用的客户端脚本,当然你也可以插入服务器端的方法调用。如果找不到现成的验证对象,你可以通过CustomValidator自己创建一个。

⑸ 将用户登录名称、密码等数据加密保存。加密用户输入的数据,然后再将它与数据库中保存的数据比较,这相当于对用户输入的数据进行了"消毒"处理,用户输入的数据不再对数据库有任何特殊的意义,从而也就防止了攻击者注入SQL命令。 System.Web.Security.FormsAuthentication类有一个 HashPasswordForStoringInConfigFile,非常适合于对输入数据进行消毒处理。

⑹ 检查提取数据的查询所返回的记录数量。如果程序只要求返回一个记录,但实际返回的记录却超过一行,那就当作出错处理

SQL数据库相关的更多相关文章

  1. sql数据库相关语句

    易错点 Where需要放在from语句之后:where中不能出现聚合函数(就是能够将几行一列合并为一行一列的函数,比如max,min,avg,count()):但是可以出现其他,如比较符,getdat ...

  2. 02 MySQL_数据库相关的SQL

    数据库相关的SQL 1. 查看所有数据库 show databases; 2. 创建数据库 格式:create database 数据库名称: 示例: create database db1; 3. ...

  3. SQL Server相关书籍

    SQL Server相关书籍 (排名不分先后) Microsoft SQL Server 企业级平台管理实践 SQL Server 2008数据库技术内幕 SQL Server性能调优实战 SQL S ...

  4. Android数据库相关整理

    今天对Android中数据库相关的操作和代码做了一个整理,便于自己之后的查阅.主要内容有: 1.原生数据库写法 2.终端进sqlite的操作 3.第三方库 4.事务处理 5.权限和路径 一.原生数据库 ...

  5. MySQL查看数据库相关信息

    使用MySQL时,需要了解当前数据库的情况,例如当前的数据库大小.字符集.用户等等.下面总结了一些查看数据库相关信息的命令   1:查看显示所有数据库 mysql> show databases ...

  6. sqlite数据库相关总结

    1. sqlite是轻量型.关系型管理系统,是嵌入式的,占用资源低.可移植性强,比mySql处理速度快,现在主流的版本是sqlite3 2. sqlite中的数据类型有TEXT(字符串,采用UTF-8 ...

  7. Atitit  基于meta的orm,提升加速数据库相关应用的开发

    Atitit  基于meta的orm,提升加速数据库相关应用的开发 1.1. Overview概论1 1.2. Function & Feature功能特性1 1.2.1. meta api2 ...

  8. Azure SQL 数据库:服务级别与性能问答

    ShawnBice    2014 年 5 月 5 日上午 10:00 几天前,我发表了一篇文章,并就 4 月 24 日发布的适用于Windows Azure SQL 数据库的新服务级别提供了一些预料 ...

  9. Azure SQL 数据库:新服务级别问答

    ShawnBice   2014 年 5 月 1 日上午 11:10 本月初,我们庆祝了SQL Server 2014 的推出,并宣布正式发布分析平台系统,同时分享了智能系统服务预览版.Quentin ...

随机推荐

  1. 加速 Android Studio 的编译速度 2.2

    Android studio 2.2 当中有一项新的功能:Dex In Process. 这项功能可以动态的加快编译速度,以及提高Instant Run 的效率. 那么怎么来使用这项新功能呢?你只需要 ...

  2. Jenkins和Docker以及Kubernetes结合考虑

    今天搞了一下Jenkins和Docker的结合,我在想几个问题: 构建是经常的,构建最大的目标还是生成一个包或者应用 发布应用也是频繁的,发布本质上是把这个包放到可运行的环境中便于测试 如果每次构建我 ...

  3. C语言嵌入式系统编程修炼

    C语言嵌入式系统编程修炼 2008-08-19 作者:宋宝华 来源:天极网 C语言嵌入式系统编程修炼之背景篇 本文的讨论主要围绕以通用处理器为中心的协议处理模块进行,因为它更多地牵涉到具体的C语言编程 ...

  4. 16、Xtrabackup备份与恢复

    XTRABACKUP xtrabackup是percona公司开发的第三方备份软件,只备份innodb引擎表的ibd文件(frm不备份),不备份myisam引擎表.备份性能很高,备份期间没有任和锁,d ...

  5. scikit-learn入门学习记录

    一加载示例数据集 from sklearn import datasets iris = datasets.load_iris() digits = datasets.load_digits() 数据 ...

  6. Sense编辑器(Sense Editor)

    Sense编辑器(Sense Editor) 学习了:https://blog.csdn.net/AbnerGong/article/details/50776605 Sense是一个方便的控制台,用 ...

  7. Polar Code主要研究者的个人主页(持续更新中........)

    Polar Code主要研究者的个人主页(持续更新中........) 1. Polar码的编译码.以及List译码算法,都少不了Ido Tal这位大牛. http://webee.technion. ...

  8. 【ACM】Crixalis's Equipment

      #include "stdio.h" #include "stdlib.h" /* 贪心算法: Ai->x 表示第i个物品的体积 Ai->y 表 ...

  9. 【转】C语言中不同的结构体类型的指针间的强制转换详解

    C语言中不同类型的结构体的指针间可以强制转换,很自由,也很危险.只要理解了其内部机制,你会发现C是非常灵活的. 一. 结构体声明如何内存的分布, 结构体指针声明结构体的首地址, 结构体成员声明该成员在 ...

  10. 主动通知Android系统图库进行更新

    项目中遇到调用图库进行图片的选择,因为不能主动及时更新,遂实现代码调用实现主动及时更新. 废话不多刷,看代码. 方式一,发送一个广播, sendBroadcast(new Intent(Intent. ...