`
jessen163
  • 浏览: 457202 次
  • 性别: Icon_minigender_1
  • 来自: 潘多拉
社区版块
存档分类
最新评论

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包含有关用户可以访问的链接信息。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics