Oracle数据库安全与审计指南
立即解锁
发布时间: 2025-08-21 02:09:19 阅读量: 2 订阅数: 6 

# Oracle数据库安全与审计指南
## 1. 外部身份验证
外部身份验证意味着用户无需在数据库中使用密码,Oracle会查看操作系统(OS),并将用户名(去掉OPS$前缀)与操作系统上的用户进行匹配。Oracle假定,由于用户已登录到操作系统,因此该用户已通过身份验证。可以通过修改Oracle参数OS_AUTHEN_PREFIX来更改这个前缀OPS$。
在为用户设置所有必要的权限后(后续会详细介绍),用户可以从操作系统命令行无密码登录:
```sql
<sqlplus />
```
## 2. 权限授予
创建用户后,需要决定该用户在数据库中可以执行哪些操作。通常希望用户能够登录,但可能需要限制用户执行以下任务的权限:
- 访问特定数据
- 启动和停止数据库
- 创建表、索引和视图
- 删除数据
- 执行备份
通过权限来确定用户可以执行的操作。数据库有两种类型的权限:
- **系统权限**:控制用户在数据库中可以执行的操作。例如,能否创建表、创建用户和删除表空间等。这些权限主要用于添加或更改数据库中的结构。
- **对象权限**:控制用户如何访问数据库中的实际数据。例如,用户可以查看、更改或删除哪些数据。这些权限主要适用于表或视图中的行。
使用GRANT和REVOKE命令来管理所有权限。从命令名称可以很清楚地看出哪个是授予权限,哪个是撤销权限。不过,命令的格式取决于权限的类型。例如,授予权限时使用GRANT TO,撤销权限时使用REVOKE FROM。
### 2.1 授予和撤销系统权限
系统权限是任何用户首先需要的权限。实际上有数百种系统权限,这里列出一些常见的系统权限,这些权限可以满足用户约90%的访问需求。
在用户对数据库进行任何操作之前,需要能够连接到数据库。CREATE SESSION权限允许用户访问数据库。没有这个权限,其他权限都没有意义。
#### 2.1.1 授予CREATE SESSION权限给用户DTITILAH的步骤:
1. 以SYSTEM用户身份登录到数据库。
2. 输入以下命令:
```sql
<GRANT CREATE SESSION TO dtitilah;>
```
你会看到以下信息,表示DTITILAH可以连接到数据库:
```
Grant succeeded.
```
#### 2.1.2 如果用户DTITILAH的密码已泄露,撤销其CREATE SESSION权限的步骤:
1. 以SYSTEM用户身份登录到数据库。
2. 输入以下命令:
```sql
<REVOKE CREATE SESSION FROM dtitilah;>
```
你会看到以下信息:
```
Revoke succeeded.
```
当该用户尝试连接时,会看到以下错误信息:
```
ERROR:
ORA-01045: user DTITILAH lacks CREATE SESSION privilege; logon denied
```
3. 找出密码泄露的原因,解决安全漏洞。
4. 按照前面的步骤重新授予该权限,处理将恢复正常。
用户可能还拥有以下系统权限,允许他们在数据库中创建对象:
- RESUMABLE:允许作业在遇到空间限制时暂停和恢复。
- FLASHBACK ARCHIVE:允许用户从过去检索数据。
- CREATE JOB:允许用户创建可以在Oracle调度程序中运行的作业。
- CREATE SYNONYM:允许用户为对象创建别名,以便更方便地访问。
以下权限通常适用于开发人员:
- CREATE TABLE
- CREATE VIEW
- CREATE SEQUENCE
- CREATE PROCEDURE
- CREATE TRIGGER
数据库管理员(DBA)通常拥有以下权限:
- CREATE ANY TABLE:在任何用户的模式中创建表。
- DROP ANY TABLE:从任何用户的模式中删除表。
- CREATE TABLESPACE:创建表空间存储区域。
- ALTER USER:更改用户特征。
- DROP USER:删除用户。
- ALTER SYSTEM:更改系统操作参数。
- GRANT ANY OBJECT:允许被授权者管理数据库中任何对象的任何对象权限,非常强大!
WITH ADMIN OPTION是与系统权限相关的另一个功能。在授予系统权限时可以使用此选项,允许用户将该权限授予其他人。例如,假设你聘请了一位新的DBA,用户名为RPLEW。你希望用户MJAUST具有CREATE SESSION权限连接到数据库,同时也希望他能够将该权限授予其他人。
#### 2.1.3 授予系统权限WITH ADMIN OPTION的步骤:
1. 以SYSTEM用户身份登录到SQL*Plus。
2. 输入以下命令:
```sql
<GRANT CREATE SESSION TO maust WITH ADMIN OPTION;>
```
你会看到以下信息:
```
Grant succeeded.
```
现在MAUST也可以管理CREATE SESSION权限了。
如果撤销了WITH ADMIN OPTION,由该用户授予此权限的所有用户仍然保留这些权限。这与WITH GRANT OPTION不同,它不是级联撤销。
### 2.2 对象权限
对象权限控制数据的访问和修改。
#### 2.2.1 理解对象权限
只能授予八种对象权限:
- SELECT:允许接收者从表中选择行。
- INSERT:允许接收者向表中插入行。
- UPDATE:允许接收者更改表中的现有行。
- DELETE:允许接收者从表中删除现有行。
- REFERENCES:允许用户在其他用户的表上创建视图或外键。
- INDEX:允许用户在其他用户的表上创建索引。
- ALTER:允许用户更改或添加其他用户表的结构。
- EXECUTE:允许接收者运行其他用户拥有的过程。
需要记住以下关于对象权限的要点:
- 当你拥有一个对象时,你自动拥有该对象的所有权限。也就是说,你不需要被授予对自己表的SELECT权限。
- 不能从对象的所有者那里撤销对象权限。
- 拥有对象的模式最终控制该对象的权限。
- 未经明确许可,除了可能拥有系统权限GRANT ANY OBJECT的用户(通常是DBA)之外,没有人可以管理该对象的权限。
- 除了授予权限的人或拥有GRANT ANY OBJECT权限的人之外,任何人都不能撤销对象权限。即使是对象的所有者,除非她是授予者,否则也不能撤销自己对象上的权限。
#### 2.2.2 管理对象权限
以下示例中,用户MAGGIE、JASON和MATT在一个包含食谱的数据库中工作。此示例使用对象权限允许他们查看和添加更多食谱。
1. MAGGIE登录。
2. MAGGIE输入以下命令:
```sql
<GRANT SELECT ON vegetarian_recipes TO jason;>
```
这允许用户MAGGIE允许JASON从她的VEGETARIAN_RECIPES表中选择数据。她会看到以下信息:
```
Grant succeeded.
```
与系统权限的WITH ADMIN OPTION类似,对象权限有一个叫做WITH GRANT OPTION的功能。
- MAGGIE可以允许JASON向她的表中插入数据,并允许JASON将该权限传递给其他人:
```sql
<GRANT SELECT ON vegetarian_recipes TO jason WITH GRANT OPTION;>
```
- JASON可以将INSERT权限传递给MATT:
```sql
<GRANT SELECT ON maggie.vegetarian_recipes TO matt;>
```
- MAGGIE不能直接从MATT撤销INSERT权限,她必须要求JASON这样做。
- 如果JASON拒绝撤销MATT的INSERT权限,MAGGIE可以从JASON撤销该权限,从而也撤销MATT的权限。这称为级联撤销,与系统权限不同。
- MAGGIE可以从JASON撤销INSERT权限,同时自动撤销MATT的权限:
```sql
<REVOKE INSERT ON vegetarian_recipes FROM jason;>
```
她会看到以下信息:
```
Revoke succeeded.
```
如果用户想查看自己授予了哪些对象权限,可以查询视图USER_TAB_PRIVS。例如,MAGGIE可以查看JASON在她的对象上还拥有哪些权限:
```sql
<SELECT * FROM USER_TAB_PRIVS
WHERE GRANTEE = ‘JASON’;>
```
她可能会看到类似以下的信息:
| GRANTEE | OWNER | TABLE_NAME | GRANTOR | PRIVILEGE |
| ---- | ---- | ---- | ---- | ---- |
| JASON | MAGGIE | VEGETARIAN_RECIPES | MAGGIE | SELECT |
### 2.3 创建角色
可以使用数据库角色对权限进行分组,以便于管理。对象所有者可以创建一个角色并授予该角色,而不是分别向一个或多个具有相似工作职责的用户授予权限。
例如,假设你是一家大型零售商的DBA。每天都会招聘新的店员。应用程序允许他们执行多项任务,包括:
- 向SALES表中插入数据
- 更新INVENTORY表
- 从ORDERS表中删除数据
#### 2.3.1 使用角色授予权限的步骤:
1. 以HR用户身份登录到SQL*Plus。
2. 输入以下命令:
```sql
<CREATE ROLE sales_clerk;>
```
这个角色名为SALES_CLERK,你会看到以下信息:
```
Role created.
```
3. 向角色授予系统和对象权限:
```sql
<GRANT INSERT ON sales TO sales_clerk;>
<GRANT UPDATE ON inventory TO sales_clerk;>
<GRANT DELETE ON orders TO sales_clerk;>
```
以此类推。
4. 将角色授予员工:
```sql
<GRANT sales_clerk TO rob, nora, dan;>
```
角色被授予新店员ROB、NORA和DAN。你会看到以下信息:
```
Grant Succeeded.
```
角色的另一个优点是动态权限管理,即向角色添加或删除权限会立即影响所有拥有该角色的用户。
所有用户在特定时间段(例如几个月)内需要能够从INVENTORY表中选择数据。此时,不必向可能数百名店员分别授予该权限,只需授予角色,他们将自动拥有该权限。这使得权限管理更加容易。
### 2.4 Oracle提供的角色
数据库安装时会自带一些已经创建和设置好
0
0
复制全文
相关推荐










