- 数据库的安全是指保护数据库,防止因用户非法使用数据库造成数据泄露、更改或破坏等恶意人为破坏问题
8.1 安全认证
- 安全认证
- 确认试图登录数据库的用户是否被授权访问数据库的过程
- 认证方式
- 数据库认证
- 外部认证:
- 由操作系统或网络服务执行身份验证
- 通过中间层服务器来验证用户的身份
- 其它认证方式
数据库认证
- 使用存储在数据库中的信息对连接到数据库的用户进行验证
- 最常用的方法:密码认证
- 缺点:
- 密码容易被盗、伪造和滥用
- 难以应对复杂的网络攻击
- 频繁的认证操作影响数据库性能
- 加强密码认证的安全措施
- 建立密码复杂性标准
- 密码不包含敏感词,如用户名等
- 设定密码时效性,定期修改密码
外部认证
- 强身份认证:进行双因素(如密码+短信)或多因素身份验证
- 代理认证:让中央设施对网络的所有成员进行身份验证
- 强身份认证优点
- 可根据需要选择不同的身份验证机制
操作系统认证 - 减少数据库管理开销,提高数据库性能
- 可根据需要选择不同的身份验证机制
- 代理认证优点
- 有效解决网络上节点伪造身份
- 减少每个数据库认证开销
8.2 访问控制
-
访问控制
按照用户的身份和权限,控制用户对数据库中数据访问 -
权限
允许或拒绝数据库用户提出的数据访问请求 -
访问控制关注的问题
- 阻止访问:无权限时,主体不能访问客体
- 确定访问权限:确定主体是否有权对客体进行访问
- 授予访问权限:授予主体访问客体的权限
- 撤销访问权限:删除主体对客体的访问权限
-
定义存取权限:在数据库系统中,为了保证用户只能访问他有权存取的数据,必须预先对每个用户定义存取权限。
-
检查存取权限:对于通过鉴定获得上机权的用户(即合法用户),系统根据他的存取权限定义对他的各种操作请求进行控制,确保他只执行合法操作。
-
存取权限由两个要素组成
- 数据对象
- 操作类型
权限分类
- 系统权限
- 启动、关闭数据库
- 转储、恢复数据库
- 创建、删除数据库等等
- 数据对象权限
- 对基本表, 视图, 存储过程,函数等数据库对象的操作权限
- 增加、删除、修改等
- 列级权限:包括列的添加、修改、删除等
- 行级权限:包括行的插入、修改、删除等
- 连接级权限:包括连接控制等
权限控制
-
SQL DCL(Data Control Language)中的权限控制语句
- 权限授予: Grant
- 权限收回:Revoke
例:
-
对指定用户授予、收回表级查询权限
- Grant select on TableA on UserA
- Revoke select on TableA from UserA
-
限定列级权限
- Grant select (a, b) on TableA on UserA
-
如何创建新用户?
授予基本的登录数据库和查看数据的权利- Create user username IDENTIFIED BY ‘password’
- Grant Usage on dbname.* to username@‘%’
-
谁才能授予、收回权限?
- 数据对象的创建者
- DBA
- 拥有传播权限的用户
- With Grant Option
- Grant select on TableA on UserA with grant option
- 此时UserA可以向其他用户授予TableA的Select权限
角色
角色是命名的权限集合,使用角色可以方便的进行授权管理
-
角色分类
- 服务器角色:系统内建,不可自建
- 数据库角色:可自建
- Public角色:代表所有用户都具有的权限集合
-
角色可以从属于别的角色,获得别的角色定义的权限(即角色可以继承)
-
创建角色:
Create Role roleA;
当前用户需具备创建角色的权限 -
向角色逐个授予权限
Grant insert, delete on tableA to roleA; Grant execute on procedureA to roleA -
将角色赋予指定用户
Grant roleA to UserA- 此时UserA就继承了roleA的权限
- 也可以对用户UserA赋予roleA之外的权限