400 likes | 463 Views
数据库原理与应用. 13 数据库安全性 郑捷. 关系查询处理和查询优化. 查询优化的概念 查询的步骤 查询优化 代数优化 物理优化. 查询的步骤. 查询分析 查询检查 查询优化 查询执行. 优化器性能高的原因. 可以从数据字典获取统计信息 自动更新统计信息,选择优化路径 考虑所有可能的执行计划 包含多种优化技术 总代价: I/O+CPU+ 内存 + 通信. 基于代价的优化. 启发式优化适合于解释性执行的场合 边解释,边查询统计信息等,并进行执行 对于编译或者半编译执行的场合,需要采用基于代价的优化方法. 数据库原理与应用. 5.
E N D
数据库原理与应用 13 数据库安全性 郑捷
关系查询处理和查询优化 • 查询优化的概念 • 查询的步骤 • 查询优化 • 代数优化 • 物理优化 郑捷 lzj@fjnu.edu.cn www.lzj.name
查询的步骤 • 查询分析 • 查询检查 • 查询优化 • 查询执行 郑捷 lzj@fjnu.edu.cn www.lzj.name
优化器性能高的原因 • 可以从数据字典获取统计信息 • 自动更新统计信息,选择优化路径 • 考虑所有可能的执行计划 • 包含多种优化技术 • 总代价:I/O+CPU+内存+通信 郑捷 lzj@fjnu.edu.cn www.lzj.name
基于代价的优化 • 启发式优化适合于解释性执行的场合 • 边解释,边查询统计信息等,并进行执行 • 对于编译或者半编译执行的场合,需要采用基于代价的优化方法 郑捷 lzj@fjnu.edu.cn www.lzj.name 数据库原理与应用 5
索引的分类和作用 • 单字段索引 与 复合索引 • 唯一索引 与 非唯一索引 • 聚集索引 与 非聚集索引 • 在查询中的作用 • 索引的代价 郑捷 lzj@fjnu.edu.cn www.lzj.name 数据库原理与应用 6
数据库安全性 • 安全概述 • 安全性控制 • 用户识别 • 自主与强制存取控制 • 授权与回收,角色 • 视图 • 审计、加密、统计安全 • SQL Server的安全体系 郑捷 lzj@fjnu.edu.cn www.lzj.name
安全问题的来源 • 问题的提出 • 数据库的一大特点是数据可以共享 • 数据共享必然带来数据库的安全性问题 • 数据库系统中的数据共享不能是无条件的共享 • 例:军事秘密、国家机密、新产品实验数据、商业信息、客户档案、医疗档案、银行储蓄数据等等…… • 带来问题:数据库安全性 郑捷 lzj@fjnu.edu.cn www.lzj.name
计算机系统安全 • 计算机系统安全性 • 为计算机系统建立和采取的各种安全保护措施,以保护计算机系统中的硬件、软件及数据,防止其因偶然或恶意的原因使系统遭到破坏,数据遭到更改或泄露等。 • 三类计算机系统安全性问题 • 技术安全类 • 管理安全类 • 政策法律类 郑捷 lzj@fjnu.edu.cn www.lzj.name
安全标准 • TCSEC标准: TCSEC/TDI • CC标准 郑捷 lzj@fjnu.edu.cn www.lzj.name
计算机系统安全设置 • 普通计算机,安全措施采取层层控制 • 用户 DBMS OS DB 郑捷 lzj@fjnu.edu.cn www.lzj.name
常用数据库控制方式 • 用户标识与鉴别 • 存取控制 • 授权与回收 • 强制存取控制 郑捷 lzj@fjnu.edu.cn www.lzj.name
授权与回收 • 授权首先是个策略问题 • 数据库管理系统负责实施 • 授权分为可传播的与不可传播的 • 授权主要针对某个对象上的某个操作的权限 郑捷 lzj@fjnu.edu.cn www.lzj.name
角色 • 数据库对授权,一般通过角色的方式进行 • 角色是一组权限的集合 • 每个用户可以在数据库中扮演多种不同角色,每个角色可以由多个不同用户来扮演,多对多关系 • 用户扮演了某个角色后,就具备了这个角色的权限 • 使用角色便于进行权限的集中管理 • 角色分为对数据库内部对象进行控制的对象角色,和对服务器进行控制的服务器角色 郑捷 lzj@fjnu.edu.cn www.lzj.name
视图 • 视图是一种将数据限制在一定范围内的方式 • 对视图进行授权,是对查询的一种更严格的限定 郑捷 lzj@fjnu.edu.cn www.lzj.name
审计 • 审计是一种事后的监督 • 审计的作用是在后台,记录下全部的操作,在事后供审计人员分析可能出现的问题 • 同时也是发生事故后,必要的证据 郑捷 lzj@fjnu.edu.cn www.lzj.name
数据加密 • 对于敏感性数据,可以对数据进行进一步的加密,只有持有正确密钥的访问者才能获取到真实的数据 • 这样可以避免非法访问者绕过数据库系统直接对数据进行操作 • 缺点是加解密需要耗费系统资源,速度比较慢 郑捷 lzj@fjnu.edu.cn www.lzj.name
统计数据库安全性 • 一般来说,数据库可能不允许直接查询细节数据,但是允许读取统计数据 • 但是这样的情况下,存在特殊的安全性问题,有一些隐蔽的信息泄露渠道 • 典型的,当数据个数为1的时候,最大值、最小值和平均值,都等于原始数据 • 统计安全性是难以解决的问题 郑捷 lzj@fjnu.edu.cn www.lzj.name
SQL Server的安全机制 • SQL Server采取3层安全机制对数据的安全性进行控制 • 第1层,服务器访问控制,采用登录名+密码验证的方式,或者联合Windows身份验证 • 第2层,数据库用户控制,每个登录者必须在数据库中有对应的用户名才能访问数据库 • 第3层,数据库对象权限控制,用户进入数据库,根据授予的对象权限进行操作 郑捷 lzj@fjnu.edu.cn www.lzj.name
SQL Server安全机制图示 郑捷 lzj@fjnu.edu.cn www.lzj.name
SQL登录的创建和删除 • exec sp_addlogin [ @loginame = ] 'login' [ , [ @passwd = ] 'password' ] [ , [ @defdb = ] 'database' ] • 创建一个SQL登录名,并且指定账号密码以及默认数据库 • exec sp_droplogin [ @loginame = ] 'login' • 删除指定登录名 郑捷 lzj@fjnu.edu.cn www.lzj.name
Windows账户登录的授权与撤销 • exec sp_grantlogin [@loginame =] 'login' • login是要添加的 Windows NT 用户或组的名称。Windows NT 组和用户必须用 Windows NT 域名限定,格式为"域\用户",例如 London\Joeb • exec sp_revokelogin [ @loginame = ] 'login' • 撤销登录许可 • sp_denylogin [ @loginame = ] 'login' • 拒绝登录 • 注意:Windows登录是针对已经存在的Windows账号或者组,所以不可能去创建或者删除,只能是授权、禁止或者撤销 郑捷 lzj@fjnu.edu.cn www.lzj.name
添加与删除用户 • exec sp_adduser [ @loginame = ] 'login' [ , [ @name_in_db = ] 'user' ] [ , [ @grpname = ] 'group' ] • 添加用户实际上是授权某个登录进入本数据库 • exec sp_dropuser [ @name_in_db = ] 'user' • 删除用户并没有删除对应的登录名 郑捷 lzj@fjnu.edu.cn www.lzj.name
特殊的用户 • 在每个数据库中,都有两个特殊的用户 • dbo(database owner) • 这是本数据库的拥有者,也是最高权限的所有人 • 默认情况下,dbo将被关联到服务器的管理员账号上 • guest • 这是本数据库的访客,凡是在本数据库中没有对应用户的登录名,进入本数据库后都将被自动关联到该用户上 • 如果该用户被删除或禁用,则禁止访客进入 郑捷 lzj@fjnu.edu.cn www.lzj.name
添加与删除数据库角色 • exec sp_addrole [ @rolename = ] 'role' • 添加角色,新添加的角色没有任何成员和权限 • exec sp_droprole [ @rolename = ] 'role' • 删除角色 • exec sp_helprole [ [ @rolename = ] 'role' ] • 返回某个角色的信息 郑捷 lzj@fjnu.edu.cn www.lzj.name
为用户分配角色 • sp_addrolemember [ @rolename = ] 'role' , [ @membername = ] 'security_account' • 为角色添加成员 • 被添加的可以是某个用户,也可以是某个角色,即某个角色成为另一个角色的子集 • sp_droprolemember [ @rolename = ] 'role' , [ @membername = ] 'security_account' • 从角色中删除成员 郑捷 lzj@fjnu.edu.cn www.lzj.name
为角色或用户赋予权限 • 语句权限: • GRANT { ALL | statement [ ,...n ] } TO security_account [ ,...n ] • 对象权限: • GRANT { ALL [ PRIVILEGES ] | permission [ ,...n ] } { [ ( column [ ,...n ] ) ] ON { table | view } | ON { table | view } [ ( column [ ,...n ] ) ] | ON { stored_procedure | extended_procedure } | ON { user_defined_function } } TO security_account [ ,...n ] [ WITH GRANT OPTION ] [ AS { group | role } ] 郑捷 lzj@fjnu.edu.cn www.lzj.name
拒绝权限 • 语句权限: • DENY { ALL | statement [ ,...n ] } TO security_account [ ,...n ] • 对象权限: • DENY { ALL [ PRIVILEGES ] | permission [ ,...n ] } { [ ( column [ ,...n ] ) ] ON { table | view } | ON { table | view } [ ( column [ ,...n ] ) ] | ON { stored_procedure | extended_procedure } | ON { user_defined_function } } TO security_account [ ,...n ] [ CASCADE ] 郑捷 lzj@fjnu.edu.cn www.lzj.name
收回权限 • 语句权限 • REVOKE { ALL | statement [ ,...n ] } FROM security_account [ ,...n ] • 对象权限: • REVOKE [ GRANT OPTION FOR ] { ALL [ PRIVILEGES ] | permission [ ,...n ] } { [ ( column [ ,...n ] ) ] ON { table | view } | ON { table | view } [ ( column [ ,...n ] ) ] | ON { stored_procedure | extended_procedure } | ON { user_defined_function } } { TO | FROM } security_account [ ,...n ] [ CASCADE ] [ AS { group | role } ] 郑捷 lzj@fjnu.edu.cn www.lzj.name
角色和用户之间的关系 • 角色和用户是一组多对多关系 • 一个角色内有多个成员用户 • 一个用户可以分别属于(或叫扮演)多个角色 • 角色之间还可以有隶属关系 • 一个角色可以拥有另外一系列角色作为成员 郑捷 lzj@fjnu.edu.cn www.lzj.name
角色、用户和权限 • 可以直接给用户授权 • 也可以给角色授权给角色授权时,该权限自动分配到其内的所有用户和子角色中 • 一个用户可以通过直接授权获取权限,也可以通过其所在的角色获取权限,用户可以同时获取多组权限,其实际权限为这些权限的组合 郑捷 lzj@fjnu.edu.cn www.lzj.name
权限的冲突 • 当一个用户或角色从多个渠道获取权限时,对权限的分配有以下几种情况 • 未指定=不能操作 • 授权+未指定=授权 • 授权+授权=授权 • 拒绝+未指定=拒绝 • 拒绝+授权=拒绝 • 特别的,一旦某个权限被拒绝,其他渠道即使明确给其授权,也是无效的 郑捷 lzj@fjnu.edu.cn www.lzj.name
授权的粒度 • 对于语句,是采取整个语句授权的方式 • 对于INSERT和DELETE语句,针对整个表进行授权 • 对于SELECT和UPDATE语句,可以对整表进行授权,也可以对字段进行授权 郑捷 lzj@fjnu.edu.cn www.lzj.name
视图与安全 • 视图除了简化查询,还表示对信息的一种不同视角。利用对视图的查询和更新进行授权,可以达到对原始数据的部分授权的目的。 • 例如:对表的查询的授权,只能对字段进行限制,不能根据记录的内容进行限制。而通过带有WHERE的视图进行授权,则可以限制只针对部分记录进行查询 郑捷 lzj@fjnu.edu.cn www.lzj.name
管理员角色 • 除了自定义的角色,服务器和数据库各自提供了一组固有的管理员角色,这些角色表示了对特殊的管理操作的授权 • 服务器角色主要包括对服务器的各项控制,以及添加、删除、附加数据库等 • 数据库角色主要包括对数据库的各种管理操作的控制,以及简化的读、写权限等 郑捷 lzj@fjnu.edu.cn www.lzj.name
应用程序角色 • 在SQL Server中,还提供应用程序角色,供特殊的应用程序连接登录后使用 郑捷 lzj@fjnu.edu.cn www.lzj.name
安全性在编程中的应用 • 使用不同账号登录数据库获取不同权限,主要是为了让用户之间能够有不同权限 • 在数据库服务器管理上,当一个服务器有可能多人共享时,此功能很实用 • 在目前的软件开发中,往往都是用sa账号登录服务器,然后通过应用程序内部机制实现用户、角色、权限控制,因此逐步被淡化 郑捷 lzj@fjnu.edu.cn www.lzj.name
数据库安全性 • 安全概述 • 安全性控制 • 用户识别 • 自主与强制存取控制 • 授权与回收,角色 • 视图 • 审计、加密、统计安全 • SQL Server的安全体系 郑捷 lzj@fjnu.edu.cn www.lzj.name
练习与上机习题 • 书面作业: • 275页:2 • 上机练习: • 148页:7、8、9 • 要求:先通过企业管理器界面实现,理解各项权限的含义、粒度等。然后用代码实现,代码细节请参考《SQL Server联机丛书》 郑捷 lzj@fjnu.edu.cn www.lzj.name
预习 • 数据库完整性 郑捷 lzj@fjnu.edu.cn www.lzj.name