《安全性-安全保护及用户.ppt》由会员分享,可在线阅读,更多相关《安全性-安全保护及用户.ppt(27页珍藏版)》请在三一文库上搜索。
1、第22章 安全性-安全保护及用户权限,安全性是数据库最重要的特性之一,可将保护SQL Server视为一系列步骤,其涉及到4方面:平台、身份验证、对象(包括数据)及访问系统的应用程序;而SQL注入是一种最为常见的攻击方式,严重威胁到SQL Server的安全性;合理的用户权限也是系统安全的保障之一。,22.1 架构,架构是包含表、视图、过程等的容器,其位于数据库内部,而数据库位于服务器内部。这些实体像嵌套框一样放置在一起。服务器是最外面的框,而架构是最里面的框。,22.1.1 用户与架构的分离,在SQL Server 2008中,架构不等效于数据库用户。现在,每个架构都是独立于其创建数据库用户
2、存在的不同命名空间。也就是说,架构只是对象的容器。任何用户都可以拥有架构,并且架构所有权可以转移。,22.1.2 新目录视图,在SQL Server 2008中架构是反映的显式实体。因此,架构只能有一个所有者。但一个用户可以拥有一个架构,也可以拥有多个架构,还可以不荣拥有架构。这种复杂关系并未在以前数据库版本的系统表中反映,因此SQL Server 2008使用了新的目录视图,以准确反映新的元数据。,22.1.3 什么是默认架构,每个用户都拥有一个默认架构,可以使用CREATE USER或ALTER USER的DEFAULT_SCHEMA选项来设置和更改默认架构。如果未定义DEFAULT_SC
3、HEMA,则数据库用户将使用dbo作为默认架构。如存储过程的名字一般为dbo.uspGetBillOfMaterials。,22.2 主体,主体是可以请求SQL Server资源的实体。与SQL Server授权模型的其他组件一样,主体也可以按层次结构排列。主体的影响范围取决于主体定义的范围(Windows、服务器或数据库),以及主体是否不可分或是一个集合。,22.2.1 典型的主体,在SQL Server 2008中典型的主体有SQL Server sa登录名、public数据库角色,以及基于证书的SQL Server登录名。 (1)SQL Server sa登录名 (2)public数据库
4、角色 (3)基于证书的SQL Server登录名 (4)客户端和数据库服务器 (5)非主体,INFORMATION_SCHEMA和sys,22.2.2 选择身份验证模式,对于SQL Server 2008的登录名主体,在安装过程中,必须为数据库引擎选择身份验证模式。可供选择的模式有两种:Windows身份验证模式和混合模式。Windows身份验证模式会启用Windows身份验证并禁用SQL Server身份验证。混合模式会同时启用Windows身份验证和SQL Server身份验证。Windows身份验证始终可用,并且无法禁用。 (1)配置身份验证模式 (2)通过Windows身份验证进行连接
5、 (3)通过SQL Server身份验证进行连接 (4)SQL Server身份验证的缺点 (5)SQL Server身份验证的优点,22.3 SQL Server登录用户的管理,操作SQL Server的人员一般称为SQL Server用户,在打开SQL Server后,都会出现一个连接对话框,要求输入服务器名称和身份验证等信息。身份验证信息就是一个用户的用户名和密码,通过SQL Server的“用户”对象,可以设置数据库的使用权限。同一个数据库可以拥有多个用户,同一个用户也可以同时访问多个数据库。,22.3.1 添加用户,使用SQL Server Management Studio可以可视
6、化的添加用户,步骤如下所示。,22.3.2 使用用户登录,创建登录名后,可以用该登录名来登录数据库实例,下面就列用上面创建好的登录名进行操作,步骤如下所示。,22.3.3 为用户设置权限,本节介绍在SQL Server Management Studio里为用户添加权限的方法。步骤如下。,22.4 角色,为便于管理服务器和数据库上的权限,SQL Server提供了若干“角色”,这些角色是用于分组其他主体的安全主体。“角色”类似于Microsoft Windows操作系统中的“组”。,22.4.1 服务器级别角色,服务器级角色也称为“固定服务器角色”,因为用户不能创建新的服务器级角色。服务器级角
7、色的权限作用域为服务器范围。用户可以向服务器级角色中添加SQL Server登录名、Windows账户和Windows组。固定服务器角色的每个成员都可以向其所属角色添加其他登录名。,22.4.2 数据库级别的角色,为便于管理数据库中的权限,SQL Server同样也提供了若干“角色”,这些角色是用于分组其他主体的安全主体。数据库级角色的权限作用域为数据库范围。SQL Server中有两种类型的数据库级角色:数据库中预定义的“固定数据库角色”和可以自己创建的“灵活数据库角色”。,22.5 权限,每个SQL Server安全对象都有可以授予主体的关联权限。从大的范围来讲,SQL Server 20
8、08的权限也无非是服务器级安全性的权限,就是数据库库安全性的权限。,22.5.1 了解权限,本节需要先了解数据库都提供了哪些权限。,22.5.2 权限层次结构,数据库引擎管理着可以通过权限进行保护的实体的分层集合。这些实体称为“安全对象”。在安全对象中,最突出的是服务器和数据库,但可以在更细的级别上设置离散权限。SQL Server通过验证主体是否已获得适当的权限来控制主体对安全对象执行的操作。,22.5.3 将用户设为服务器角色成员,既然角色相当于用户组,那么就可以将用户设为角色成员,以继承角色的权限,下面将WANG账户设为dbcreator角色成员为例,介绍如何将用户设为角色成员。,22.
9、5.4 将用户设为数据库角色成员,将用户设为数据库角色成员与将用户设为服务器角色成员的操作类似,只是权限不同,下面以将WANG账户设为db_datareader角色成员为例,介绍如何将用户设为数据库角色成员。,22.6 SQL注入的安全防范,现在SQL注入已经成为所有数据库应用程序所必须注意的问题。SQL注入是一种攻击方式,在这种攻击方式中,恶意代码被插入到字符串中,然后将该字符串传递到SQL Server的实例以进行分析和执行。任何构成SQL语句的过程都应进行注入漏洞检查,因为SQL Server将执行其接收到的所有语法有效的查询。一个有经验的、坚定的攻击者甚至可以操作参数化数据。,22.6
10、.1 什么是SQL注入,SQL注入的形式包括直接将代码插入到与SQL命令串联在一起,并使其得以执行的用户输入变量。一种间接的攻击会将恶意代码注入要在表中存储或作为元数据存储的字符串。在存储的字符串随后串连到一个动态SQL命令中时,将执行该恶意代码。,22.6.2 验证所有用户输入,始终通过测试类型、长度、格式和范围来验证用户输入。实现对恶意输入的预防时,注意应用程序的体系结构和部署方案。注意,设计为在安全环境中运行的程序可能会被复制到不安全的环境中。,22.6.3 检查代码中的SQL注入,应检查所有调用EXECUTE、EXEC或sp_executesql的代码。可以使用类似如下的查询来帮助标识
11、包含这些语句的过程。 1SELECT object_Name(id) FROM syscomments 2WHERE UPPER(text) LIKE %EXECUTE (% 3OR UPPER(text) LIKE %EXEC (% 4OR UPPER(text) LIKE %SP_EXECUTESQL% (1)使用QUOTENAME()和REPLACE()包装参数 (2)由数据截断启用的注入 (3)使用QUOTENAME(variable,)和REPLACE()时的截断 (4)使用QUOTENAME(variable,)时的截断,22.7.1 描述登入、用户、角色的区别,这个题目很容易把考
12、试者绕进去。它们的区别和说明如下。 登入是SQL实例级的。用户是数据库级的。角色有实例级和数据库级两种。 登入决定你是否能访问SQL实例。 用户与登录对应, 确实某个登录后, 它对那些数据库有哪些权限。. 角色是为了方便管理一类登录或者用户所具有的权限, 当某一类登录或者用户具有相同的权限时, 可以简单地给予它们对应的角色即可。,22.7.2 在SQL Server中如何堵住SQL注入的漏洞,要确保使用数据库的Web应用程序最少访问权限。管理员确保需要使用Web应用的SQL用户具有最小权限是十分必要的。Web应用程序不应当给予以诸如“sysadmin”的服务器管理员权限,或”db_owner”的数据库权限。,22.8 小结,数据库操作过程中,其安全性一直都是开发及人员最容易忽略的问题之一,对于数据库刚入门的用户更是如此。,