应用设计、开发与安全保障
立即解锁
发布时间: 2025-08-23 00:33:59 阅读量: 4 订阅数: 21 


数据库系统概念第六版精华
# 应用设计、开发与安全保障
## 1. 应用性能优化
### 1.1 缓存技术减少开销
在高并发的应用场景中,缓存技术能有效减少开销。以 JDBC 连接数据库为例,每次创建新的 JDBC 连接可能需要数毫秒,若为每个用户请求都开启新连接,在高事务率场景下会严重影响性能。此时可采用连接池方法:
1. 连接池管理器(应用服务器的一部分)创建一组开放的 ODBC/JDBC 连接。
2. 处理用户请求的代码(通常是 Servlet)从连接池请求连接,处理完成后将连接返回给连接池。
3. 若请求时连接池无可用连接,会打开新连接,但要注意不超过数据库系统的最大并发连接数。
4. 若有许多连接长时间未使用,连接池管理器会关闭部分连接。
许多应用服务器和较新的 ODBC/JDBC 驱动都提供内置的连接池管理器。不过,程序员常犯的错误是忘记关闭 JDBC 连接或归还连接池中的连接,这会使数据库很快达到最大连接数限制,且这种问题在小规模测试中不易发现。
除了连接池,还可缓存查询结果和最终的 Web 页面。若新请求参数与之前相同且无更新操作,可直接使用缓存结果,避免重新计算。缓存的查询结果和 Web 页面属于物化视图,当数据库数据变化时,需丢弃、重新计算或增量更新缓存结果。部分数据库系统(如 Microsoft SQL Server)提供机制,让应用服务器注册查询并在结果变化时接收通知。
### 1.2 并行处理提升性能
为处理高负载请求,可使用多个应用服务器并行运行,每个服务器处理部分请求。Web 服务器或网络路由器会将客户端请求路由到其中一个应用服务器,且同一客户端会话的所有请求需发送到同一服务器,可通过将特定 IP 地址的请求路由到同一服务器来实现。
但这种架构下,数据库易成为瓶颈。因此,应用设计者会通过在应用服务器缓存查询结果来减少对数据库的请求,必要时还会使用并行数据库系统。
以下是并行处理的 mermaid 流程图:
```mermaid
graph LR
A[客户端请求] --> B(Web 服务器/网络路由器)
B --> C1(应用服务器 1)
B --> C2(应用服务器 2)
B --> C3(应用服务器 ...)
C1 --> D(共享数据库)
C2 --> D
C3 --> D
```
## 2. 应用安全保障
### 2.1 SQL 注入攻击及防范
SQL 注入攻击中,攻击者会让应用执行其构造的 SQL 查询。例如,若将用户输入直接拼接在 SQL 查询中提交给数据库,就存在 SQL 注入风险。如以下 Java 代码:
```java
String query = "select * from student where name like '%"+ name + "%'";
```
恶意攻击者可输入 `';<some SQL statement>; --`,使应用执行额外的恶意 SQL 语句。
为避免此类攻击,可使用预编译语句执行 SQL 查询,JDBC 在设置预编译查询参数时会自动添加转义字符;也可在拼接 SQL 查询前对输入字符串应用添加转义字符的函数。
另外,动态创建查询时,若用户可指定排序属性,也存在 SQL 注入风险。应用应确保排序属性值是允许的值,例如:
```java
String query = "select * from takes order by " + or
```
0
0
复制全文
相关推荐










