SQL Server中视图,存储过程,注入

文章目录

  • 一.视图
    • 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中视图,存储过程,注入_第1张图片
选择对应的数据库,视图右键‘新建视图’,选择要结合的表,保存生成视图

(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中视图,存储过程,注入_第2张图片

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 显示默认值,未加密的存储过程,用户定义的存储过程、触发器或视图的实际文本

https://www.cnblogs.com/accumulater/p/6223792.html

2>自定义存储过程

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

3>扩展存储过程

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

EXEC xp_ cmdshell ’mkdir D: \Product’

执行以上代码需开启权限
SQL Server中视图,存储过程,注入_第3张图片
登录用户右键选择’方面’(此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)将数据库更新为最新的可用修补程序

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

你可能感兴趣的:(#,T-SQL)