oracle安全管理之权限管理

权限管理

权限管理概述

在oracle中,用户权限分为:系统权限和对象权限

系统权限:指在数据库级别执行某种操作的权限,如,create session权限,create any table权限

对象权限:指对某个特定的数据库对象执行某种操作的权限,如对表的增删改查的权限

将权限授予用户的两种方法:

(1)直接授权:利用grant命令直接为用户授权

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

DBA 的权限控制包括:

• 为用户提供执行某种操作的权限

• 授予和撤消执行系统功能的权限

• 将权限直接授予用户或角色

• 将权限授予所有用户(PUBLIC)

一,系统权限管理

1.系统权限分类

在oracle数据库中,有一百多中系统权限。可以讲系统权限授予用户,角色,public用户组、

注意:public用户组时创建数据库的时候自动创建的一个用户组,数据库中所有用户都属于该用户组;如果将某个权限授予public用户组,则数据库中所有过的用户都具备该权限

常用的系统权限有:

     CREATE SESSION                     创建会话

       CREATE SEQUENCE                    创建序列

       CREATE SYNONYM                     创建同名对象

       CREATE TABLE                       在用户模式中创建表

       CREATE ANY TABLE                   在任何模式中创建表

       DROP TABLE                         在用户模式中删除表

       DROP ANY TABLE                     在任何模式中删除表

       CREATE PROCEDURE                   创建存储过程

       EXECUTE ANY PROCEDURE              执行任何模式的存储过程

       CREATE USER                        创建用户

       DROP USER                          删除用户

       CREATE VIEW                        创建视图

oracle安全管理之权限管理_第1张图片

2.系统权限的授权

给用户授权的时候注意下面4点:

(1)只有DBA才应当拥有alter database系统权限

(2)应用程序开发者一般需要具有create table权限,create view权限,create index等系统权限

(3)普通用户一般只具有create session系统权限

(4)只有授权时带有with admin option子句时,用户才可以将获得的系统权限在授予其他用户,即系统权限的传递

GRANT  { system_privilege|role }

 [ , { system_privilege|role }  ]...

 TO  { user | role | PUBLIC }

  [,  { user | role | PUBLIC } ]...

  [ WITH ADMIN OPTION  ]

其中:

system_privilege :指定要授予的系统权限

Role:指定要授予的角色名

PUBLIC :将系统权限授予所有用户

WITH ADMIN OPTION:允许被授予者进一步为其他用户或角色授予权限或角色

 

eg:

1,为public用户组授予create session系统权限


SQL> grant create session to public;

Grant succeeded.

2,

SQL> grant create session,create table,create view,create any index to user1;

Grant succeeded.

3,

SQL> grant create session,create table,create view,create any index to user1 with admin option;

Grant succeeded.

SQL> conn user1/user1
Connected.
SQL> grant create table to user5;

Grant succeeded.

3.系统权限的回收

数据库管理员或者系统权限的传递用户可以将用户所获得的系统权限回收

使用语句:

revoke sys_priv_list from user_list | role_list | PUBLIC;

eg:

SQL> revoke create table,create view from user1;

Revoke succeeded.

回收权限时应注意以下3点:

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

eg:

SQL> grant create table to user1;

Grant succeeded.

SQL> conn system/sys123
Connected.
SQL> grant create table to user1;

Grant succeeded.

SQL> conn user1/user1
Connected.
SQL> select * from user_sys_privs;

USERNAME                       PRIVILEGE                                ADM
------------------------------ ---------------------------------------- ---
PUBLIC                         CREATE SESSION                           NO
USER1                          CREATE TABLE                             NO
USER1                          CREATE ANY INDEX                         YES
USER1                          CREATE SESSION                           YES

 

SQL> conn system/sys123
Connected.
SQL> revoke create table from user1;

Revoke succeeded.

SQL> conn user1/user1
Connected.
SQL> select * from user_sys_privs;

USERNAME                       PRIVILEGE                                ADM
------------------------------ ---------------------------------------- ---
PUBLIC                         CREATE SESSION                           NO
USER1                          CREATE ANY INDEX                         YES
USER1                          CREATE SESSION                           YES

查询可以看出,已经么有了create table权限了

 

(2)为了回收系统权限的传递性,必须先回收其系统权限,然后爱重现授予其相应的系统权限

eg:使user1不具备权限的传递性

SQL> conn / as sysdba
Connected.
SQL> revoke create any index,create session from user1;

Revoke succeeded.

SQL> grant create any index,create session to user1;

Grant succeeded.

SQL> conn user1/user1
Connected.
SQL> select * from user_sys_privs;

USERNAME                       PRIVILEGE                                ADM
------------------------------ ---------------------------------------- ---
PUBLIC                         CREATE SESSION                           NO
USER1                          CREATE ANY INDEX                         NO
USER1                          CREATE SESSION                           NO

由上表可以看出,已经不具备传递性了

 

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

oracle安全管理之权限管理_第2张图片

举例说明:学校校长授予李老师一个班主任的职位,班主任就有权选你为班长的职位,但是,如果校长撤销了李老师班主任的职位,你的班长的职位是不会撤销的!在oracle数据库中系统权限的授予与撤销亦如此。

4.查看系统权限信息

        dba_sys_privs  --针对所有用户被授予的系统权限

        user_sys_privs --针对当前登陆用户被授予的系统权限

 SQL> select  * from dba_sys_privs where grantee='USER1' order by grantee;

 GRANTEE                        PRIVILEGE                                ADM
 ------------------------------ ---------------------------------------- ---
 USER1                          CREATE ANY INDEX                         NO
 USER1                          CREATE SESSION                           NO

二,对象权限管理

1.对象权限的分类

 oracle安全管理之权限管理_第3张图片

说明:对勾处为适合对象

2.对象权限的授权

GRANT { object_privilege [ ( column_list ) ]

[ , object_privilege [ ( column_list ) ]  ]...

| ALL [ PRIVILEGES ] }

ON   [ schema. ]object

TO  { user | role | PUBLIC } [ ,  { user|role | PUBLIC }  ]...

[ WITH GRANT OPTION ]

其中:

object_privilege :指定要授予的对象权限

column_list :指定表或视图列(只在授予INSERT 、REFERENCES或UPDATE 权限

时才指定。)

ALL :将所有权限授予已被授予WITH GRANT OPTION的对象

ON object:标识将要被授予权限的对象

WITH GRANT OPTION:使被授予者能够将对象权限授予其他用户或角色

eg:对象权限授予

1.SQL> grant select,insert,update on scott.emp to user1 with grant option;

Grant succeeded. 

2.权限传递

SQL> conn user1/user1
Connected.

SQL> grant select,update on scott.emp to user5;

Grant succeeded.

3.把scott的表所有操作都给user1

SQL> grant all on scott.emp to user1;

Grant succeeded.

 

3.对象权限的回收

回收对象权限使用revoke语句,语法如下

REVOKE { object_privilege

[ , object_privilege ]...

| ALL [ PRIVILEGES ]  }

ON [ schema.]object

FROM { user | role|PUBLIC }

[ ,  { user | role|PUBLIC }  ]...

[ CASCADE CONSTRAINTS ]

说明:

object_privilege :指定将撤消的对象权限

ALL :撤消已授予用户的所有对象权限

ON:标识将撤消其对象权限的对象

FROM:标识将撤消其对象权限的用户或角色

CASCADE CONSTRAINTS:删除撤消使用REFERENCES或ALL 权限定义的任何引用

完整性约束

eg:

SQL> revoke select,update on scott.emp from user1;

Revoke succeeded.

在进行对象权限回收时应注意以下3点:

(1)多个管理员授予同一个对象权限,其中一个管理员回收其对象权限,则该用户不再拥有该对象权限

(2)如果想回收用户对象权限的传递性,必须先回收对象权限,然后在重新赋予相应的对象权限

(3)对象权限的级联性,如果用户获得的对象权限具有传递性,并且给其他用户授权,那么该用户的对象权限被回收后,其他用户对象也被回收,级联

oracle安全管理之权限管理_第4张图片

同样举个例子:如果学校授予你的班主任有使用办公室电脑的权力,你们班主任也允许你使用,但是如果有一天,学校把你们班主任的电脑回收了,你自热也不能使用了。电脑就是一个对象。

三,查询权限的信息

DBA_SYS_PRIVS :列出授予用户和角色的系统权限

SESSION_PRIVS :列出用户当前可用的权限

DBA_TAB_PRIVS :列出对于数据库中所有对象的所有授权

DBA_COL_PRIVS :描述数据库中的所有对象-列授权

SQL> conn user1/user1
Connected.
SQL> select * from session_privs;

PRIVILEGE
----------------------------------------
CREATE SESSION
CREATE ANY INDEX

 

四,总结

1.使用create user语句创建用户,alter user语句修改用户,其语法大致相同

        drop user username [CASCADE] 会删除用户所拥有的所有对象及数据

2.系统权限允许用户在数据库中执行特定的操作,如执行DDL语句。

        with admin option 使得该用户具有将自身获得的权限授予其它用户的功能

       但收回系统权限时,不会从其它帐户级联取消曾被授予的相同权限

3.对象权限允许用户对数据库对象执行特定的操作,如执行DML语句。

        with grant option 使得该用户具有将自身获得的对象权限授予其它用户的功能

       但收回对象权限时,会从其它帐户级联取消曾被授予的相同权限

4.系统权限与对象权限授予时的语法差异为对象权限使用了ON object_name 子句

5. PUBLIC 为所有的用户

6. ALL:对象权限中的所有对象权限

 

你可能感兴趣的:(oracle安全管理之权限管理)