文章目录

  • 一.视图
  • 1.视图的概念
  • (1)视图的数据
  • (2)表视图的多样性
  • (3)视图的用途
  • 2.视图的使用
  • 1>视图的创建
  • (1)使用图文创建视图
  • (2)使用T-SQL创建视图
  • 2> 删除视图
  • 使用T-SQL删除
  • 3>视图注意事项
  • 二.存储过程
  • 1.存储过程概念:
  • 2.存储过程分类
  • 1>系统存储过程
  • 2>自定义存储过程
  • 3>扩展存储过程
  • 3.调用存储过程
  • 4.创建自定义存储过程
  • 5.存储过程优点
  • 三.SQL注入
  • 1.SQL注入概念
  • 2.如何防止SQL注入
  • (1)不要使用动态SQL
  • (2)不要将敏感数据保留在纯文本中
  • (3)限制数据库权限和特权
  • (4)避免直接向用户显示数据库错误
  • (5)使用Web应用程序防火墙(WAF)
  • (6)将数据库更新为最新的可用修补程序


一.视图

1.视图的概念

  1. 是存储在服务器端的一个查询块,是一张虚拟表
  2. 表示一张表的部分数据或多张表的综合数据
  3. 其结构和数据是建立在对表的查询基础上
  4. 视图的使用,跟普通数据表的查询使用完全一样

(1)视图的数据

数据存放在视图所引用的原始数据表中

(2)表视图的多样性

一个或多个原始数据表,根据不同用户的不同需求,可以创建不同的视图

(3)视图的用途

① 筛选表中的行
② 防止未经许可的用户访问敏感数据
③ 降低数据库的复杂程度
④ 将多个物理数据库抽象为一个逻辑数据库

2.视图的使用

1>视图的创建

(1)使用图文创建视图

sql server 视图和存储过程 sql数据库视图和存储过程_存储过程


选择对应的数据库,视图右键‘新建视图’,选择要结合的表,保存生成视图

(2)使用T-SQL创建视图

语法格式:

CREAT VIEW 视图名称
	AS
    SELECT 语句

案例:

CREATE VIEW StudentScore
AS
SELECT Student.SId,Student.Sname,class1,class2,class3 FROM Student JOIN(SELECT t1.SId,class1,class2,class3  FROM
(SELECT SId , score as class1 FROM Sc WHERE CId=3001)t1,
(SELECT SId, score as class2 FROM Sc WHERE CId=3002)t2,
(SELECT SId, score AS class3 FROM Sc WHERE CId=3003)t3 WHERE t1.SId=t2.SId AND t2.SId=t3.SId)r
ON Student.SId=r.SId

查看:

SELECT*FROM StudentScore

结果:

sql server 视图和存储过程 sql数据库视图和存储过程_存储过程_02

2> 删除视图

使用T-SQL删除

语法格式:

IF EXISTE (SELECT * FROM sysobjects WHERE name='视图名')
	DROP VIEW 视图名

3>视图注意事项

  1. 视图中可以使用多个表
  2. 一个视图可以嵌套另一个视图(尽量少用)
  3. 视图定义中的SELECT语句不能包括下列内容
    ① ORDER BY子句,除非在SELECT语句的选择列表中也有一个TOP子句
    ②INTO关键字
    ③引用临时表或表变量

二.存储过程

1.存储过程概念:

1.预先存储号的SQL程序
2.保存在SQL Server中(与视图一样)
3.通过名称和参数进行执行
①在数据库服务器端直接调用(DBA)
②供应程序调用(软件开发工程师)
4.可包含数据操纵语句,变量,逻辑控制语句

2.存储过程分类

系统存储过程,自定义存储过程,扩展存储过程

1>系统存储过程

(1)系统存储过程的名称一般以“sp_”开头
(2)用SQL Server创建,管理和使用
(3)存放在master数据库中

存储过程名称

说明

sp_database

列出服务器上的所有数据库

sp_helpdb

报告有关指定数据库或所有数据库的信息

Sp_ renamedb

更改数据库的名称

sp_tables

返回当前环境下可查询的对象的列表

sp_columns

返回某个表的所有列的信息

sp _help

查看某个表的所有信息

sp_helpconstraint

查看某个表的约束

sp_helpindex

查看某个表的索引

sp_stored procedures

列出当前环境中华到的所有的存储过程

sp_password

添加或修改登录账户的密码

sp_helptext

显示默认值,未加密的存储过程,用户定义的存储过程、触发器或视图的实际文本

2>自定义存储过程

由开发人员(DBA)为了实现数据库中的某种操作自定义的一些SQL编程
由用户自定在所操作的数据库中创建的存储过程
1.有无返回值
2.有无参数

3>扩展存储过程

(1)扩展存储过程的名称通常以‘xp_’开头
(2)类型与编程语言(C#)创建的外部存储过程
(3)以DLL形式单独存在
①可以执行Windows中的DOS命名的一些操作
②以文本方式任何输出
xp_cmdshell存储过程

EXEC xp_ cmdshell ’mkdir D: \Product’

执行以上代码需开启权限

sql server 视图和存储过程 sql数据库视图和存储过程_存储过程_03


登录用户右键选择’方面’(此SQL Server版本为2012) 选择‘外围应用配置器’,选择‘XPCmdShellEnabled’项改为True

3.调用存储过程

语法格式:

EXECUTE 存储过程名 [参数1],[参数2]..
--或者
	EXEC 存储过程名 [参数]...

4.创建自定义存储过程

语法格式:

CRECT PROCEDURE[PROC] 存储过程名称
  @参数1 数据类型=默认值 OUTPUT,
  @参数2 数据类型=默认值 OUTPUT,
  ...
  @参数n 数据类型=默认值 OUTPUT
 AS
  SQL语句

存储过程的参数:
(1)参数可选
(2)参数分为输入参数,输出参数(若存储过程有返回值,即OUTPUT标记输出参数)
(3)输入参数允许有默认值,一般带有默认值的输入参数在最后

5.存储过程优点

(1)执行速度更快
(2)允许模块化程序设计
(3)提高系统的安全性
(4)减少网络流通量
(5)视图和存储过程的重要有点:安全且执行速度快

三.SQL注入

1.SQL注入概念

通过把SQL命令插入到表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web 表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。

2.如何防止SQL注入

(1)不要使用动态SQL

避免将用户提供的输入直接放入SQL语句中;最好使用准备好的语句和参数化查询,这样更安全。

(2)不要将敏感数据保留在纯文本中

加密存储在数据库中的私有/机密数据;这样可以提供了另一级保护,以防攻击者成功地排出敏感数据。

(3)限制数据库权限和特权

将数据库用户的功能设置为最低要求;这将限制攻击者在设法获取访问权限时可以执行的操作。

(4)避免直接向用户显示数据库错误

攻击者可以使用这些错误消息来获取有关数据库的信息。

(5)使用Web应用程序防火墙(WAF)

对访问数据库的Web应用程序使用Web应用程序防火墙(WAF)
这为面向Web的应用程序提供了保护,它可以帮助识别SQL注入尝试;根据设置,它还可以帮助防止SQL注入尝试到达应用程 序(以及数据库)。

(6)将数据库更新为最新的可用修补程序

这可以防止攻击者利用旧版本中存在的已知弱点/错误。