第Ⅰ部分 快速入门 3
第1章 良好的安全习惯 3
1.1 安全策略 4
1.1.1 基于不同需求的不同安全策略 4
1.1.2 理解安全需求 5
1.1.3 制定安全策略 6
1.1.4 安全策略的可操作性 6
1.2 安全信条 7
1.2.1 安全设计 8
1.2.2 深度防御 8
1.2.3 最少权限 9
1.3 风险分析 9
1.3.1 记录风险分析结果 10
1.3.2 处理正常情况和异常情况 11
1.3.3 对偶然事件作出应对计划 11
1.4 快照和对环境的了解 12
1.5 加固基础结构 13
1.5.1 操作系统 14
1.5.2 网络 15
1.5.3 应用服务器 17
1.6 小结 17
第2章 保护数据库的安全 19
2.1 保护默认的用户账号 19
2.1.1 对数据库的访问和登录进行保护 20
2.1.2 示例说明 21
2.1.3 抛弃任何陈旧的东西 26
2.2 Oracle密码 26
2.2.1 使用Oracle本地存储的密码验证密码 27
2.2.2 检测弱密码或默认密码 29
2.2.3 不可能的密码 32
2.2.4 管理并确保安全密码 33
2.3 限制数据库资源 37
2.4 默认角色 38
2.4.1 CONNECT 39
2.4.2 RESOURCE 39
2.4.3 DBA 40
2.5 公共权限 41
2.5.1 何时给PUBLIC组授予权限 41
2.5.2 Oracle支持的对象 42
2.6 确保网络的安全 45
2.6.1 加密 45
2.6.2 数据库监听器 46
2.6.3 外部调用 46
2.6.4 IP地址验证 47
2.7 小结 47
第Ⅱ部分 身份识别和身份验证 51
第3章 理解身份识别和认证 51
3.1 身份识别和认证的重要性 51
3.2 身份识别的方法 52
3.2.1 用户提供的识别信息 52
3.2.2 技术识别 53
3.3 身份识别面临的风险 54
3.3.1 欺骗 54
3.3.2 识别信息的窃取 55
3.4 认证 56
3.4.1 认证方法 56
3.4.2 安全认证的良好习惯 57
3.5 单点登录 58
3.5.1 为什么需要单点登录 58
3.5.2 单点登录所面临的挑战 59
3.6 数据库的I&A 59
3.6.1 关联用户与数据库模式 60
3.6.2 用户与数据的分离 61
3.6.3 身份识别信息的保护 62
3.6.4 使用合适的I&A 62
3.7 小结 63
第4章 连接池与代理身份验证 65
4.1 身份验证策略简史 66
4.1.1 基于主机的身份识别和身份验证 66
4.1.2 客户端-服务端的身份识别和身份验证 68
4.2 Web应用 69
4.2.1 无状态环境 70
4.2.2 Web数据库 70
4.3 连接池 73
4.3.1 Oracle隐式连接缓存 74
4.3.2 安全风险 77
4.4 会话池和Oracle OCI连接池 78
4.4.1 OCI连接池示例 79
4.4.2 密码管理风险 82
4.5 代理身份验证 82
4.5.1 代理身份验证的示例 82
4.5.2 代理身份验证的数据库设置 85
4.5.3 代理身份验证模式 90
4.5.4 强制代理身份验证 91
4.6 小结 91
第5章 用户身份管理与企业用户 93
5.1 用户身份管理 94
5.1.1 目录服务 94
5.1.2 IM的组成 95
5.1.3 Oracle Internet Directory 95
5.2 企业用户 96
5.3 配置EUS 96
5.3.1 LDAP的配置 96
5.3.2 数据库配置 97
5.4 应用EUS 100
5.4.1 创建企业用户 100
5.4.2 连接过程 101
5.5 用户-模式映射 103
5.5.1 创建共享模式 103
5.5.2 目录映射 104
5.5.3 映射排列示例 104
5.5.4 专有模式 108
5.6 需要考虑的因素 110
5.6.1 单一凭证和性能 111
5.6.2 依赖关系 111
5.7 小结 111
第6章 Web应用的身份识别和身份验证 113
6.1 身份识别和身份验证的应用过程 114
6.2 集成身份验证 114
6.2.1 创建应用程序用户 114
6.2.2 连接应用程序用户与数据库 116
6.2.3 获取用户身份识别信息 117
6.2.4 数据库账号的设置 119
6.2.5 用户的数据库账号 119
6.2.6 身份验证的蓝图 120
6.2.7 性能 121
6.3 替代代理身份验证的方案 123
6.3.1 应用程序控制的安全 123
6.3.2 使用匿名连接池机制确保数据库的安全 132
6.4 身份识别信息 136
6.5 小结 137
第Ⅲ部分 授权与审核 141
第7章 权限和角色 141
7.1 访问控制、授权和权限 141
7.1.1 访问控制 142
7.1.2 实施访问控制 142
7.1.3 授权 142
7.2 权限 142
7.2.1 系统权限 143
7.2.2 对象权限 146
7.2.3 同义词 149
7.2.4 系统权限和对象权限的组合 150
7.2.5 权限的持久性 151
7.3 角色 155
7.3.1 角色层次 156
7.3.2 设计定义权和调用权 159
7.3.3 有选择性地启用权限 161
7.3.4 有选择性地启用权限的用例 164
7.4 基于密码保护的角色 166
7.4.1 基于密码保护的角色的示例 166
7.4.2 基于密码保护的角色与代理身份验证 167
7.4.3 确保密码安全的挑战 168
7.5 安全应用角色 169
7.6 全局角色和企业角色 174
7.6.1 创建与授予全局角色和企业角色 174
7.6.2 组合标准角色和全局(企业)角色 176
7.7 理智地使用角色 177
7.7.1 太多的角色 177
7.7.2 命名 177
7.7.3 依赖关系 178
7.8 示例——组合各种技术 179
7.8.1 应用程序的身份验证 179
7.8.2 验证用户 180
7.8.3 设置安全应用角色 182
7.8.4 确保源代码的安全 182
7.9 小结 184
第8章 为确保责任而有效地审核 185
8.1 安全周期 186
8.1.1 为了责任而审核 186
8.1.2 审核提供了反馈途径 187
8.1.3 审核并不是多余的 187
8.2 审核的方法 188
8.2.1 应用服务器的日志 188
8.2.2 应用程序的审核 188
8.2.3 应用程序审核的示例 189
8.2.4 触发器审核 194
8.2.5 触发器审核的示例 194
8.2.6 自治事务与审核 197
8.3 数据版本 199
8.3.1 回退版本查询 200
8.3.2 回退事务查询 201
8.4 标准数据库审核 203
8.4.1 强制审核 203
8.4.2 审核SYS 203
8.4.3 使用标准审核 204
8.4.4 审核用户、权限和对象 205
8.4.5 审核的良好习惯 205
8.4.6 判断审核状态 209
8.4.7 利用客户身份识别扩展审核数据 210
8.4.8 性能测试 214
8.4.9 警告 215
8.5 细粒度审核 215
8.5.1 审核条件 215
8.5.2 列敏感 218
8.5.3 捕获SQL 221
8.5.4 作为响应的审核 221
8.5.5 警告 224
8.6 小结 225
第Ⅳ部分 细粒度访问控制 229
第9章 面向安全和性能的应用上下文 229
9.1 应用上下文 230
9.2 默认的USERENV上下文 230
9.3 本地上下文 232
9.3.1 创建应用上下文 233
9.3.2 设置上下文属性和相应的值 233
9.3.3 在安全中使用应用上下文 236
9.3.4 安全地使用本地上下文 239
9.3.5 常见的错误 239
9.4 全局上下文 241
9.4.1 使用全局上下文 241
9.4.2 示例 242
9.5 外部和全局初始化 253
9.6 小结 255
第10章 利用视图实现细粒度的访问控制 257
10.1 细粒度访问的介绍 258
10.1.1 对象访问 258
10.1.2 细粒度访问 258
10.2 安全视图 259
10.2.1 基于列级安全保护的视图 260
10.2.2 基于行级安全保护的视图 267
10.2.3 视图存在的问题 270
10.3 小结 270
第11章 使用虚拟私有数据库确保行级安全 273
11.1 虚拟私有数据库的需求 274
11.2 快速了解行级安全 274
11.3 深入理解RLS 276
11.3.1 RLS的优势 277
11.3.2 RLS的设置 278
11.3.3 RLS的安全层 284
11.3.4 针对RLS策略的免除访问功能 286
11.3.5 调试RLS策略 289
11.3.6 分区细粒度访问控制 298
11.4 列敏感的VPD 298
11.5 VPD的性能 300
11.5.1 变量绑定 300
11.5.2 代码位置 301
11.5.3 策略缓存 301
11.5.4 使用缓存的注意点 310
11.5.5 VPD的性能与使用视图的RLS之间的比较 311
11.6 小结 312
第12章 Oracle标签安全 313
12.1 数据分类 313
12.2 OLS简史 314
12.2.1 标签与强制访问控制 315
12.2.2 可信任的Oracle 316
12.3 Oracle标签安全 317
12.3.1 OLS是如何发挥作用的 317
12.3.2 安装OLS 317
12.3.3 实施标签安全 318
12.4 标签示例 318
12.5 标签组件 321
12.5.1 级别 321
12.5.2 创建标签 323
12.5.3 应用OLS策略 325
12.5.4 授权访问 326
12.5.5 测试标签 327
12.5.6 OLS专用权限 328
12.5.7 区间 330
12.5.8 在受OLS保护的表中添加数据 334
12.5.9 组 337
12.5.10 使用默认的会话标签 342
12.5.11 比较标签 345
12.6 隐藏标签 346
12.7 对受OLS保护的表的写操作 349
12.7.1 理解写许可 350
12.7.2 组和区间之间的依赖关系 353
12.8 细节与诀窍 357
12.8.1 限制对标签的更新 357
12.8.2 可信任的过程 358
12.8.3 标签函数 360
12.8.4 在OID中存储标签 363
12.8.5 与连接池和共享模式一起使用标签 363
12.9 使用OLS需要考虑的因素 364
12.10 VPD与标签安全的比较 365
12.10.1 OLS的优势 365
12.10.2 VPD的优势 365
12.10.3 VPD与OLS 366
12.11 小结 368
第13章 数据库加密 369
13.1 加密简史 370
13.1.1 加密基础 370
13.1.2 加密选择 370
13.2 何时对数据库加密 373
13.2.1 不加密的理由 373
13.2.2 加密的理由 374
13.3 DBMS_CRYPTO 375
13.3.1 加密规则 376
13.3.2 DBMS_CRYPTO的简单示例 376
13.3.3 DATA_CRYPTO包 377
13.4 加密示例 381
13.4.1 加密字符、数字和日期 382
13.4.2 加密CLOB和BLOB 385
13.5 深度加密 388
13.5.1 密钥、数据和IV 388
13.5.2 存储加密数据 392
13.5.3 加密数据的大小 395
13.6 哈希 398
13.6.1 DBMS_CRYPTO哈希 398
13.6.2 消息身份验证代码 401
13.7 性能 403
13.8 密钥管理 406
13.8.1 密钥管理方案 407
13.8.2 最佳的密钥管理策略 414
13.9 小结 415
第Ⅴ部分 附录 419
附录A 设置安全管理员 419
附录B DATA_CRYPTO包 423
附录C DBMS_CRYPTO性能测试结果 445