现在的位置: 首页 > 综合 > 正文

Oracle的权限、角色

2013年08月30日 ⁄ 综合 ⁄ 共 3032字 ⁄ 字号 评论关闭

 

 Oracle的权限、角色

1、权限

权限分为系统权限(system privilege)和对象权限(object privilege)

所谓系统权限是指用户对数据库的相关权限。允许用户在数据库中执行特定操 比如执行DDL。常用的系统特权:

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

 

授权

         向用户授予系统特权,如果后面使用with admin option选项,则表示所授予的用户可以把这种特权再授予其它用户。

                   GRANT EXECUTE ANY PROCEDURE TO steve WITH ADMIN OPTION

                   CONN steve/button

                   GRANT EXECUTE ANY PROCEDURE TO gail;

                   将一种特权授予PUBLIC,可以将特权授予所有的用户。

                   CONN system/manager

                   GRANT EXECUTE ANY PROCEDURE TO PUBLIC;

                   检查授予用户的系统特权

                   通过查询user_sys_privs可以检索某个用户具有哪些系统特权.

                   SELECT * FROM  user_sys_privs

 撤权

        REVOKE EXECUTE ANY PROCEDURE FROM steve

       在撤销steve用户的execute any procedure特权时—steve已经将这种特权又授权了gail用户,gail用户仍然会保留这些特权

 

所谓对象权限是指用户对其它用户的数据对象操作的权限。比如对表执行DML。常用的对象特权:

select、update、insert、delete、execute、all (前四种的总称)

授权

        GRANT SELECT ,INSERT,UPDATE ON store.products TO steve                       

        下面这个例子将对last_name和salary列的UPDATE特权授予steve用户.

        GRANT UPDATE(last_name,salary) ON store.products TO steve                        

        此处可以使用WTIH GRANT OPTION选项

        检查已授予的对象特权通过查询user_tab_privs_made可以检查某个用户对哪些表向其它用户开放了哪些对象特权。

            SELECT *

            FROM user_tab_privs_made

            WHERE table_name=’PRODUCTS’

         通过查询user_col_privs_made可以检索某个用户对哪些列开放了哪些特权。

           SELECT *

           FROM user_col_privs_made

         检索已接受的对象特权

         通过查询user_tab_privs_recd可以检查某个用户被授予了哪些表上的哪些对象特权。

         通过查询user_col_privs_recd可以检查某个被授予了哪些列上的对象特权。

         注意:

         当所授予的权是系统特权时,并且使用WITH ADMIN OPTION选项使该系统特权向下传递,当撤销授予者的系统特权时,其所向下授予的系统特权不在撤销。

         当授予的权是对象特权时,并且使用WITH GRANT OPTION选项使该对象特权向下传递,当撤销授予者的系统特权时,其所向下授予的对象特权一并收回。

2、角色role

所谓角色就是一组特权,它可以分配给一个用户或其它角色。角色的优点如下:

(1) 特权不是每次一个直接授予一个用户;而是先创建角色,再向角色授予一些特权,然后再将该角色授予多个用户或角色。

(2) 在增加或删除一个角色的某种特权时,被授予该角色的用户或角色将自动增加或失去这种特权。

(3) 可以将多个角色授予一个用户或角色。

(4) 可以为角色设置密码。

 

创建角色

创建角色必须具有CREATE ROLE的这种系统特权。

CONN system/manager

GRANT CREATE ROLE TO store

GRANT CREATE USER TO store WITH ADMIN OPTION

 

CONN store/store_password

CREATE ROLE product_manager

CREATE ROLE overall_manager
IDENTIFIED
BY manager_password

注意overall_manager密码

为角色授权

我们可以将系统特权和对象特权授予角色,也可以将一个角色授予另一个角色。

GRANT ALL ON products TO product_manager

GRANT product_manager TO overall_manager;

将角色授予用户

GRANT overall_manager TO steve

检查授予用户的角色

通过查询user_role_privs可以检查已经授予一个用户哪些角色。

CONN steve/button

SELECT *

FROM  user_role_privs

创建一个角色的用户也会默认地被授予该角色。

角色分为自定义角色和预定义角色

 

Oracle内置角色

(1) CONNECT

(2) DBA

(3) RESOURCE

检查授予角色的系统特权

通过查询role_sys_privs

检查授予角色的对象特权

通过查询role_tab_privs

默认角色

默认情况下,在将角色授予用户时,就为该用户启动了这个角色。为了增强安全性,我们也可以默认地禁用一个角色;在这种情况下,当用户连接到数据库上时,在使用某个角色之前,必须首先启用这个角色。如果角色具有密码,那么用户在启用角色之前,必须输入密码。

ALTER ROLE 语句可以用来对角色进行修改,使其变为非默认角色。

CONNECT system/manager

ALTER USER steve DEFAULT ROLE ALL EXCEPT overall_product

当以steve身份连接到数据库上时,就需要使用SET ROLE启用overall_manager

CONNECT steve/button

SET ROLE overall_manager IDENTIFIED BY manager_password

使用SET ROLE NONE可以清空角色的设置

撤销角色

REVOKE overall_manager FROM steve

从角色中撤销特权

REVOKE ALL ON   products FROM product_managerOracle

抱歉!评论已关闭.