ORACLE 权限和角色

控制用户访问 
   在多用户环境中,你想要控制数据库访问和使用的安全,可以用下面Oracle服务器提供的数据库安全措施: 
:: 控制数据库访问 
:: 在数据库中只允许访问指定的对象 
:: 用Oracle数据字典确认给予的和收回的权限 
:: 创建数据库对象的同义词 

   数据库安全可以被划分为两个范畴:系统安全和数据安全。系统安全在系统级别访问和使用数据库,例如,用户名和口令,分配给用户的磁盘空间和用户能够执行的系统操作;数据库安全包括访问和使用数据库对象和用户能够对数据库对象进行的操作。 


权限 
:: 数据库安全: 
–系统安全 
–数据安全 
:: 系统权限:授权访问数据库 
:: 对象权限:操纵数据对象的内容 
:: 方案:对象的集合,例如表、视图和序列 

权限: 
    权限是执行特殊SQL语句的权利。数据库管理员 (DBA) 是一个具有授予用户访问数据库及其对象的能力的高级用户。用户需要系统权限来访问数据库,需要对象权限来操纵数据库中对象的内容。用户也可以将被授予的权限给其它用户或者角色,角色是相关权限的命名分组。 

方案: 
   方案是对象的集合,例如,视图和序列的集合。方案被数据库用户所拥有,并且与用户有相同的名字。 



系统权限 

:: 有100 多个可用权限 
:: 数据管理员有执行任务的高级系统权限,例如: 
–创建新用户 
–删除用户 
–删除表 
–备份表 


典型的DBA权限: 

系统权限 授权的操作 
CREATE USER 受让人可以创建其他 Oracle 用户 (需要有 DBA 角色权限)。 
DROP USER 受让人可以删除另一个用户。 
DROP ANY TABLE 受让人可以删除在任意方案中的表。 
BACKUP ANY TABLE 受让人用导出实用程序可以备份在任何方案中的任何表。 
SELECT ANY TABLE 受让人可以查询在任何方案中的表、视图或快照。./././././ 
CREATE ANY TABLE 受让人可以在任何方案中创建表 



Creating Users 

DBA用CREATE USER语句创建用户 

CREATE USER user 
IDENTIFIED BY password; 

CREATE USER scott 
IDENTIFIED BY tiger; 
User created. 

创建用户 
     DBA通过执行CREATE USER语句来创建用户,在这时用户没有任何权限。DBA可以给用户授予权限,这些权限决定用户能够在数据库级别做什么。 

  以上给出了用有删节的语法创建用户的例子。 

在语法中: 
user 是被创建的用户的名字 
password 指定用户必须用该口令登录 


使用系统权限 


:: 一旦一个用户被创建,DBA 能够授予指定的系统权限给一个用户 

GRANT privilege[, privilege...] 
TO user [, user| role, PUBLIC...]; 

//不是语句的全语法. 

:: 应用程序的开发者,例如,可能有下面的系统权限: 
–CREATE SESSION 
–CREATE TABLE 
–CREATE SEQUENCE 
–CREATE VIEW 
–CREATE PROCEDURE 

典型的用户权限 
   现在已经创建了一个用户,DBA可以指定权限给该用户。 
系统权限 授权的操作 
CREATE SESSION 连接到数据库 
CREATE TABLE 在用户的方案中创建表 
CREATE SEQUENCE 在用户的方案中创建序列 
CREATE VIEW 在用户的方案中创建视图 
CREATE PROCEDURE 在用户的方案中创建存储过程、函数或包 

在语法中: 
  privilege 要被授予的系统权限 
user|role|PUBLIC 是用户的名字,角色的名字或PUBLIC,PUBLIC 
指定每一个用户被授予权限 

注:当前会话的系统权限可以在字典视图SESSION_PRIVS中找到。 

SQL> select * from session_privs; 

PRIVILEGE 
--------------------------- 
CREATE SESSION 
ALTER SESSION 
UNLIMITED TABLESPACE 
CREATE TABLE 
CREATE CLUSTER 
CREATE SYNONYM 
CREATE VIEW 
CREATE SEQUENCE 
CREATE DATABASE LINK 
CREATE PROCEDURE 
CREATE TRIGGER 

PRIVILEGE 
---------------------------- 
CREATE TYPE 
CREATE OPERATOR 
CREATE INDEXTYPE 

已选择14行。 




授予系统权限 

DBA能够授予用户指定的系统权限 
GRANT create session, create table, create sequence, create view 
TO scott; 
Grant succeeded 

授予系统权限 
   DBA使用GRANT语句给用户分配系统权限,一旦用户被授予权限,用户就可以立即使用它们。 

   以上用户Scott已经被指定了创建会话、表、序列和视图的权限。 

   用户要有足够的空间来创建表. 



角色 

什么是角色? 
   角色是命名的可以授予用户的相关权限的组,该方法使得授予、撤回和维护权限容易的多。 
一个用户可以使用几个角色,并且几个用户也可以被指定相同的角色。角色典型地为数据库应用程序创建。 

创建和分配角色 
   首先,DBA必须创建角色,然后,DBA可以分配角色给角色和用户。 

语法 
CREATE ROLE role; 

在语法中: 
   role 要被创建的角色的名字 

  现在角色已被创建,DBA可以用GRANT语句给用户指定角色,也可以指定权限给角色。 




创建角色并且授予权限给角色 

:: 创建角色 

create role manager; 
Role created; 

::授予权限给一个角色 

grant create table ,create view 
to manager; 
Grant succeeded. 

::授予一个角色给用户 

grant manager to dehaan,SH; 
Grant succeded; 

创建角色 
   上面的例子创建一个经理角色,然后允许经理创建表和视图,然后授予该DeHaan角色和SH用户,现在DeHaan和SH可以创建表和视图。 

  如果用户被授予多个角色,他们收到所有角色的联合权限。 



改变你的口令 

:: DBA 创建用户帐号并且初始化其口令 
:: 用ALTER USER语句用户可以改变他的口令 

alter user scott 
identified by lion; 
User altered. 

改变你的口令 
   DBA创建一个帐号并为每个用户初始化一个口令,你可以用ALTER USER语句改变你的口令。 

语法 
ALTER USER user IDENTIFIED BY password; 

在语法中: 
user 是用户的名字 
password 指定新的口令 

   尽管该语句可以用于改变你的口令,还有许多其它的选择,为了改变任何其它的选项你必须有ALTER USER权限。 

对象权限 
object privilege Table View Sequence Procedure 
ALTER √ √ 
DELETE √ √ 
EXECUTE √ 
INDEX √ 
INSERT √ √ 
REFERENCES √ √ 
SELECT √ √ √ 
UPDATE √ √ 


对象权限 
      对象权限 是在指定的表、视图、序列或过程上执行指定动作的权限或权利。每个对象都有一个特殊的可授予的权限集。幻灯片上的表列出了各种对象的权限注意,可用于序列的权限只有SELECT和ALTER。UPDATE、REFERENCES和INSERT权限可以通过指定一个可更新列的子集被限制,SELECT的权限可以通过创建带一个列子集的视图并且只授予SELECT权限来限制。一个在同义词上被授予的权限将转换为由同义词引用的基表上的权限。 



对象权限 

:: 不同的对象有不同的对象权限 
:: 对象的所有者有关于该对象的所有权限 
:: 对象的所有者能够给予指定的权限到独立的对象上 


GRANT object_priv [(columns)] 
ON object 
TO {user|role|PUBLIC} 
[WITH GRANT OPTION]; 

授予对象权限 
    不同的对象权限对于不同类型的方案对象的是有用的,一个用户自动拥有包含在该用户的方案中的所有对象权限,一个用户可以授予该用户所拥有的任何方案对象上任何对象权限给另一个用户或角色。如果授权包括WITH GRANT OPTION选项,那么,得到权限的用户可以再将权限授予其他的用户;否则,受让人可以使用权限,但不能授予它给其他用户。 


在语法中: 
object_priv 是将被授予的对象权限 
ALL 指定所有对象权限 
columns 从一个表或视图中指定被授予权限的列 
ON object 是权限被授予的对象 
TO 指定权限被授予谁 
PUBLIC 授予权限给所有用户 
WITH GRANT OPTION  允许被授予权限的人再授予对象权限给其他用户和角色 


授予对象权限 

:: 从EMPLOYEES表上授予查询权限到sue,rich. 

GRANT select ON employees 
TO sue, rich; 
Grant succeeded. 

:: 授予权限到以更新指定的列到用户和角色 

GRANT update (department_name, location_id) ON departments 
TO scott, manager; 
Grant succeeded. 


原则 
:: 为了授予权限到一个对象上,对象必须在你自己拥有的方案中,或者你必须被用WITH GRANT    OPTION选项授予了对象权限。 
:: 一个对象所有者可以授予任何该对象上的对象权限给任何其他的用户或者数据库的角色。 
:: 任何对象的所有者自动地获得该对象所有对象权限。 

    以上第一个例子授予用户Sue和Rich查询当前用户EMPLOYEES 表的权限。第二个例子授予在DEPARTMENTS表中指定列上的UPDATE权限给Scott和经理角色。 

如果Sue或Rich现在想要从雇员表中SELECT数据,他们必须用的语法是: 

SELECT * 
FROM scott.employees; 

作为选择。可以为该表创建一个同义词并且从同义词中选择: 

CREATE SYNONYM emp FOR scott.employees; 
SELECT * FROM emp; 

    注:DBAs 通常分配系统权限;任何拥有对象的用户都可以授予对象权限。 

SQL>show user 
'hr' 
SQL>GRANT select ON employees to sh; 

SQL>connect sh/sh 
SQL>show user 
'sh' 
SQL>select * from sh.employees; 
SQL>create synonym emp for hr.employees; 
SQL>select * from emp; 


使用WITH GRANT OPTION和PUBLIC关键字 

:: 给一个用户授权以级联权限授予 

GRANT select, insert 
ON departments 
TO scott 
WITH GRANT OPTION; 
Grant succeeded. 

:: 允许所有在系统上的用户从Alice 的DEPARTMENTS 表中查询数据 

GRANT select 
ON alice.departments 
TO PUBLIC; 
Grant succeeded. 

WITH GRANT OPTION关键字 
   带WITH GRANT OPTION子句被授予的权限可以被受让人传递到其他的用户和角色。当授予者的权限被撤消时,用WITH GRANT OPTION子句授予的对象权限也被撤消。 

   以上例子给予用户Scott访问你的DEPARTMENTS表的权限,包括查询表和添加表中行,该例子允许Scott再给予其他用户这些权限。 

PUBLIC关键字 
  表的所有者可以用PUBLIC关键字给所有用户授权。 
  第二个例子允许所有用户从Alice的DEPARTMENTS表中查询数据。 

教师注释 
   如果一个语句不用对象的全名,Oracle服务器隐式地用当前的用户名 (或方案) 作为对象名的前缀。例如,如果用户Scott查询DEPARTMENTS表,系统将从 SCOTT.DEPARTMENTS表中做选择。 

   如果一个语句不用对象的全名,并且当前用户不拥有该名字的对象,系统将用PUBLIC.作为对象名的前缀。例如,如果用户Scott查询USER_OBJECTS表,但Scott不拥有该表,系统将用PUBLIC.USER_OBJECTS公共同义词的方法从数据字典视图中进行选择。 



确认已授予的权限 


数据字典视图 说明 

ROLE_SYS_PRIVS 授予角色的系统权限 
ROLE_TAB_PRIVS 授予角色的表权限 
USER_ROLE_PRIVS 可由用户访问的角色 
USER_TAB_PRIVS_MADE 授予用户的对象上的对象权限 
USER_TAB_PRIVS_RECD 授予用户的对象权限 
USER_COL_PRIVS_MADE 授予用户对象的列上的对象权限 
USER_COL_PRIVS_RECD 授予用户在指定列上的对象权限 
USER_SYS_PRIVS 授予用户的系统权限 


确认已授予的权限 
     如果你试图执行一个未授权的操作,例如从你没有删除权限的表中删除行,Oracle服务器将不允许该操作发生。 

如果你收到Oracle服务器错误信息 “table or view does not exist,”说明发生了下面的错误: 
::  指定的表或视图不存在 
::  试图在一个你没有适当权限的表或视图上执行一个操作。 

   你可以通过访问数据字典来查看你所有的权限。上面的表中描述了各种数据字典视图。 



撤消对象权限 
:: 用REVOKE语句撤消授予其他用户的权限 
:: 通过WITH GRANT OPTION子句授予其他用户的权限也被撤消 
REVOKE {privilege [, privilege...]|ALL} 
ON object 
FROM {user[, user...]|role|PUBLIC}[CASCADE CONSTRAINTS]; 


撤消对象权限 
    你可以用REVOKE语句撤消授予其他用户的对象权限。当你用REVOKE语句时,你指定要从用户那里撤消的权限,并且通过WITH GRANT OPTION子句被级联授权的那些用户的权限也将被撤消。 

在语法中: 
      CASCADE CONSTRAINTS 用于删除任何与该对象相关的约束和对象,例如索引、触发器、权限、完整性约束等。 


撤消对象权限 
   用户Alice 撤消了在DEPARTMENTS表上给予用户Scott 的SELECT和INSERT权限 
REVOKE select, insert 
ON departments 
FROM scott; 
Revoke succeeded. 

撤消对象权限 (续) 
     以上例子撤消给予用户Scott在DEPARTMENTS表上的SELECT和INSERT权限。 

     注:如果一个用户被用WITH GRANT OPTION子句授予权限,那么,该用户用WITH GRANT OPTION子句授予权限给其他用户,所以可能产生一个很长的受让人的链,但该链不允许循环。如果所有者从撤消了一个用户的权限,那么,所有授予的联地被撤消。 

(级联删除) 
例如,如果用户A用WITH GRANT OPTION子句授予表上的SELECT权限给用户B,用户B也可以再用WITH GRANT OPTION子句授予用户C SELECT权限,然后用户C还可以授予用户D SELECT权限,如果用户A撤消了用户B的权限,那么,被授予用户C和D的权限也被撤消。 



数据库链接 

   数据库链接连接允许用户访问在远程数据库上的数据 


本地 远程 
DBA select * from emp@HQ_ACME.com;       HQ_ACME.com(DB中的emp表) 
------------------->    ------------------------> 


数据链接 
  一个数据库链接是一个指针,该指针定义一条从Oracle数据库服务器到另一个数据库服务器的通信路径。链接指针实际上在一个数据字典表中被定义为一个条目,为了访问该链接,你必须被连接到包含数据字典条目的本地数据库。 

  一个数据库链接是一条有感知的路径,一个客户可以通过该路径连接到本地数据库 A,再用存储在数据库A中的链接访问数据库B中的信息,但连接到数据库B的用户不能使用同一个链接来访问数据库A中的数据,他们必须定义一个链接,并存储在数据库B的数据字典中。 

   一个数据库链接的连接提供本地用户访问远程数据库上数据的能力,为了产生这种连接,在分布式计算机系统中的每个数据库必须有一个唯一的全局数据库名,全局数据库名唯一地标识一个在分布式系统中的数据库服务器。 

   数据库链接最大的好处是,允许用户访问在远程数据库中的另一个用户的对象,但是他们被该对象所拥有的权限集合所限制,换句话说,一个本地用户可以访问远程数据库而不需要是远程数据库上的用户。 

上面的例子显示了一个用户SCOTT用全局名HQ.ACME.COM访问在远程数据库上的EMP。 

注:典型地,DBA负责创建数据库链接。字典视图USER_DB_LINKS包含有关用户可以访问的链接信息。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值