第九章、安全管理
第九章、安全管理
内容提要:
1.理解安全控制的基本概念
2.了解SQL Server 2008的存取控制
3.掌握SQL Server 2008的安全控制实现方式
4.了解Oracle的安全管理
第一节 安全控制概述
数据库安全性不同于数据的完整性。
- 安全性:保护数据以防止不合法用户故意造成破坏。
(确保用户被允许做其想做的事情。)
- 完整性:保护数据以防止合法用户无意中造成的破坏。
(确保用户做的事情是正确的。)
1.数据库安全控制的目标
保护数据免受意外或故意的丢失、破坏或滥用。
2.数据库安全的威胁
安全计划需要考虑:可用性损失,机密性数据损失,私密性数据损失,偷窃和欺诈,意外的损害。
3.安全控制模型
包括四阶段:
- 身份验证(用户)
- 操作权限控制(数据库应用程序与数据库管理系统)
- 文件操作控制(操作系统)
- 加密存储与冗余(数据库)
4.授权和认证
认证是一种鉴定用户身份的机制。授权是将合法访问数据库或数据库对象的权限授予用户的过程。包括认证用户对对象的访问请求。
DBMS通常采用自主存取控制和强制存储控制两种方案来解决安全控制问题。
第二节 存取控制
1.自主存取控制
- 又称自主安全模式, 通过SQL的GRANT,REVOKE,DENY语句来实现。
- 权限种类:维护权限与操作权限(语句权限与对象权限)
- 用户分类:系统管理员(sa)、数据库对象拥有者、普通用户。
2.强制存取控制
- 为避免自主存取模式下数据的“无意泄露”,采取强制存取控制。
- DBMS将全部实体分为主体和客体两大类。
- 主体:系统活动实体,实际用户和进程。
- 客体:被动实体,受主体操纵,包括文件、基本表、视图。
- 对于主体和客体,DBMS为它们的每个实例指派一个敏感度标记(Label)。
敏感度标记:DBMS指派,主体为许可证级别,客体为密级。分绝密、秘密、可信和公开等若干级别。
- 强制存取控制遵循如下规则:
- 仅当主体许可证级别大于或等于客体密级,主体可以读取相应客体
- 仅当主体许可证级别等于客体密级,该主体才能写相应客体。
第三节 审计跟踪
- 审计跟踪实质上是一种特殊的文件或数据库。系统自动记录用户对常规数据的所有操作。
- 审计跟踪对数据安全有辅助作用。
第四节 统计数据库的安全性
- 统计数据库提供基于各种不同标准的统计信息或汇总数据。
- 统计数据库安全系统用于控制对统计数据库的访问。
- 统计数据库允许用户查询聚合类型的信息,如总和、平均等,但不允许查询个人信息。
第五节 SQL Server 的安全控制
1.身份验证模式
Windows身份验证模式
SQL Server通过Windows操作系统获得用户信息,验证登录名和密码,一般推荐。
混合身份验证模式
Windows授权用户和SQL授权用户可以登录。
2.登录帐户
- 两类:
- SQL Server自身负责身份验证的账户,内置系统账户与用户自己创建。
- 登录到SQL Server的Windows网络账户,可以是组账户或用户账户。
- 建立登录账户
CREATE LOGIN login_name - 修改登录帐户属性
ALTER LOGIN login_name - 删除登录帐户
DROP LOGIN login_name
实例:
CREATE LOGIN SQL_User1 WITH PASSWORD=‘a1b2c3XY’ ALTER LOGIN SQL_User1 WITH PASSWORD=‘a4b5c6XY’ ALTER LOGIN SQL_User3 WITH NAME=NewUser
3.数据库用户
- 用户有了登录帐户,只能连接到SQL服务器,并不具有访问数据库的权限。
- 映射:让登录账户成为数据库用户的操作成为映射。一个登录账户可以映射为多个数据库用户。默认情况下,新建数据库只有一个用户:dbo,数据库用户的拥有者。
建立数据库用户
CREATE USER user_name[|FOR|FROM] LOGIN login_name
Guest用户,特殊数据库用户,匿名访问,没有映射到登录账户的时候使用
GRANT CONNECT TO guest REVOKE CONNECT TO guest
删除数据库用户
DROP USER user_name
4.权限管理
- 登录账户成为合法用户后没有任何操作权限,就需要为用户授予数据库数据及其对象的操作权限。
对象级别的权限(6种)
SELECT、INSERT、UPDATE、DELETE、REFERENCES、EXECUTE
- 授权语句:
GRANT 对象权限 ON 对象 TO (主体:数据库用户名或角色)[WITH GRANT OPTION]
实例:
GRANT SELECT ON Addres TO abc GRANT EXECUTE ON OBJECT::HR.EI TO abc GRANT REFERENCES(EmployeeID)ON vEmp TO abc WITH GRANT OPTION
- 拒绝权限
DENY 对象权限 ON 对象 TO (主体:数据库用户名或角色) [CASCADE] [AS主体]
实例:
DENY SELECT ON Addres TO abc DENY EXECUTE ON OBJECT::HR.EI TO abc DENY REFERENCES(EmployeeID)ON vEmp TO abc CASCADE
- 收权语句
REVOKE 对象权限 ON 对象 TO (主体:数据库用户名或角色) [CASCADE] [AS角色]
实例:
REVOKE SELECT ON Addres TO abc REVOKE EXECUTE ON OBJECT::HR.EI TO abc REVOKE REFERENCES(EmployeeID)ON vEmp TO abc CASCADE
语句级别的权限
CREATE DATABASE|PROCEDURE|TABLE|VIEW|FUNCTION BACKUP DATABASE|LOG
实例:
GRANT CREATE DATABASE TO user0 GRANT CREATE DATABASE , CREATE VIEW TO user1,user2 DENY CREATE VIEW TO user1 REVOKE CREATE DATABASE FROM user0
5.角色
定义:
一组具有相同权限的用户就是角色。
SQL Server 2008中,角色分为预定义的系统角色和用户角色两种。
系统角色又分为固定服务器角色(服务器级角色)和固定数据库角色(数据库级角色)。
用户角色均是数据库级角色。
固定服务器角色
- Bulkadmin:执行BULK INSERT语句权限。
- Dbcreator:创建、修改、删除还原数据库权限。
- Diskadmin:具有管理磁盘文件的权限
- Processadmin 管理运行进程权限。
- Securtyadmin:专门管理登录账户、读取错误日志执行CREATE DATABASE 权限的账户,便捷。
- Serveradmin:服务器级别的配置选项和关闭服务器权限。
- Setupadmin:添加删除链接服务器。
- Sysadmin:系统管理员 ,Windows超级用户自动映射为系统管理员。
- Public:系统预定义服务器角色,每个登录名都是这个角色的成员。没有授予或拒绝特定权限,则将具有这个角色权限。
例:
(1)为固定服务器角色添加成员
Sp_addsrvrolemember EXEC Sp_addsrvrolemember ‘user1’,‘sysadmin’
(2)删除固定服务器角成员
Sp_dropsrvrolemember EXEC Sp_dropsrvrolemember ‘user1’,‘sysadmin’
固定数据库角色
定义在数据库级别上,存在于每个数据库中。用户加入固定数据库角色就具有数据库角色权限。
- Db_accessadmin:添加或删除数据库权限
- Db_backupoperator:备份数据库、日志权限
- Db_datareader:查询数据库数据权限
- Db_datawriter:具有插入、删除、更改权限
- Db_ddladmin:执行数据定义的权限
- Db_denydatareader:不允许具有查询数据库中所有用户数据的权限。
- Db_denydatawriter:不允许具有插入、删除、更改数据库中所有用户数据权限。
- Db_owner:具有全部操作权限,包括配置、维护、删除数据库。
- Db_securityadmin:具有管理数据库角色、角色成员以及数据库中语句和对象的权限
例:
(1)为固定数据库角色添加成员
Sp_addsrvrolemember EXEC Sp_addrolemember ‘Db_datareader’,‘SQL_User2’
(2)删除固定服务器角成员
Sp_droprolemember EXEC Sp_droprolemember ‘Db_datareader’,‘SQL_User2’
用户定义的角色
- 用户定义的角色属于数据库一级。
- 用来简化使用数据库时的权限管理。
- 用户定义的角色成员可以是用户定义角色或数据库用户。注意: 角色中的成员拥有的权限=成员自身权限+所在角色权限。但若某个权限在角色中被拒绝,则成员不再拥有。
创建用户定义的角色
CREATE ROLE
实例:
CREATE ROLE MathDept [AUTHORIZATION Software]
注意:为用户定义角色授权、添加、删除用户定义的角色中的成员与固定数据库角色一致。
删除用户定义角色
DROP ROLE
实例:
DROP ROLE MathDept
第六节 Oracle的安全管理
- Oracle的安全机制分为数据库级的安全控制、表级、列级、行级的安全控制。
- 数据库级的安全性通过用户身份认证和授予用户相应系统权限来保证;
表级、列级、行级的安全性通过授予或回收对象权限保证。支持集中式、分布式、跨平台应用。
- Oracle系统通常设置两级安全管理员:
- 全局级:负责管理、协调,维护全局数据一致性和安全性;
- 场地级:负责本结点数据库安全性,用户管理、系统特权与角色管理。
1.用户与资源管理
- 按权限大小划分为DBA用户和普通用户。
- DBA用户由DBMS自动创建,sys与system用户,拥有全部系统特权。
- 普通用户:由DBA用户或有相应特权的用户创建,并授予系统特权。
- 建立用户
CREATE USER use1 IDENTIFIED BY 123456 DEFAULT TABLESPACE student(存储在student表空间) QUOTA 5M ON student(限制使用空间为5M)
- 管理用户和资源
- DBA特权用户可以改变一个用户资源使用限额、密码、登录次数等
ALTER USER use1 QUOTA 60M ON student(限制使用空间为60M) ALTER USER use1 IDENTIFIED BY 12345678
- 删除用户
DROP USER DROP USER user1 CASCADE(删除用户及其所拥有的全部对象)
2.权限管理
(1)系统特权
三种默认特权:
- Connect: 不能建立任何对象,可以查询数据字典及访问数据库对象。
- Recource :可建立数据库对象(表、视图、索引……)
- DBA :拥有预定义的全部权限 。
(2)对象特权
用于维护表级、行级、列级数据的安全性。
实例:
GRANT all ON dep TO user1 GRANT select(tno,tname,sal) ON teacher TO user2
例题
1.在SQL Server 2008某数据库中,用户U1是Role1角色中的成员。设在该数据库中执行了下述授权语句: GRANT INSERT ON T TO U1 GRANT UPDATE, DELETE ON T TO Role1 GRANT SELECT ON T TO PUBLIC DENY UPDATE ON T TO PUBLIC 则用户U1对T表具有的操作权限是( )。 A. INSERT B. INSERT、UPDATE和DELETE C.INSERT、SELECT和DELETE D.INSERT和DELETE 答案:C
2.在SQL Server 2008中,设log1是SQL Server身份验证模式的数据库服务器登录帐户。现要授予log1具有创建数据库的权限,请补全下列语句: EXEC sp_addsrvrolemember ′log1′, ′ ( ) ′ 答案: dbcreator
3.在SQL Server 2008的某数据库中,设用户U1同时是角色R1和角色R2中的成员。现已授予角色R1对表T具有SELECT、INSERT和UPDATE权限,授予角色R2对表T具有INSERT和DENY UPDATE权限,没有对U1进行其他授权,则U1对表T有权执行的操作是( )。 A.SELECT和UPDATE B.INSERT、UPDATE和SELECT C.SELECT和INSERT D.SELECT 答案:C
4.在SQL Server 2008中,设用户U1是某数据库db_datawriter角色中的成员,则U1在该数据库中有权执行的操作是( )。 A. SELECT B.SELECT和INSERT C. INSERT、UPDATE和DELETE D.SELECT、INSERT、UPDATE和DELETE 答案:C
5.在SQL Server 2008中,只具有修改数据库中全部用户表数据权限的系统角色是 ( ) 。 答案: db_datawriter
6.设在SQL Server 2008某数据库中,要设置不允许用户U1获得对表T数据的删除权限,请补全实现该授权操作的SQL语句: ( )ON T TO U1; 答案: DENY DELETE