数据库的安全性是指保护数据库以防止不合法的使用所造成的数据泄露、更改或破坏
数据库安全性概述
数据库不安全因素
1.非授权用户对数据库的恶意存取和破坏
数据库管理系统提供的安全措施主要包括用户 身份鉴别、存取控制和视图等技术
2.数据库中重要或敏感的数据被泄露
数据库管理系统提供的主要技术有强制存取控制、数据加密存储和加密传输等
审计日志分析
3.安全环境的脆弱性
TCSEC/TDI标准(用于对DBMS安全等级的评估)
TCSEC/TDI标准的基本内容
从四个方面来描述安全性级别划分的指标,每个方面又细分为若干项
安全策略、责任、保证、文档
TCSEC/TDI安全级别划分
TCSEC/TDI将系统划分为四组,七个等级A1,B3,B2,B1,C2,C1,D
实现数据库系统安全性的技术和方法
存取控制技术和审计技术
C2级的DBMS必须具有自主存取控制和初步的审计功能,B1的DBMS必须具有强制存取控制和增强的审计功能
CC标准
提出国际公认的表述信息技术安全性的结构
将信息产品的安全要求分为:安全功能,安全保证
以“类—子类—组件”结构表述,组件是安全要 求的最小构件块
数据库安全性控制
计算机系统中,安全措施是一级一级层层设置
用户(用户标识和鉴别)→DBMS(数据库安全保护)→OS(操作系统安全保护)→DB(数据密码存储)
计算机系统的安全模型
①计算机系统识别用户身份②数据库管理系统进行存取控制,只允许用户进行合法操作③操作系统有自己的保护措施④数据以密码的形式存储到数据库中
用户识别与鉴别(系统提供的最外层安全保护措施)
为防止非授权用户使用系统,通过创建用户 账号和口令来实现
用户身份鉴别的方法
1.静态口令鉴别–一般由用户自己设定,这些口令是 静态不变的
2.动态口令鉴别–口令是动态变化的,每次鉴别时均 需使用动态产生的新口令登录数据库管理系统,
即采 用一次一密的方法
3.生物特征鉴别–通过生物特征进行认证的技术,生 物特征如指纹、虹膜和掌纹等
4.智能卡鉴别–智能卡是一种不可复制的硬件,内置集成电路的芯片,具有硬件加密功能
用户访问数据库数据都要经过三个安全认证过程
第一个过程,确认用户是否是数据库服务器的合法账户(验证连接权);
第二个过程,确认用户是否是要访问的数据库的合法用户(验证数据库访问权);
第三个过程,确认用户是否具有合适的操作权限(验证操作权)。
登录账户管理
系统安装时创建的登录账户
SQL Server 安装好之后,系统会自动产生一些系统内置登录账户
本地管理员组(BUILT\Administrators)、系统管理员 (sa)
身份验证模式
Windows身份验证模式、混合身份验证模式
建立SQL Server身份验证的登录名
以SA或具有相关权限的登录名登录系统
例1.创建SQL Server身份验证的登录帐户,登录名为:SQL_User1,密码为:a1b2c3XY
CREATE LOGIN SQL_User1
WITH PASSWORD = 'a1b2c3XY'
修改登录帐户句
使用ALTER LOGIN语句修改登录账户属性
例2 将SQLUSER1登录账户名称更改为SQL_USER1
ALTER LOGIN SQLUSER1 WITH NAME= SQL_USER
例3 将SQL_USER1登录账户的密码修改为“abcdef”
ALTER LOGIN SQL_USER1 WITH PASSWORD='abcdef
删除登录帐户的T-SQL语句
不能删除正在使用的登录帐户,也不能删除拥 有任何数据库对象、服务器级别对象的登录帐 户
例4.删除SQL_User1 登录帐户
DROP LOGIN SQL_User1
建立数据库用户
默认数据库用户
1.数据库所有者 (DataBase Owner ,dbo)
dbo 是数据库的所有者,拥有数据库中的所有对象,每个数据库都有dbo,登录名sa映射为库中的用户dbo,sysadmin服务器角色的成员自动映射成dbo, 无法删除 dbo 用户
2.Guest用户
Guest 用户帐户允许没有用户帐户的登录名访问数据库,当登录名没有被映射到一个用户名上时,如果在 数据库中存在Guest用户,登录名将自动映射成Guest,并获得相应的数据库访问权限
以SA或具有相关权限的登录名登录系统
让SQL_User1登录帐户成为当前数据库中的用户,并且用户名同登录名
CREATE USER SQL_User1
服务器登录名与数据库用户
具有登录名的用户可以登录到SQL Server实例上,而且只局限在实例上进行操作
数据库用户是登录名以什么样的身份在该数据库中进行操作,是登录名在具体数据库中的映射
示例
本示例首先创建名为SQL_JWC且具有密码的SQL Server身份验证的服务器登录名,然后在 students数据库中创建与此登录帐户对应的数据库用户JWC
CREATE LOGIN SQL_JWC
WITH PASSWORD = 'jKJl3$nN09jsK84';
GO
USE students;
GO
CREATE USER JWC FOR LOGIN SQL_JWC;
删除数据库用户
例.删除SQL_User1用户
DROP USER SQL_User1
存取控制
存取控制机制主要包括两部分
1、定义用户权限:用户权限是指不同的用户对于不同的数据对象允许执行的操作权限
2、合法权限检查:每当用户发出存取数据库的操作请求后,DBMS查找数据字典,进行合法权限检查, 若用户的操作请求超出了定义的权限,系统将拒绝执行此操作
常用存取控制方法
自主存取控制(Discretionary Access Control ,简称DAC)
强制存取控制(Mandatory Access Control, 简称 MAC)
关系数据库系统中存取控制对象
对象类型 对象 操 作 类 型
数据库模式 模式 CREATE SCHEMA
基本表 CREATE TABLE,ALTER TABLE
视图 CREATE VIEW
索引 CREATE INDEX
数据 基本表和视图 SELECT,INSERT,UPDATE,DELETE, REFERENCES ALL PRIVILEGES
属性列 SELECT,INSERT,UPDATE, REFERENCES, ALL PRIVILEGES
自主存取控制方法
通过 SQL 的 GRANT 语句和 REVOKE 语句实现
用户权限组成:数据对象、操作类型
定义用户存取权限:定义用户可以在哪些数据库 对象上进行哪些类型的操作
SQL SERVER 权限种类
对象权限:是对表、视图等对象中数据的操作权
语句权限:创建对象的权限
隐含权限:指由SQL Server预定义的服务器角色、数据库 角色、数据库拥有者和数据库对象拥有者所具有的权限
对象权限
对象权限是指用户访问和操作数据库中表、视图、 存储过程等对象的权限
有五个不同的权限
DELETE、INSERT、UPDATE和SELECT:具有对表和视图 数据进行删除、插入、更改和查询的权限,其中 UPDATE和SELECT可以对表或视图的单个列进行授权
EXECUTE:具有执行存储过程的权限
语句权限
语句权限是指用户创建数据库或在数据库中创建或修 改对象、执行数据库或事务日志备份的权限
常用的语句权限有
CREATE DATABASE:创建数据库的权限。
CRAETE TABLE:创建表的权限。
CREATE VIEW:创建视图的权限。
CREATE PROCEDURE:创建存储过程的权限。
BACKUP DATABASE和BACKUP LOG:备份数据库和备份日志的权限
不同数据库用户权限不同
系统管理员、数据库对象拥有者、普通用户
权限管理
授予权限(GRANT ):允许用户或角色具有某种操作权。
收回权限(REVOKE ):不允许用户或角色具有某种操作权,或者收回曾经授予的权限。
拒绝权限(DENY ):拒绝某用户或角色具有某种操作权,既使用户或角色由于继承而获得这种操作权,也不允许执行相应的操作
用T-SQL语句管理对象权限
GRANT/ REVOKE/ DENY 对象权限名 [ , … ]
ON {表名| 视图名| 存储过程名}
TO/FROM/TO {数据库用户名| 用户角色名 }
[ , … ]
[WITH GRANT OPTION]; [ CASCADE]
其中:对象权限名
对表和视图主要:INSERT、DELETE、UPDATE、SELECT
对存储过程:EXECUTE
示例
--------------------------------------------------------------------------------
例1.为用户user1授予Student表的查询权。
GRANT SELECT ON Student TO user1
例2.为用户user1授予SC表的查询权和插入权。
GRANT SELECT,INSERT ON SC TO user1
例3.收回用户user1对Student表的查询权。
REVOKE SELECT ON Student FROM user1
例4.拒绝user1用户具有SC表的更改权。
DENY UPDATE ON SC TO user1
--------------------------------------------------------------------------------
用T-SQL语句管理语句权限
GRANT/REVOKE/DENY 语句权限名 [ , … ]
TO/FROM/TO {数据库用户名 | 用户角色名}
[ , … ]
其中:语句权限名主要有
CREATE DATABASE,CREATE TABLE,CREATE VIEW
CREATE FUNCTION, CREATE PROCEDURE,CREATE RULE
BACKUP DATABASE, BACKUP LOG
示例
--------------------------------------------------------------------------------
例5.授予user1具有创建表的权限。
GRANT CREATE TABLE TO user1
例6.授予u1和u2具有创建表和视图的权限。
GRANT CREATE TABLE, CREATE VIEW TO u1, u2
例7.收回授予user1创建表的权限。
REVOKE CREATE TABLE FROM user1
例8.拒绝user1创建视图的权限。
DENY CREATE VIEW TO user1
--------------------------------------------------------------------------------
数据库角色
为便于对用户及权限的管理,可以 将一组具有相同权限的用户组织在一起,这一组 具有相同权限的用户就称为角色(Role)
SQL Server 数据库角色
固定的服务器角色、固定的数据库角色、用户自定义的角色
建立用户定义的角色
CREATE ROLE role_name
[ AUTHORIZATION owner_name ]
role_name:待创建角色的名称。
AUTHORIZATION owner_name:将拥有新角色的数据库用户或角色。如果未指定用户,则执行CREATEROLE的用户将拥有该角色
示例
--------------------------------------------------------------------------------
例1.创建用户自定义角色:CompDept,拥有者为 创建该角色的用户
CREATE ROLE CompDept
例2.创建用户自定义角色:Software ,拥有者 为SQL_User1
CREATE ROLE Software AUTHORIZATION SQL_User1
--------------------------------------------------------------------------------
为用户定义的角色授权
使用SQL语句实现对用户角色的授权与为数据库 用户授权完全一样
--------------------------------------------------------------------------------
例3.为Software角色授予Student表的查询权
GRANT SELECT ON Student TO Software
例4.为Admin角色授予Student表的增、删、改、 查权
GRANT SELECT,INSERT,DELETE,UPDATE ON Student TO Admin
--------------------------------------------------------------------------------
为用户定义的角色添加成员
sp_addrolemember [ @rolename = ] ‘role’,
[ @membername = ] ‘security_account’
[ @rolename = ] ‘role’:当前数据库中的数据库角色名
[ @membername = ] ‘security_account’:要添 加到角色中的数据库用户名,可以是数据库用户、 数据库角色、Windows 登录名或Windows组。如果 新成员是没有相应数据库用户的Windows登录名, 则将为其创建一个对应的数据库用户
--------------------------------------------------------------------------------
例5.将Windows登录名HYJ\Win_User1添加到 Software角色中。
EXEC sp_addrolemember 'Software', 'HYJ\Win_User1'
例6.将SQL_User2添加到Admin角色中(假设该角 色已存在)。
EXEC sp_addrolemember 'Admin', 'SQL_User2'
--------------------------------------------------------------------------------
删除用户定义角色中的成员
sp_droprolemember [ @rolename = ] ‘role’ ,
[ @membername = ] ‘security_account’
[ @rolename = ] ‘role’:将从中删除成员的数 据库角色名
[ @membername = ] ‘security_account’:被 从数据库角色中删除的用户名。
例7.删除Admin角色中的SQL_User2成员
EXEC sp_droprolemember ‘Admin’, ‘SQL_User2’
删除用户定义的角色
用T-SQL语句实现 DROP ROLE role_name
--------------------------------------------------------------------------------
例8. 删除用户定义的角色:Admin
DROP ROLE Admin
--------------------------------------------------------------------------------
自主存取控制特点
同一用户对于不同的数据对象有不同的存取权限
不同的用户对同一对象也有不同的权限
用户还可将其拥有的存取权限转授给其他用户
自主存取控制缺点
可能存在数据的“无意泄露”
原因:这种机制仅仅通过对数据的存取权限来进行安全控制,而数据本身并无安全性标记
解决:对系统控制下的所有主客体实施强制存取控制策略
强制存取控制方法
在MAC中,DBMS所管理的全部实体被分为主体和客体两大类
主体是系统中的活动实体,既包括DBMS所管理 的实际用户,也包括代表用户的各进程
客体是系统中的被动实体,是受主体操纵的, 包括文件、基表、索引、视图等
DBMS为它们每个实例(值) 指派一个敏感度标记(LABEL),并分若干级别
主体的敏感度标记称为许可证级别, 客体的敏感度标记称为密级。 MAC机制就是通过对比主体和客体的敏感度标记, 最终确定主体是否能够存取客体。
强制存取控制规则
仅当主体的许可证级别大于或等于客体的密 级时,该主体才能读取相应的客体
仅当主体的许可证级别小于或等于客体的密 级时,该主体才能写相应的客体
禁止了拥有高许可证级别的主体更新低密级的数据对象