JaneChiu 2017-10-08
1.数据库安全控制策略概述
安全性是评估一个数据库的重要指标,Oracle数据库从3个层次上采取安全控制策略:
数据库的安全可以从以下几个方面进行管理:
数据库审计。监视和记录数据库中的活动,包括审计所有的SQL语句、审计SQL权限、审计模式对象以及审计网络活动等。
接下来将对数据库安全管理方法进行一 一讨论。
2.用户管理
用户是数据库的使用者和管理者,Oracle通过设置用户及安全属性来控制用户对数据库的访问。Oracle的用户分两类,一类是创建数据库时系统预定义的用户,一类是根据应用由DBA创建的用户。
2.1 预定义用户
在oracle创建时创建的用户,我们称为预定义用户,预定义用户根据作用不同分为3类:
此外还有2个特殊的用户SCOTT和PUBLIC,SCOTT是一个用于测试网络连接的用户,PUBLIC实际是一个用户组,数据库中任何用户都属于该用户组,如果要为数据库中的全部用户授予某种权限,只需要对PUBLIC授权即可。
2.2 用户属性
在创建用户时,必须使用安全属性对用户进行限制,用户的安全属性主要包括:
可以通过数据字典dba_users查询各个用户的属性(这里只截取了前面几列):
SQL> select * from dba_users; USERNAME USER_ID PASSWORD ACCOUNT_STATUS LOCK_DATE EXPIRY_DATE DEFAULT_TABLESPACE TEMPORARY_TABLESPACE CREATED ------------ ---------- ---------- ----------------- ----------- ----------- ------------------- ---------------------- ----------- SCOTT 84 OPEN 2017/8/20 0 USERS TEMP 2009/8/15 0 LIJIAMAN 91 OPEN 2017/10/31 USERS TEMP 2017/2/25 1 ORACLE_OCM 21 EXPIRED & LOCKED 2009/8/15 0 2009/8/15 0 USERS TEMP 2009/8/15 0 XS$NULL 2147483638 EXPIRED & LOCKED 2009/8/15 0 2009/8/15 0 USERS TEMP 2009/8/15 0
2.3 创建用户
创建用户语法如下:
其中:
-user_name:新创建的用户的名称;
-IDENTIFIED:指明用户认证方式;
-BY password:采用数据库身份认证,password为用户密码;
-EXTERNALLY:指定用户采用外部认证,其中:①AS ‘certificate_DN’指定用户采用ssl外部身份认证;②AS ‘kerberos_principal_name’指定用户采用kerberos外部身份认证;
-GLOBALLY AS ‘directory_DN’:指定用户采用全局身份认证;
-DEFAULT TABLESPACE tablespace_name:设置用户的默认表空间;
-TEMPORARY TABLESPACE tablespace_name | tablespace_group_name:设置用户临时表空间/表空间组;
-QUOTA n K|M|UNLIMITED ON tablespace_name:指定用户在特定表空间上的配额;
-PROFILE profile_name:为用户指定概要文件;
-PASSWORD EXPIRE:指定用户密码到期,用户首次登陆时系统会要求改密码;
-ACCOUNT LOCK|UNLOCK:指定用户为锁定/非锁定状态,默认不锁定。
2.4 修改用户
修改用户采用ALTER实现,语句与CREATE USER基本相同,唯一不同的是多了DEFAULT ROLE选项,用于指定用户的默认角色:
ALTER USER user_name ... [DEFAULT ROLE [role_list] | [ALL [EXCEPT role_list]] | NONE ] ... ;
其中:
-role_list:指定角色列表;
-ALL:指定全部角色;
-EXCEPT role_list:除了role_list指定的角色之外的角色;
-NONE:不指定角色 .
2.5 锁定与解锁用户
当用户被锁定后,就不能登录数据库了,但是用户的所有数据库对象仍然可以继续使用,当用户解锁后,用户就可以正常连接到数据库。
在Oracle中,当账户不再使用时,就可以将其锁定。通常,对于不用的账户,可以进行锁定,而不是删除。
例子,锁定与解锁scott用户:
/*使用SYS锁定SCOTT账户,锁定之后无法在登录*/ SQL> show user; USER 为 "SYS" SQL> ALTER USER SCOTT ACCOUNT LOCK; 用户已更改。 SQL> conn scott/tiger ERROR: ORA-28000: the account is locked 警告: 您不再连接到 ORACLE。 /*解锁SCOTT账户,解锁后登录到数据库*/ SQL> conn sys as sysdba 输入口令: 已连接。 SQL> ALTER USER SCOTT ACCOUNT UNLOCK; 用户已更改。 SQL> conn scott/tiger; 已连接。
2.6 删除用户
使用drop user删除用户,基本语法为:
DROP USER user_name [CASCADE];
如果用户拥有数据库对象,则必须使用CASCADE选项,Oracle先删除用户的数据库对象,再删除该用户。
2.7 查询用户信息
在Oracle中,包含用户信息的数据字典如下:
视图名称 | 说明 |
DBA_USERS | 包含数据库的所有用户的详细信息(15项) |
ALL_USERS | 包含数据库所有用户的用户名、用户ID和用户创建时间(3项) |
USER_USERS | 包含当前用户的详细信息(10项) |
DBA_TS_QUOTAS | 包含所有用户的表空间配额信息 |
USER_TS_QUOTAS | 包含当前用户的表空间配额信息 |
V$SESSION | 包含用户会话信息 |
V$SESSTAT | 包含用户会话统计信息 |
3.资源限制与口令管理
在数据库中,对用户的资源限制与用户口令管理是通过数据库概要文件(PROFILE)实现的,每个数据库用户必须具有一个概要文件,通常DBA将用户分为几种类型,为每种类型的用户单独创建一个概要文件。概要文件不是一个具体的文件,而是存储在SYS模式的几个表中的信息的集合。
3.1 资源限制
概要文件通过一系列资源管理参数,从会话级和调用级两个级别对用户使用资源进行限制。会话资源限制是对用户在一个会话过程中所能使用的资源进行限制,调用资源限制是对一条SQL语句在执行过程中所能使用的资源总量进行限制。资源限制的参数如下:
下面是scott用户的资源限制信息:
3.2 口令管理
oracle概要文件用于数据库口令管理的主要参数如下:
下图是scott用户的口令管理参数设置信息:
3.3 查询概要文件信息
在Oracle 11g中,包含概要信息的数据字典如下:
视图名称 | 说明 |
DBA_USERS | 包含数据库中所有用户属性信息,包括使用的概要文件(profile) |
DBA_PROFILES | 包含数据库中所有的概要文件及其资源设置、口令管理设置等信息 |
USER_PASSWORD_LIMITS | 包含当前用户的概要文件的口令限制参数设置信息 |
USER_RESOURCE_LIMITS | 包含当前用户的概要文件的资源限制参数设置信息 |
RESOURCE_COST | 每个会话使用资源的统计信息 |
4.权限管理
在Oracle数据库中,用户权限主要分为系统权限与对象权限两类。系统权限是指在数据库基本执行某些操作的权限,或针对某一类对象进行操作的权限,对象权限主要是针对数据库对象执行某些操作的权限,如对表的增删(删除数据)查改等。
4.1 系统权限
(4.1.1)系统权限概述
在Oracle 11g中,一共有200多项系统权限,可通过数据字典system_privilege_map获得所有的系统权限。
(4.1.2)系统权限的授予
授予用户系统权限的SQL语法为:
GRANT system_privilege_list | [ALL PRIVILEGES] TO user_name_list | role_list | PUBLIC [WITH ADMIN OPTION];
其中:
-system_privilege_list:系统权限列表,以逗号分隔;
-ALL PRIVILEGES:所有系统权限;
-user_name_list:用户列表,以逗号分隔;
-role_list:角色列表,以逗号分隔;
-PUBLIC:给数据库中所有用户授权;
-WITH ADMIN OPTION:允许系统权限接收者再将权限授予其它用户
在授予用户系统权限时,需要注意:
(4.1.3)系统权限的回收
回收用户系统权限的SQL语法如下:
REVOKE system_privilege_list | [ALL PRIVILEGES] FROM user_name_list | role_list | PUBLIC
回收用户系统权限需要注意以下3点:
4.2 对象权限
对象权限是指对某个特定模式对象的操作权限。数据库模式对象所有者拥有该对象的所有对象权限,对象权限的管理实际上是对象所有者对其他用户操作该对象的权限管理。在Oracle数据库中,不同类型的对象具有不同的对象权限,而有的对象并没有对象权限,只能通过系统权限进行管理,如簇、索引、触发器、数据库链接等。
(1)对象权限的授予
在Oracle数据库中,用户可以直接访问同名Schema下的数据库对象,如果需要访问其它Schema下的数据库对象,就需要具有相应的对象权限。对象权限授予的SQL语法为:
GRANT object_privilege_list | ALL [PRIVILEGES] [ (column,...) ] ON [schema.]object TO user_name_list | role_list | PUBLIC [WITH GRANT OPTION];
其中:
-object_privilege_list:对象权限列表,以逗号分隔;
-ALL PRIVILEGES:全部权限;
-[schema.]object:待授权的对象;
-user_name_list:用户列表,以逗号分隔;
-role_list:角色列表,以逗号分隔;
-PUBLIC:所有用户
(2)对象权限的回收
回收对象权限的SQL语法为:
REVOKE object_privilege_list | ALL [PRIVILEGES] ON [schema.]object FROM user_name_list | role_list | PUBLIC [CASCADE CONSTRAINTS] | [FORCE];
其中:
-CASCADE CONSTRAINTS:当回收REFERENCE对象权限或回收ALL PRIVILEGES,删除利用REFERENCES对象权限创建的外键约束;
-FORCE:当回收在表中被使用的用户自定义对象类型的EXECUTE权限时,必须指定FORCE关键字。
回收对象权限需要注意以下3点:
4.3 查询权限信息
视图名称 | 说明 |
DBA_SYS_PRIVS | 包含所有用户和角色获得的系统权限信息 |
ALL_SYS_PRIVS | 包含当前用户可见的全部用户和角色获得的系统权限信息 |
USER_SYS_PRIVS | 当前用户获得的系统权限信息 |
DBA_TAB_PRIVS | 包含所有用户和角色获得的对象权限信息 |
ALL_TAB_PRIVS | 包含当前用户可见的全部用户和角色获得的对象权限信息 |
USER_TAB_PRIVS | 当前用户获得的对象权限信息 |
DBA_COL_PRIVS | 包含数据库中所有列对象的权限信息 |
ALL_COL_PRIVS | 包含当前用户可见的所有列对象的权限信息 |
USER_COL_PRIVS | 当前用户拥有的或授予其它用户的所有列对象的权限信息 |
SESSION_PRIVS | 当前会话可以使用的所有权限信息 |
5.角色管理
假如我们直接给每一个用户赋予权限,这将是一个巨大又麻烦的工作,同时也不方便DBA进行管理。通过采用角色,使得:
图. 用户、角色、权限关系图
由于个人接触的数据库用户较少,没有单独创建角色,故角色的创建、修改、删除、激活、禁用、授予、回收不再一一讲述,只要知道如何查询角色信息即可。
在Oracle中,包含角色的数据字典如下:
视图名称 | 说明 |
DBA_ROLE_PRIVS | 包含数据库中所有用户拥有的角色信息 |
USER_ROLE_PRIVS | 包含当前用户拥有的角色信息 |
ROLE_ROLE_PRIVS | 角色拥有的角色信息 |
ROLE_SYS_PRIVS | 角色拥有的系统权限信息 |
ROLE_TAB_PRIVS | 角色拥有的对象权限信息 |
DBA_ROLES | 当前数据库中所有角色及其描述信息 |
SESSION_ROLES | 当前会话所具有的角色信息 |
6.审计