Oracle超详细笔记12--安全管理

一、数据库安全性概述

1.数据库的安全性主要包括两个方面的含义:

一方面是防止非法用户对数据库的访问,未授权的用户不能登录数据库;

另一方面是每个数据库用户都有不同的操作权限,只能进行自己权限范围内的操作。

 

2.Oracle数据安全控制机制

用户管理

权限管理

角色管理

表空间设置和配额

用户资源限制

数据库审计   

 

3.Oracle数据库的安全可以分为两类:

系统安全性

系统安全性是指在系统级控制数据库的存取和使用的机制,包括有效的用户名与口令的组合、用户是否被授权可连接数据库、用户创建数据库对象时可以使用的磁盘空间大小、用户的资源限制、是否启动了数据库审计功能,以及用户可进行哪些系统操作等。

数据安全性

数据安全性是指在对象级控制数据库的存取和使用机制,包括用户可存取的模式对象和在该对象上允许进行的操作等。

 

二、用户管理

1.用户管理概述

Oracle数据库初始用户

 SYS:是数据库中具有最高权限的数据库管理员,可以启动、修改和关闭数据库,拥有数据字典;

 SYSTEM:是一个辅助的数据库管理员,不能启动和关闭数据库,但可以进行其他一些管理工作,如创建用户、删除用户等。

SCOTT:是一个用于测试网络连接的用户,其口令为TIGER。

PUBLIC:实质上是一个用户组,数据库中任何一个用户都属于该组成员。要为数据库中每个用户都授予某个权限,只需把权限授予PUBLIC就可以了。

 

2.用户属性

用户身份认证方式

数据库身份认证

操作系统身份认证

网络身份认证

管理员身份认证

默认表空间

当用户在创建数据库对象时,如果没有显式地指明该对象在哪个表空间中存储,系统会自动将该数据库对象存储在当前用户的默认表空间中。

如果没有为用户指定默认表空间,则系统将数据库的默认表空间作为用户的默认表空间。

临时表空间 

当用户进行排序、汇总和执行连接、分组等操作时,系统首先使用内存中的排序区SORT_AREA_SIZE,如果该区域内存不够,则自动使用用户的临时表空间。

在Oracle 11g中,如果没有为用户指定临时表空间,则系统将数据库的默认临时表空间作为用户的临时表空间。

表空间配额

表空间配额限制用户在永久表空间中可以使用的存储空间的大小,默认情况下,新建用户在任何表空间中都没有任何配额。

用户在临时表空间中不需要配额。

概要文件 

每个用户都必须有一个概要文件,从会话级和调用级两个层次限制用户对数据库系统资源的使用,同时设置用户的口令管理策略。如果没有为用户指定概要文件,Oracle将为用户自动指定DEFAULT概要文件。

账户状态

在创建用户的同时,可以设定用户的初始状态,包括用户口令是否过期以及账户是否锁定等。Oracle允许任何时候对帐户进行锁定或解锁。锁定账户后,用户就不能与Oracle数据库建立连接,必须对账户解锁后才允许用户访问数据库。

 

3.创建用户

注意

在创建新用户后,必须为用户授予适当的权限,用户才可以进行相应的数据库操作。例如,授予用户CREATE SESSION权限后,用户才可以连接到数据库。

创建一个用户user3,口令为user3,默认表空间为USERS,在该表空间的配额为10 MB,初始状态为锁定。

CREATE USER user3 IDENTIFIED BY user3

DEFAULT TABLESPACE USERS QUOTA 10M ON USERS ACCOUNT LOCK;

例:

创建一个用户user4,口令为user4,默认表空间为USERS,在该表空间的配额为10 MB。口令设置为过期状态,即首次连接数据库时需要修改口令。概要文件为example_profile(假设该概要文件已经创建)。

CREATE USER user4 IDENTIFIED BY user4

DEFAULT TABLESPACE USERS

QUOTA 10M ON USERS

PROFILE example_profile

PASSWORD EXPIRE;

 

4.修改用户

例:

将用户user3的口令修改为newuser3,同时将该用户解锁。

ALTER USER user3

  IDENTIFIED BY newuser3 ACCOUNT UNLOCK;

例:

修改用户user4的默认表空间为ORCLTBS1,在该表空间的配额为20 MB,在USERS表空间的配额为10 MB。

ALTER USER user4

DEFAULT TABLESPACE ORCLTBS1  

QUOTA 20M ON ORCLTBS1  

QUOTA 10M ON USERS;

 

用户的锁定与解锁

某个用户暂时离开工作  

某个用户永久离开工作

示例

ALTER USER user3 ACCOUNT LOCK;

ALTER USER user3 ACCOUNT UNLOCK;

 

5.删除用户

基本语法

DROP USER user_name [ CASCADE ];

步骤(使用了cascade-用户已经创建模式对象)

先删除用户所拥有的对象

再删除用户

将参照该用户对象的其他数据库对象标志为INVALID

 

6.查询用户信息

ALL_USERS:包含数据库所有用户的用户名、用户ID和用户创建时间。

DBA_USERS:包含数据库所有用户的详细信息。

USER_USERS:包含当前用户的详细信息。

DBA_TS_QUOTAS:包含所有用户的表空间配额信息。

USER_TS_QUOTAS:包含当前用户的表空间配额信息。

V$SESSION:包含用户会话信息。

V$OPEN_CURSOR:包含用户执行的SQL语句信息。

例:

查看数据库所有用户名及其默认表空间。

SELECT USERNAME,DEFAULT_TABLESPACE

FROM DBA_USERS;

例:

查看数据库中各用户的登录时间、会话号。

SELECT

SID,SERIAL#,LOGON_TIME,USERNAME

FROM V$SESSION;

 

三、权限管理

1.权限管理概述

概念

所谓权限就是执行特定类型SQL命令或访问其他用户的对象的权利。

用户在数据库中可以执行什么样的操作,以及可以对哪些对象进行操作,完全取决于该用户所拥有的权限。

分类

系统权限:

系统权限是指在数据库级别执行某种操作的权限,或针对某一类对象执行某种操作的权限。例如,CREATE SESSION权限、CREATE ANY TABLE权限。

对象权限:

对象权限是指对某个特定的数据库对象执行某种操作的权限。例如,对特定表的插入、删除、修改、查询的权限。

授权方法

直接授权:利用GRANT命令直接为用户授权。

间接授权:先将权限授予角色,然后再将角色授予用户。

 

2.系统权限管理

系统权限分类

一类是对数据库某一类对象的操作能力,通常带有ANY关键字。例如,CREATE ANY INDEX,ALTER ANY INDEX,DROP ANY INDEX 。

另一类系统权限是数据库级别的某种操作能力。例如,CREATE SESSION。

 

系统权限的授权

语法为

GRANT sys_priv_list

TO  user_list|role_list|PUBLIC

[WITH ADMIN OPTION];

参数说明:

sys_priv_list:表示系统权限列表,以逗号分隔;

user_list:表示用户列表,以逗号分隔;

role_list:表示角色列表,以逗号分隔;

PUBLIC:表示对系统中所有用户授权;

WITH ADMIN OPTION:表示允许系统权限接收者再把此权限授予其他用户。

 

系统权限授予时需要注意的几点:

只有DBA才应当拥有ALTER DATABASE 系统权限。

应用程序开发者一般需要拥有CREATE TABLE、CREATE VIEW和CREATE INDEX等系统权限。

普通用户一般只具有CREATE SESSION系统权限

只有授权时带有WITH ADMIN OPTION子句时,用户才可以将获得的系统权限再授予其他用户,即系统权限的传递性。

 

例:

为PUBLIC用户组授予CREATE SESSION系统权限。

       GRANT CREATE SESSION TO PUBLIC;

为用户user1授予CREATE SESSION,CREATE TABLE,CREATE INDEX系统权限。

        GRANT CREATE SESSION,CREATE TABLE,CREATE VIEW TO user1;

为用户user2授予CREATE SESSION,CREATE TABLE ,CREATE INDEX系统权限。user2获得权限后,为用户user3授予CREATE  TABLE权限。

       GRANT CREATE SESSION,CREATE TABLE,

       CREATE VIEW TO user2 WITH ADMIN OPTION;

       CONNECT user2/user2 @ORCL

       GRANT CREATE TABLE TO user3;

 

系统权限的回收

语法为

REVOKE sys_priv_list

FROM user_list|role_list|PUBLIC;

注意事项

多个管理员授予用户同一个系统权限后,其中一个管理员回收其授予该用户的系统权限时,该用户将不再拥有相应的系统权限。

为了回收用户系统权限的传递性(授权时使用了WITH ADMIN OPTION子句),必须先回收其系统权限,然后再授予其相应的系统权限。

如果一个用户获得的系统权限具有传递性,并且给其他用户授权,那么该用户系统权限被回收后,其他用户的系统权限并不受影响。

 

3.对象权限管理

对象权限分类

在Oracle数据库中共有9种类型的对象权限,不同类型的模式对象有不同的对象权限,而有的对象并没有对象权限,只能通过系统权限进行控制,如簇、索引、触发器、数据库链接等。

 

对象权限的授权

语法

GRANT obj_priv_list|ALL

ON [schema.]object

TO user_list|role_list

[WITH GRANT OPTION];

参数说明

obj_priv_list:表示对象权限列表,以逗号分隔;

[schema.]object:表示指定的模式对象,默认为当前模式中的对象;

user_list:表示用户列表,以逗号分隔;

role_list:表示角色列表,以逗号分隔;

WITH GRANT OPTION:表示允许对象权限接收者把此对象权限授予其他用户。

 

例:

将scott模式下的emp表的SELECT,UPDATE,INSERT权限授予user1用户。

       GRANT SELECT,INSERT,UPDATE

       ON scott.emp TO user1;

将scott模式下的emp表的SELECT,UPDATE,INSERT权限授予user2用户。user2用户再将emp表的SELECT,UPDATE权限授予user3用户。

        GRANT SELECT,INSERT,UPDATE

        ON scott.emp

        TO user2

        WITH GRANT OPTION;

 

       CONNECT user2/user2@ORCL

       GRANT SELECT,UPDATE

       ON scott.emp

       TO user3;

 

对象权限的回收

语法

REVOKE obj_priv_list | ALL ON [schema.]object

 FROM user_list|role_list;

注意事项

多个管理员授予用户同一个对象权限后,其中一个管理员回收其授予该用户的对象权限时,该用户不再拥有相应的对象权限

为了回收用户对象权限的传递性(授权时使用了WITH GRANT OPTION子句),必须先回收其对象权限,然后再授予其相应的对象权限。

如果一个用户获得的对象权限具有传递性(授权时使用了WITH GRANT OPTION子句),并且给其他用户授权,那么该用户的对象权限被回收后,其他用户的对象权限也被回收。

 

WITH ADMIN OPTION与WITH GRANT OPTION比较

当甲用户授权给乙用户,且激活该选项,则被授权的乙用户具有管理该权限的能力:或者能把得到的权限再授给其他用户丙,或者能回收授出去的权限。当甲用户收回乙用户的权限后,乙用户曾经授给丙用户的权限仍然存在

当甲用户授权给乙用户,且激活该选项,则被授权的乙用户具有管理该权限的能力:或者能把得到的权限再授给其他用户丙,或者能回收授出去的权限。当甲用户收回乙用户的权限后,乙用户曾经授给丙用户的权限也被回收。

 

4.查询权限信息

DBA_TAB_PRIVS:包含数据库所有对象的授权信息

ALL_TAB_PRIVS:包含数据库所有用户和PUBLIC用户组的对象授权信息

USER_TAB_PRIVS:包含当前用户对象的授权信息

DBA_COL_PRIVS:包含所有字段已授予的对象权限

ALL_COL_PRIVS:包含所有字段已授予的对象权限信息

USER_COL_PRIVS:包含当前用户所有字段已授予的对象权限信息。

DBA_SYS_PRIVS:包含授予用户或角色的系统权限信息

USER_SYS_PRIVS:包含授予当前用户的系统权限信。

 

四、角色管理

1.Oracle数据库角色概述

所谓角色就是一系列相关权限的集合(对权限的批量管理)

 

2.预定义角色

预定义角色概述

预定义角色是指在Oracle数据库创建时由系统自动创建的一些常用的角色,这些角色已经由系统授予了相应的权限。

DBA可以直接利用预定义的角色为用户授权,也可以修改预定义角色的权限。

Oracle数据库中有30多个预定义角色。

可以通过数据字典视图DBA_ROLES查询当前数据库中所有的预定义角色,通过DBA_SYS_PRIVS查询各个预定义角色所具有的系统权限。

 

3.自定义角色

创建角色

语法为

CREATE ROLE role_name [NOT IDENTIFIED][IDENTIFIED BY password];

参数说明

role_name:用于指定自定义角色名称,该名称不能与任何用户名或其他角色相同;

NOT IDENTIFIED:用于指定该角色由数据库授权,使该角色生效时不需要口令;

IDENTIFIED BY password:用于设置角色生效时的认证口令。

CREATE ROLE high_manager_role;

CREATE ROLE middle_manager_role IDENTIFIED BY middlerole;

CREATE ROLE low_manager_role IDENTIFIED BY lowrole;

 

4.角色权限的授予与回收

说明

给角色授予适当的系统权限、对象权限或已有角色。

在数据库运行过程中,可以为角色增加权限,也可以回收其权限。

给角色授权时应该注意,一个角色可以被授予另一个角色,但不能授予其本身,不能产生循环授权。

GRANT CONNECT,CREATE TABLE,CREATE VIEW TO low_manager_role;

GRANT CONNECT,CREATE TABLE,CREATE VIEW TO middle_manager_role;

GRANT CONNECT,RESOURCE,DBA TO high_manager_role;

GRANT SELECT,UPDATE,INSERT,DELETE ON scott.emp TO high_manager_role;

 

REVOKE CONNECT FROM low_manager_role;

REVOKE CREATE TABLE,CREATE VIEW FROM middle_manager_role;

REVOKE UPDATE,DELETE ,INSERT ON scott.emp FROM high_manager_role;

 

5.修改角色

概念

修改角色是指修改角色生效或失效时的认证方式,也就是说,是否必须经过Oracle确认才允许对角色进行修改。

修改角色的语法

ALTER ROLE role_name

[NOT IDENTIFIED]|[IDENTIFIED BY password];

ALTER ROLE high_manager_role IDENTIFIED BY highrole;

ALTER ROLE middle_manager_role NOT IDENTIFIED;

 

6.角色的生效与失效

概念

所谓角色的失效是指角色暂时不可用。当一个角色生效或失效时,用户从角色中获得的权限也生效或失效。因此,通过设置角色的生效或失效,可以动态改变用户的权限。

在进行角色生效或失效设置时,需要输入角色的认证口令,避免非法设置。

语法

SET ROLE [role_name[IDENTIFIED BY password ]]|[ALL [EXCEPT role_name]]|[NONE];

参数说明

role_name:表示进行生效或失效设置的角色名称;

IDENTIFIED BY password:用于设置角色生效或失效时的认证口令;

ALL:表示使当前用户所有角色生效;

EXCEPT role_name:表示除了特定角色外,其余所有角色生效;

NONE:表示使当前用户所有角色失效。

 

SET ROLE NONE;

SET ROLE high_manager_role IDENTIFIED BY highrole;

SET ROLE middle_manager_role,low_manager_low IDENTIFIED BY lowrole;

SET ROLE ALL EXCEPT low_manager_role,middle_manager_role;  

 

7.删除角色

语法结构

DROP ROLE role_name;

说明

如果某个角色不再需要,则可以使用DROP ROLE语句删除角色。角色被删除后,用户通过该角色获得的权限被回收。

 

8.利用角色进行权限管理

给用户或角色授予角色

语法

GRANT role_list TO user_list|role_list;

将CONNECT,high_manager_role角色授予用户user1,将RESOURCE,CONNECT角色授予角色middle_manager_role。

        GRANT CONNECT,high_manager_role TO user1;

        GRANT RESOURCE,CONNECT TO middle_manager_role;

从用户或角色回收角色

语法

REVOKE role_list FROM user_list|role_list;

回收角色middle_manager_role的RESOURCE,CONNECT角色。

SQL>REVOKE RESOURCE,CONNECT FROM middle_manager_role;

用户角色的激活或屏蔽

语法

ALTER USER user_name DEFAULT ROLE

[role_name]|[ALL [EXCEPT role_name]]|

[NONE];

ALTER USER user1 DEFAULT ROLE NONE;

ALTER USER user1 DEFAULT ROLE CONNECT,DBA;

ALTER USER user1 DEFAULT ROLE ALL;

ALTER USER user1 DEFAULT ROLE ALL EXCEPT DBA;

 

9.查询角色信息

DBA_ROLES:包含数据库中所有角色及其描述;

DBA_ROLE_PRIVS:包含为数据库中所有用户和角色授予的角色信息;

USER_ROLE_PRIVS:包含为当前用户授予的角色信息;

ROLE_ROLE_PRIVS:为角色授予的角色信息;

ROLE_SYS_PRIVS:为角色授予的系统权限信息;

ROLE_TAB_PRIVS:为角色授予的对象权限信息;

SESSION_PRIVS:当前会话所具有的系统权限信息;

SESSION_ROLES:当前会话所具有的角色信息。

 

查询角色CONNECT所具有的系统权限信息。

    SELECT *

    FROM ROLE_SYS_PRIVS

    WHERE ROLE='CONNECT';

查询DBA角色被授予的角色信息。

   SELECT *

   FROM  ROLE_ROLE_PRIVS

   WHERE ROLE='DBA';

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值