zoukankan      html  css  js  c++  java
  • Oracle DB 权限与角色

    • 授予和撤销权限
    • 创建和管理角色
     
     
    1、权限
     
    用户权限有两类:
    • 系统:允许用户在数据库中执行特定的操作
    • 对象:允许用户访问和操纵特定的对象
    “权限”是用于执行特定类型的SQL 语句或访问其他用户的对象的一种权限。Oracle DB 可以控制用户在数据库中能够(或无法)执行的操作。
     
    权限可分为以下两种类别:
     
    • 系统权限:每种系统权限都允许用户执行一个特定的数据库操作或一类数据库操作。
    例如,创建表空间的权限就是一种系统权限。系统权限可由管理员授予,或者由被显式授权其管理权限的用户授予。有一百多种不同的系统权限。很多系统权限都包含
    ANY子句。
     
    • 对象权限:用户可以使用对象权限对特定对象(如表、视图、序列、过程、函数或程序包)执行特定的操作。在没有特定权限的情况下,用户只能访问他们自己拥有的对象。对象权限可以由对象的所有者或管理员授予,也可以由被显式授予了权限,可以为其他人员分配对某个对象的权限的人员授予。
     
    2、系统权限
     
     
    要授予系统权限,请单击“Edit User(编辑用户)”页上的“Systems Privileges(系统权限)”选项卡。从可用权限列表中选择适当的权限,然后通过单击“Move(移动)”箭头将其移至“Selected System Privileges(选定的系统权限)”列表中。
     
    使用ANY子句授予权限意味着权限可以跨越方案。例如,如果具有CREATE TABLE权限,则可以创建表,但只能在自己的方案中创建。使用SELECT ANY TABLE权限就可从其他用户拥有的表中进行选择。
     
    SYS用户和具有DBA角色的用户被授予了所有ANY权限;因此,它们可以对任何数据对象执行任何操作。
    可以使用Oracle Database Vault 选件来控制ANY系统权限的作用域。
    如果选中了“Admin Option(管理选项)”复选框,则用户可以管理权限并将系统权限授予给其他用户。
     
    授予系统权限的SQL 语法如下:
    GRANT <system_privilege> TO <grantee clause> [WITH ADMIN OPTION]
    例如:
    grant create session to emi;
    grant create session to emi with admin option;
     
    在授予系统权限之前仔细考虑安全要求。某些系统权限通常只能授予给管理员:
     
    • RESTRICTED SESSION:使用这个权限可以登录,即使数据库是在受限模式下打开时也是如此。
     
    • SYSDBA和SYSOPER:使用这两个权限可以在数据库中执行关闭、启动、恢复及其它管理任务。
    用户使用SYSOPER可执行基本操作任务,但不能查看用户数据。
    这个权限包括以下系统权限:
    - STARTUP和SHUTDOWN
    - CREATE SPFILE
    - ALTER DATABASE OPEN/MOUNT/BACKUP
    - ALTER DATABASE ARCHIVELOG
    - ALTER DATABASE RECOVER(仅限完全恢复。任何形式的不完全恢复,如UNTIL TIME|CHANGE|CANCEL|CONTROLFILE,都需要以SYSDBA身份建立连接。)
    - RESTRICTED SESSION
    除此之外,SYSDBA系统权限还允许执行不完全恢复和删除数据库。用户使用SYSDBA系统权限可以SYS用户身份有效地建立连接。
     
     
    • SYSASM:使用此权限可以启动、关闭和管理ASM 实例。
     
    • DROP ANY对象:用户使用DROP ANY权限可删除其他用户拥有的对象。
     
    • CREATE、MANAGE、DROP和ALTER TABLESPACE:这些权限允许进行表空间管理,包括创建、删除和更改表空间的属性。
     
    • CREATE LIBRARY:Oracle DB 允许开发人员在PL/SQL 内创建和调用外部代码(例如C 库)。此库必须由数据库中的LIBRARY对象指定。CREATE LIBRARY权限允
    许用户创建可从PL/SQL 执行的任意代码库。
     
    • CREATE ANY DIRECTORY:作为一种安全措施,代码所在的操作系统目录必须链接到一个虚拟Oracle 目录对象。使用CREATE ANY DIRECTORY权限时,有可能会调用不安全的代码对象。
     
    用户使用CREATE ANY DIRECTORY权限可以在Oracle 软件所有者能够访问的任何目录中创建目录对象(具有读写访问权限)。这意味着用户可以访问那些目录中的外部过程。用户可以尝试直接读写任何数据库文件,如数据文件、重做日志和审计日志。确保采用了安全策略,以防止此类强大的权限被误用。
     
    • GRANT ANY OBJECT PRIVILEGE:使用此权限可以对其他人拥有的对象授予对象权限。
     
    • ALTER DATABASE和ALTER SYSTEM:这些权限的功能很强,可用于修改数据库和Oracle 实例,例如,重命名数据文件或刷新缓冲区高速缓存。
     
     
    3、对象权限
     
    要向对象授予权限,执行以下操作:
     
    1.选择对象类型。
     
     
    2.选择对象。
     
    3.选择权限。
     
     
    授予对象权限,单击“Edit User(编辑用户)”页上的“Object Privileges(对象权限)”选项卡。选择要将其权限授予给用户的对象的类型,然后单击“Add(添加)”按钮。通过输入<username.object name>或从列表中进行选择来选择对象。
     
    然后,在“Available Privileges(可用权限)”列表中选择适当权限,再单击“Move(移动)”按扭。选择权限之后,单击“OK(确定)”。
    如果允许此用户向其他用户授予相同的访问权限,请在“Edit User(编辑用户)”页中选中“Grant(授权)”复选框。
     
    授予对象权限的SQL 语法如下:
    GRANT <object_privilege> ON <object> TO <grantee clause> [WITH GRANT OPTION]
     
    例如:
    grant execute on dbms_output to jeff;
    grant update on emi.customers to jeff with grant option;
     
    4、撤销系统权限
    使用REVOKE SQL 语句可撤销使用GRANT命令直接授予的系统权限。具有ADMIN OPTION系统权限的用户可撤销其它任何数据库用户的权限。撤销者与最初授予权限的用户不一定是同一个用户。
    无论是否指定了ADMIN OPTION,撤销系统权限都不会产生级联影响。
     
    撤销系统权限的SQL 语法如下:
    REVOKE <system_privilege> FROM <grantee clause>
    revoke create table from emi;
     
     
    以上说明了以下情况。
    方案
    1. DBA 将CREATE TABLE系统权限连同ADMIN OPTION授予给Jeff。
    2. Jeff 创建一个表。
    3. Jeff 将CREATE TABLE系统权限授予Emi。
    4. Emi 创建一个表。
    5. DBA 撤销Jeff 的CREATE TABLE系统权限。
    结果
    Jeff 的表仍然存在,但Jeff 无法创建新表。
    Emi 的表仍然存在,而且她仍然具有CREATE TABLE系统权限。
     
     
    5、撤销具有GRANT OPTION的对象权限
     
    撤销与数据操纵语言(DML) 操作相关的系统权限时可能会出现级联影响。例如,如果将SELECT ANY TABLE权限授予某个用户,并且该用户已经创建了使用表的过程,则必须先重新编译用户的方案中包含的所有过程,然后才能再次使用这些过程。
     
    指定了GRANT OPTION时,撤销对象权限也会产生级联影响用户只能撤销他们所授予的那些权限。例如,Bob 无法撤销Jeff 授予给Emi 的对象权限。
    有被授权者或具有GRANT ANY OBJECT PRIVILEGE 权限的用户才可以撤销对象权限。
     
     
    方案
    1. Jeff 被授予了对EMPLOYEES的SELECT对象权限以及GRANT OPTION。
    2. Jeff 将对EMPLOYEES的SELECT权限授予给Emi。
    3.撤销Jeff 的SELECT权限。这个撤销操作会同时对Emi 产生级联影响。
     
    关于权限的视图如下:
    DBA_SYS_PRIVS
    SESSION_PRIVS
    DBA_TAB_PRIVS
    DBA_COL_PRIVS
     
    6、角色的作用
     
    • 简化权限管理:使用角色可简化权限管理。可以将一组权限授予给某个角色,然后将该角色授予给每个用户,而不是将同一组权限授予给多个用户。
    • 动态进行权限管理:如果修改了与某个角色关联的权限,则所有被授予该角色的用户都会立即自动获得修改后的权限。
    • 有选择地使用权限:通过启用或禁用角色可以暂时打开或关闭权限,这样便可以控制用户在特定情形下的权限。
     
    7、将权限分配给角色以及将角色分配给用户
     
    在大多数系统中,将必要的权限分别授予给每个用户是一项很耗时的工作,而且很容易出错。Oracle 软件通过角色来提供简单且受控的权限管理功能。角色是可授予给用户或其它角色的、由相关权限组成的一些已命名的组。角色的设计目的是为了简化数据库中的权限管理,从而增强数据库的安全性。
     
    角色特性
    • 角色就像用户,可以授予角色权限或撤销角色权限。
    • 角色就像系统权限一样,可以将其授予给用户或其它角色,也可以从用户或其它角色撤销。
    • 角色可以由系统权限和对象权限组成。
    • 可以对授予了某一角色的每个用户启用或禁用该角色。
    • 可能需要口令才能启用角色。
    • 角色不归任何用户拥有,也不属于任何方案。
     
    上中,向HR_CLERK角色授予了对employees表的SELECT和UPDATE权限以及CREATE JOB系统权限。向HR_MGR角色授予了对employees表的DELETE和INSERT权限以及HR_CLERK角色。管理员被授予了HR_MGR角色,现在管理员可以选择、删除、插入和更新employees表。
     
    8、预定义角色
     
     
    运行数据库创建脚本时会为Oracle DB 自动定义若干个角色。CONNECT会自动授予给任何使用Enterprise Manager 创建的用户。出于安全原因,自10.2.0 版Oracle DB 之后,CONNECT角色仅包含CREATE SESSION权限。
    注:请注意,授予RESOURCE角色时包括授予UNLIMITED TABLESPACE权限。
     
    功能角色
     
    已经创建了一些允许你管理特殊功能(如果已安装了这些功能)的其它角色。例如,
    XDBADMIN包含管理扩展标记语言(XML) 数据库(如果已安装此功能)所需的权限。
    AQ_ADMINISTRATOR_ROLE提供管理高级队列的权限。
    HS_ADMIN_ROLE包括管理异种服务所需的权限。
    在没有Oracle 技术支持协助的情况下,不得改变授予给这些功能性角色的权限,否则可能会无意中禁用所需的功能。
     
    9、创建角色
     
    “角色”是一个由相关权限组成的已命名的组,可授予给用户或其它角色。DBA 通过角色来管理权限。
    要创建角色,请执行以下步骤:
    1.在Enterprise Manager Database Control 中,单击“Server(服务器)”选项卡,然后
    在“Security(安全)”标题下单击“Roles(角色)”。
    2.单击“Create(创建)”按钮。
    3.在“General(一般信息)”选项卡上,输入角色的名称。
    4.根据需要添加系统权限、对象权限和其它角色(可选)。如有必要,以后可编辑角色来修改这些设置。
    5.完成时单击“OK(确定)”。
     
     
    或者使用sql语言,如下:
    无验证:create role test_role;
    口令验证:create role test_role identified by test;
    外部验证create role test_role identified externally;
     
    可以使用alter role语句来改变role的验证方式
    alter role oe_clerk identified by order;
    alter role hr_clerk identified externally;
    alter role hr_manager not identified;
     
    10、保护角色
     
    • 角色可以是非默认角色。SET ROLE vacationdba;
    • 可以通过验证保护角色。(口令,外部,全局)
    • 还可以通过编程保护角色。
    CREATE ROLE secure_application_role
    IDENTIFIED USING <security_procedure_name>;
    create role admin_role identified using hr.employee;
     
    默认情况下通常会启用角色,这意味着如果将角色授予给某个用户,则该用户就可以行使指定给角色的权限。在连接时会为用户分配默认角色。
    此时用户可以:
    • 使角色成为非默认角色。将角色授予给用户后,取消选中“DEFAULT(默认)”复选框。现在,用户必须先显式启用角色,才可以行使角色的权限。
    • 要求对角色进行附加验证。默认情况下角色的验证为“无”,但可以要求对角色进行附加验证,之后才能设置角色。
    • 只有成功地执行了PL/SQL 过程才能创建安全的应用程序角色。通过PL/SQL 过程可以检查某些方面,如用户的网络地址、用户正在运行的程序、当日时间以及正确保护权限组所需的其它元素。
    • 使用Oracle Database Vault 选件可以轻松管理角色。可以简化安全的应用程序角色,并进一步地限制传统角色。
     
    11、将角色分配给用户
     
    可以使用角色来管理数据库权限。可以向角色添加权限,并将该角色授予给用户。用户然后可以启用角色,从而行使角色授予的权限。角色包含授予给该角色的所有权限,以及授予给该角色的其它角色的所有权限。
    默认情况下,Enterprise Manager 会自动将CONNECT角色授予给新用户。这样,用户可连接到数据库,然后在自己的方案中创建数据库对象。
    要将角色分配给用户,请执行以下操作:
    1.在Enterprise Manager Database Control 中,单击“Server(服务器)”选项卡,然后
    在“Security(安全)”标题下单击“Users(用户)。”
    2.选择用户,然后单击“Edit(编辑)”按钮。
    3.单击“Roles(角色)”选项卡,然后单击“Edit List(编辑列表)”按钮。
    4.在“Available Roles(可用角色)”中选择所需角色,然后将其移至“Selected Roles(所选角色)”中。
    5.分配了所有适当的角色后,单击“OK(确定)”按钮。
     
     
    也可以使用grant语句来将角色分配给用户
    grant oe_clerk to scott;
    grant hr_clerk to hr_manager;
    grant hr_manager to scott with admin option;
     
    12、建立默认的角色
     
    •一个用户可以分配很多角色;
    •一个用户可以分配一个默认的角色;
    •一个用户的默认角色有数量的限制。
     
    使用sql语言如下:
    alter user scott default roll hr_clerk,oe_clerk;
    alter user scott default role all;
    alter user scott default role all except hr_clerk;
    alter user scott default role none;
     
    13、撤销用户的角色
     
    只有具有admin option或者grant any role 的权限的用户才能撤销。
    revoke oe_clerk from scott;
    revoke hr_manager from public;
     
    14、删除角色
     
    drop一个角色,相当于移除了所有用户和角色所授予的角色,从数据库中移除。
    要求具有admin option或者drop any role的权限。
    sql:drop role hr_manager;
     
    15、数据字典保护
     

    启用数据字典保护:

    可以通过设置初始化参数O7_DICTIONARY_ACCESSIBILITY 为false来保护数据字典。

    此参数可以防止用户(拥有任何系统权限即是在SYS模式对象的权限的用户)来使用这些数据字典。

    oracle数据库提供高度细化的权限。

    一个这样的特权,通常所说的任何特权,通常授予唯一的应用程序的owners和个人的数据库管理员。

    例如,可以授予DROP ANY TABLE 的权限给一个应用程序所有者,通过打开或关闭的07_DICTIONARY_ACCESSIBILITY初始化参数,免遭意外或恶意使用的任何特权,可以保护Oracle数据字典。

     

    启用数据字典保护工作流

    1. 使用em登陆到Oracle Enterprise Manager Database Control (Database Control).

    2. 点击Server"服务器",点击Initialization Parameters“初始化参数”。

    3. 搜索O7_DICTIONARY_ACCESSIBILITY这个参数。

    4. O7_DICTIONARY_ACCESSIBILTY 设置为FALSE。

    5. 点击应用,然后重启数据库。

    O7_DICTIONARY_ACCESSIBILITY参数:

    O7_DICTIONARY_ACCESSIBILITY控制对系统权限的限制。如果该参数被设置为true时,sys模式中的对象都可以访问数据字典。默认设置为false,确保系统权限被允许访问其他任何模式,而不能访问sys模式。

    例如,O7_DICTIONARY_ACCESSIBILITY设置为false,那么 SELECT ANY TABLE 的权限允许访问除了sys模式(数据字典不能被访问)中任何视图或表。系统权限EXECUTE ANY PROCEDURE ,可以访问任何模式除了sys模式。

    如果这个参数设置为falise,你需要访问在sys模式的对象,那么必须明确授予对象权限。以下角色,可以授予数据库管理员,也允许访问字典对象:

    • SELECT_CATALOG_ROLE

    • EXECUTE_CATALOG_ROLE

    • DELETE_CATALOG_ROLE

    16、相关的视图
     
  • 相关阅读:
    自动发送邮件功能
    工作中常用的Android系统ADB命令收集
    商城系统必须知道的【订单、优惠金额、退货、实际营收】解释
    商城系统项目必须知道的专业数据指标
    接口加密思路
    Selenium使用Chrome模拟手机浏览器方法解析
    PHP上传图片基本代码示例
    iframe子页面获取父页面的点击事件
    javascript实现网页倒计时效果
    Crontab常用命令总结
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13317105.html
Copyright © 2011-2022 走看看