第 7章 安全性
?安全性概述
?用户管理和角色管理
?权限管理
?其他安全问题
安全性措施的层次
? 物理层, 重要的计算机系统必须在物理上受到保护, 以防止入
侵者强行进入或暗中潜入 。
? 人员层, 对用户的授权要严格掌握, 以减少授权用户渎职, 受
贿, 从而为入侵者提供访问的机会 。
? 操作系统层, 要进入数据库系统, 首先要经过操作系统, 所以
如果操作系统的安全性能差, 也会对数据库造成威胁 。
? 网络层, 由于几乎所有网络上的数据库系统都允许通过终端或
网络进行远程访问, 所以网络的安全和操作系统的安全一样重
要, 网络安全了, 无疑会对数据库的安全提供一个保障 。
? 数据库系统层, 数据库系统应该有完善的访问控制机制, 允许
查询和允许修改有严格的界限, 尽量保证不出现越权的操作 。
数据库管理系统的安全功能
? 安全性控制是数据库管理员(或系统管理员)的一个重
要任务,他要充分利用数据库管理系统的安全功能,保
证数据库和数据库中数据的安全。
? 安全系统的核心问题是身份识别。
? 几个概念
? 用户
? 权限
? 用户组
? 角色
自主存取控制
? 自主存取控制就是由用户(如数据库管理
员)自主控制对数据库对象的操作权限,
哪些用户可以对哪些对象、进行哪些操作,
完全取决于用户之间的授权。任何用户只
要需要,就有可能获得对任何对象的操作
权限。这种存取控制方式非常灵活,但有
时也容易失控。目前大多数数据库管理系
统都支持的是自主存取控制方式。
强制存取控制
? 强制存取控制的思路是,为每一个数据库对象标以一定
的密级( Classification level),对每一个用户都确定一
个许可级别( Clearance level)。 如密级可以分为绝密、
机密、保密、秘密、公开等若干级别;而用户可以划分
为一级用户(可以操作所有数据)、二级用户(可以操
作除绝密以外的所有数据)、三级用户等。
? 强制存取控制本质上具有分层的特点,通常具有静态的、
严格的分层结构,与现实世界的层次管理也相吻合。这
种强制存取控制特别适合层次严明的军方和政府等数据
管理。
SQL Server的身份验证模式
? SQL Server提供了三种身份验证模式或安
全管理模式,即 标准模式, 集成模式 和 混
合模式 。在 Windows NT或 Windows 2000
上使用集成模式或混合模式,在 Windows
98( 或 Millennium) 上使用标准模式。
标准身份验证模式
? 实际上, 一般的数据库管理系统都只提供标准
身份验证模式, 在这种模式下, 由数据库管理
系统独立来管理自己的数据库安全 。 数据库管
理系统把用户登录的 ID号和口令存储在特定的
系统表中, 当用户试图登录到数据库系统时,
数据库管理系统查询有效的登录 ID和口令, 以
决定是否允许用户登录 。
? 一般的数据库管理系统只有标准登录模式, 所
以很多 SQL Server的用户也习惯使用标准身份验
证模式, 因为他们熟悉登录和密码功能 。 对于
连接到 Windows客户端以外的其它客户端, 可能
也必须使用标准身份验证 。
集成身份验证模式
? 集成身份验证模式也称为 Windows身份验证模式,
用户通过 Windows NT或 Windows 2000( 以下简
称 Windows) 的身份验证后则自动进行 SQL
Server身份验证。即当用户通过 Windows用户账
户进行连接时,SQL Server通过回叫 Windows以
获得信息,重新验证账户名和密码。
SQL Server的安全体系
图 7-1 SQL Server安全体系
混合身份验证模式
? 混合模式使用户得以使用 Windows身份验
证或 SQL Server身份验证与 SQL Server实
例连接 。
混合身份验证模式的登录决策过程
用户管理和角色管理
? 用户的分类
? 登录用户和数据库用户
? 用户管理
? 角色管理
? SQL Server的预定义角色
用户的分类
? 系统管理员用户
? 数据库管理员用户
? 数据库对象用户
? 数据库访问用户
图 7-1 SQL Server安全体系
登录用户和数据库用户
?登录用户( login user)
?数据库用户( database user)
用户管理
? 登录用户的管理
? 系统管理员的工作
? 建立新的登录用户
? 修改登录密码
? 删除登录用户 …
? 数据库用户的管理
? 数据库管理员的工作
? 授权其他登录用户为数据库的用户
? 取消某个登录用户为数据库的用户
建立新的登录用户
sp_addlogin [@loginname=] login_id
[,[@passwd=]passwd]
[,[@defdb=]defdb]
[,[@deflanguage=]deflanguage]
[,[@sid=]sid]
[,[@encryptopt =]encryption_option]
修改登录密码
sp_password [ [ @old = ] old_password,]
{ [ @new =] new_password }
[,[ @loginame = ] login ]
删除登录用户
sp_droplogin [ @loginame = ] login
授权登录用户为当前数据库用户
sp_grantdbaccess [@loginame =] login
[,[@name_in_db =] name_in_db]
从当前数据库中删除用户
sp_revokedbaccess [ @name_in_db = ] name
角色管理
? 用户组和角色
? 定义角色
? 为用户指定角色
? 取消用户的角色
? 删除角色
定义角色
sp_addrole [ @rolename = ] role
[,[ @ownername = ] owner ]
为用户指定角色
sp_addrolemember [ @rolename = ] role,
[ @membername = ] user_account
取消用户的角色
sp_droprolemember [ @rolename = ] role,
[ @membername = ] user_account
删除角色
sp_droprole [@rolename = ] role
SQL Server的预定义角色
? public角色
? 系统预定义角色
? 使用 sp_helpsrvrole获得各种系统管理员角色的描述
? 使用 sp_srvrolepermission得到每种系统管理员角色的特定权
限(可以执行的命令、系统存储过程或说明)
? 数据库预定义角色
? 使用 sp_helpdbfixedrole获得数据库上各种预定义角色的描述
? 使用 sp_dbfixedrolepermission得到每种数据库预定义角色的
特定权限(可以执行的命令、系统存储过程或说明)
public角色
? public角色是一个特殊的数据库角色,每个数据库用户
都是该角色的成员。 public角色具有如下特点:
? public角色自动获得数据库中用户的所有默认权限;
? 不需要、也无法将用户指派给 public角色,因为默认
情况下所有用户都属于该角色;
? 每个数据库(包括所有系统数据库和所有用户数据库)
都有 public角色;
? 不可以删除 public角色。
系统预定义角色
? sysadmin,具有系统管理员全部权限的角色。
? serveradmin,负责配置数据库服务器的设置。
? setupadmin,负责添加和删除链接的服务器。
? securityadmin,负责管理服务器的登录。
? processadmin,负责管理在 SQL Server实例中运行的进程。
? dbcreator,负责创建和改变数据库。
? bulkadmin,可以执行 BULK INSERT语句(数据库数据的
装载)。
数据库预定义角色
? db_owner,在数据库中有全部权限,即具有数据库管理员全部权限的角色。
? db_accessadmin,负责数据库用户的管理。
? db_securityadmin,负责数据库的安全管理,如负责权限管理、角色和角色
成员资格管理等。
? db_ddladmin,主要负责数据库的完整性和一致性检查及管理。
? db_backupoperator,主要负责数据库的备份。
? db_datareader,可以查询数据库中任何用户表中的所有数据。
? db_datawriter,可以更改数据库中任何用户表中的所有数据。
? db_denydatareader,不能查询数据库中任何用户表中的任何数据。
? db_denydatawriter,不能更改数据库中任何用户表中的任何数据。
权限管理
? 授予权限
? 授予语句权限
? 授予对象权限
? 查询授权
? 收回权限
? 禁止权限
? 角色与存取控制
授予语句权限
GRANT { ALL | statement_list } TO name_list
statement_list给出授权的语句列表,可以是:
? BACKUP DATABASE
? BACKUP LOG
? CREATE DATABASE
? CREATE DEFAULT
? CREATE FUNCTION
? CREATE PROCEDURE
? CREATE RULE
? CREATE TABLE
? CREATE VIEW
授予对象权限
? 处理数据或执行存储过程时需要有相应对象的操作或执行权限,
这些权限可以划分为:
? SELECT,INSERT,UPDATE和 DELETE语句权限,它们
可以应用到整个表或视图上。
? SELECT和 UPDATE 语句权限,它们可以有选择性地应用
到表或视图中的单个列上。
? SELECT权限,它们可以应用到用户定义函数。
? INSERT和 DELETE 语句权限,它们会影响整行,因此只可
以应用到表或视图中,而不能应用到单个列上。
? EXECUTE语句权限,即执行存储过程和函数的权限。
授予对象权限
GRANT { ALL [ PRIVILEGES ] | permission_list }
{[ ( column_list ) ] ON { table | view } |
ON { table | view } [ ( column_list ) ]
| ON stored_procedure | ON user_defined_function }
TO name_list
[ WITH GRANT OPTION ]
[ AS { group | role } ]
查询授权
? 使用系统存储过程 sp_helprotect查询授权
的情况
收回权限
? 收回语句授权
REVOKE { ALL | statement_list } FROM name_list
? 收回对象授权
REVOKE [GRANT OPTION FOR]
{ ALL [ PRIVILEGES ] | permission_list }
{[ ( column_list ) ] ON { table | view } | ON { table | view }
[ ( column_list ) ]
| ON stored_procedure | ON user_defined_function }
FROM name_list
[ CASCADE ]
[ AS { group | role } ]
禁止权限
? 禁止语句权限
DENY { ALL | statement_list } TO name_list
? 禁止对象权限
DENY { ALL [ PRIVILEGES ] | permission_list }
{[ ( column_list ) ] ON { table | view } | ON { table | view }
[ ( column_list ) ]
| ON stored_procedure | ON user_defined_function }
TO name_list
[CASCADE]
角色与存取控制
? 系统管理员或数据库管理员可以按层次定
义角色,并为角色定义权限,例如定义角
色 A,B,C,D和 E,角色之间的权限关
系是 A>B>C>D>E; 然后为不同级别的用
户指定不同的角色;从而达到按层次管理
数据的目的。
其他安全问题
? 数据加密
? 审计
? 统计数据库
? 用户定义的安全性措施
数据加密
? 数据加密标准 DES
? 公开密钥加密体制 RSA
审计
? 用户管理和权限控制解决了非法用户不能通过合法途径
接触数据的问题, 但是对合法用户的使用没有任何监督
能力 。 任何时候都不能排除有失职和渎职现象的发生,
为此需要有一种方式可以记录下对数据库的所有操作活
动和轨迹, 这种功能称为审计 ( Audit) 。
? 系统管理员 ( 或数据库管理员 ) 可以通过审计日志审计,
跟踪所有用户对数据库的操作活动, 可以确定哪些客户,
什么时间, 进行了哪些操作等, 从而为, 合法, 的, 意
外, 安全问题提供保障 。
统计数据库
? 在有些数据库应用中只允许查询统计信息而不
允许查询明细信息,提供这类服务的数据库称
为统计数据库。在统计数据库中存在着特殊的
安全问题,即可能存在着隐蔽的信息通道,使
得可以从合法的查询中推导出不合法的信息。
? 综合信息总是带有原始信息的痕迹,利用足够
的综合信息总能推导出原始信息。也就是说,
统计数据库不管采取什么样的安全手段,总可
以从综合信息得到原始信息,但是好的技术可
以使恶意用户付出足够高的代价,从而自愿放
弃恶意的攻击。
用户定义的安全性措施
? 除了利用数据库管理系统提供的安全功能
外,还可以使用触发器定义一些用户级的
安全性措施。例如,最典型的用户定义安
全性控制是,可以规定用户只在指定的时
间允许对表进行更新操作。
用户定义的安全性措施
CREATE TRIGGER secure_wh
ON 仓库
FOR INSERT,DELETE,UPDATE
AS
IF DATENAME(weekday,getdate())='星期六 '
OR DATENAME(weekday,getdate())='星期日 '
OR (convert(INT,DATENAME(hour,getdate())) NOT
BETWEEN 9 AND 17)
BEGIN
RAISERROR ('只许在工作时间操作 ! ',16,1)
ROLLBACK TRANSACTION
END
【本章小节】
? 数据库安全控制问题的核心是身份识别,
通过用户管理和权限管理实现对数据库的
安全管理。
? 数据加密
? 审计
? 统计数据库