数据库相关知识点

  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. lnmp配置信息 4核8g优化

    MYSQL   my.conf# The following options will be passed to all MySQL clients[client]#password       = ...

  2. [原创]SSH中HibernateTemplate与HibernateDaoSupport关系

    UserDaoImpl继承了HibernateDaoSupport类,在findAll() 方法里面调用了getHibernateTemplate(), 同时applicationContext.xm ...

  3. CentOS 6.9下双网卡绑定单个IP地址及装网卡绑定到一个网桥(转)

    说明:经过查阅,原来双网卡绑定一个IP的专业名词叫做bond,可以实现负载均衡:如果想要实现两张网卡绑定到一个网桥,基本思路是两张网卡设置同一个网桥是行不通的,但如果先实现bond,然后将bond绑定 ...

  4. thinkphp去重统计数据sql

    DISTINCT 方法用于返回唯一不同的值 官方文档给出的示例: $Model->distinct(true)->field('userName')->select(); 解析的SQ ...

  5. PatchGuard Disabled V3

    https://twitter.com/Fyyre http://www.m5home.com/bbs/thread-5893-1-1.html http://pan.baidu.com/share/ ...

  6. Tracing SQL Queries in Real Time for MySQL Databases using WinDbg and Basic Assembler Knowledge

    https://www.codeproject.com/Articles/43305/Tracing-SQL-Queries-in-Real-Time-for-MySQL-Databas     As ...

  7. Inno Setup入门(二十五)——Inno Setup类参考(11)

    http://379910987.blog.163.com/blog/static/3352379720126693742406/ 今天说说TNewCheckListBox类.该类和ListBox差不 ...

  8. Swift之单例模式

    三种Swift实现单例模式的方法:全局变量,内部变量,dispatch_once方式 1. 全局变量 private let _singleton = Singleton() class Single ...

  9. mydate97的时间格式设置

    <script type="text/javascript" src="./WdatePicker.js"></script> < ...

  10. Oracle 10g数据库备份与恢复操作手册

    Oracle 10g数据库备份与恢复操作手册 目录 Oracle 10g数据库备份与恢复操作手册... 前言... 文档目的... 文档范围... 目标读者... 其他说明... 冷备份... 热备份 ...