搜索结果

×

搜索结果将在这里显示。

✨ Oracle系统权限与对象权限

Oracle系统权限与对象权限

  • oracle权限

    Oracle权限允许用户访问属于其它用户的对象或执行程序,Oracle系统提供三种权限:Object 对象级、System 系统级、Role 角色级。

    这些权限可以授予给用户、特殊用户public或角色,如果授予一个权限给特殊用户"Public"
    (用户public是oracle预定义的,每个用户享有这个用户享有的权限),那么就意味作将该权限授予了该数据库的所有用户。

  • 权限的分类

    系统权限: 允许用户执行特定的数据库动作,如创建表、创建索引、连接实例等。

    对象权限: 允许用户操纵一些特定的对象,如读取视图,可更新某些列、执行存储过程等。

  • 1. 系统权限

    是指在系统级控制数据库的存取和使用的机制,即执行某种SQL语句的能力。例如启动/停止数据库,修改数据库参数,连接数据库等权限。

    系统权限是针对于用户设置的,用户必须被授予相应的系统权限,才能连接到数据库中进行想要的操作。

    超过一百多种有效的权限(查询约209种)

    SQL> select count(*) from system_privilege_map;
    
    COUNT(*)
    ----------
         209
    • 1.1 数据库管理员权限

    具有高级权限以完成管理任务,例如:

    – 创建新用户

    – 删除用户

    – 删除表

    – 备份表

    • 1.2 常用的系统权限

    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 创建视图
    • 1.3 授予系统权限

    grant privilege [, privilege...] to user [, user| role, public...] [with admin option];

    选项:

    public 所有用户都有的角色

    with admin option 使用户同样具有分配权限的权利,可将此权限授予别人

    授予系统权限

    1、创建用户...

    2、授权

    例:

    链接到会话,创建表

    grant create session,create table to test01;
    • 1.3.1 创建表并且可以授权其他用户
    grant create session to test01 with admin option;

    注:

    1)如果使用WITH ADMIN OPTION为某个用户授予系统权限,那么对于被这个用户授予相同权限的所有用户来说,取消该用户的系统权限并不会级联取消这些用户的相同权限。

    2)系统权限无级联,即A授予B权限,B授予C权限,如果A收回B的权限,C的权限不受影响;系统权限可以跨用户回收,即A可以直接收回C用户的权限。

    • 1.3.2 执行任意存储过程权限
      grant execute any procedure to test01;

      注: execute any procedure 不能和 create any procedure 授权统一普通用户

    • 1.3.3 授权所有用户dba
      grant dba to public --不能做的哈。。
    • 1.3.4 移除所有用户的dba权限
      revoke dba from public --不能做的哈。
  • 1.4 使用系统权限

    创建test用户,默认表空间test,授权创建会话、链接数据库权限

    create user test identified by test default tablespace test;
    grant create session,connect to test;
  • 1.5 使用表空间权限

    grant unlimited tablespace to test; --授权可以使用默认表空间的权限
    conn itpux/itpux --链接会话
    create table itpuxt1 as select * from user_tables; --在默认表空间创建表
  • 1.6 显示系统权限

dba_sys_privs --针对所有用户被授予的系统权限;
user_sys_privs --针对当前登陆用户被授予的系统权限;
  • 1.7 查看所有系统权限:

    select * from system_privilege_map;
  • 1.8 显示用户所具有的系统权限:

    select * from dba_sys_privs;
  • 1.9 显示当前用户所具有的系统权限:

    select * from user_sys_privs;
  • 1.10 显示当前会话所具有的系统权限:

    select * from session_privs;
  • 1.11 在sys用户下查看TEST用户的权限

    select * from dba_sys_privs where grantee='TEST';
    select * from dba_sys_privs where grantee in ('TEST','SYSTEM') ;
    select * from dba_sys_privs where grantee in ('TEST','SYSTEM') order by grantee ;
  • 1.12 赋予系统权限

    grant create table to test;
  • 1.13 收回赋予的系统权限

    revoke create table from test;

    [!TIP]
    注意:对于使用with admin option 为某个用户授予系统权限,那么对于被这个用户授予相同权限的所有用户来说,取消该用户的系统权限并不会级联取消这些用户的相同权限.

  • 2. 对象权限

    对象权限是指用户对数据库对象的操作权限。

    数据库对象包括表,视图,序列和存储过程等。

    存储程序的对象权限有:EXECUTE​和DEBUG两种,execute有查看和执行的权限, debug只有查看的权限。

    oracle一共有8种对象权限:ALTER(更改),DELETE(删除),EXECUTE(执行),INDEX(索引),INSERT(添加),SELECT(查询)、UPDATE(刷新)、ALL(所有)。

    不同的对象具有不同的对象权限;

    对象的拥有者拥有所有权限;

    对象的拥有者可以向外分配权限;

    • 2.1 对象授权

    grant object_priv|all [(columns)] on object to {user|role|public} [with grant option];

    all:所有对象权限

    public:授给所有的用户

    with grant option:允许用户再次给其它用户授权

    conn /as sysdba;
    
    grant select on scott.emp to test; --授权test查找scott.emp表的权限
    
    grant select on scott.emp to public; --授权所有用户查找scott.emp表的权限
    
    grant update(sal,mgr) on scott.emp to test with grant option;
    
    conn itpux/itpux
    
    select * from scott.emp;
    
    update scott.emp set sal=sal+100;
    • 2.2 授予系统权限与授予对象权限的语法差异

    授予对象权限时需要指定关键字on,从而能够确定权限所应用的对象, 对于表和视图可以指定特定的列来授权。

    • 2.3 查询权限分配情况

    -- 数据字典视图
    role_sys_privs role_tab_privs
    user_tab_privs_made
    user_tab_privs_recd
    user_col_privs_made
    user_col_privs_recd
    user_sys_privs
    user_tab_privs
    user_role_privs
    • 2.4 查询已授予的对象权限(即某个用户对哪些表对哪些用户开放了对象权限)

    sql> conn scott/scott
    sql> select * from user_tab_privs_made; --下面是scott用户开放的对象权限
    • 2.5 查询列上开放的对象权限

    sql> select * from user_col_privs_made;
    • 2.6 查询已接受的对象特权(即某个用户被授予了哪些表上的哪些对象特权)

    sql> select * from user_tab_privs_recd;
    • 2.7 查询用户已接受列的对象权限

    sql> select * from user_col_privs_recd;
    • 2.8 收回对象权限

    使用revoke 语句收回权限

    使用with grant option 子句所分配的权限同样被收回

    revoke {privilege [, privilege...]|all} --on object --from {user[, user...]|role|public} -- [cascade constraints];--收回权限

    为处理引用完整性时需要

    对于要回收查询/修改列的权限,可以直接对表级进行回收,不需要到具体列。

    SQL> conn /as sysdba;
    
    Connected.
    
    SQL> revoke select on scott.emp from test;
    
    Revoke succeeded.
    
    SQL> revoke update(sal,mgr) on scott.emp from test;
    
    revoke update(sal,mgr) on scott.emp from test
    
    * ERROR at line 1:
    
    ORA-01750: UPDATE/REFERENCES may only be REVOKEd from the whole table, not by column
    
    SQL> revoke update on scott.emp from test;
    
    Revoke succeeded.
  • 3.角色权限

    角色是可以授予用户的相关权限的组,该方法使权限的授予,撤回更加容易管理

    3.1 常用角色(内置角色):

    connect 登陆权限 拥有Connect权限的用户只可以登录Oracle,不可以创建实体,不可以创建数据库结构。
    resource 开发人员权限 拥有Resource权限的用户只可以创建实体,不可以创建数据库结构。
    dba 管理员权限 拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构。
  • 3. 其它

    • 3.1 检查dba权限的用户

    select * from dba_role_privs where granted_role='dba';
    • 3.2 查看用户具有的系统权限:

    select * from session_privs;
  • 4 总结

    使用create user语句创建用户,alter user语句修改用户,其语法大致相同 drop user username [cascade] 会删除用户所拥有的所有对象及数据。

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

    with admin option 使得该用户具有将自身获得的权限授予其它用户的功能。 但收回系统权限时,不会从其它帐户级联取消曾被授予的相同权限。

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

    with grant option 使得该用户具有将自身获得的对象权限授予其它用户的功能 但收回对象权限时,会从其它帐户级联取消曾被授予的相同权限。

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

    public 为所有的用户

    all:对象权限中的所有对象权限

系统级别权限

  • 表空间  

    CREATE TABLESPACE   创建表空间;不管用户有何操作系统特权,经由Oracle把文件添加到操作系统中
    ALTER TABLESPACE  改变表空间;不管用户有何操作系统特权,经由Oracle把文件添加到操作系统中
    MANAGE TABLESPACE   使任何表空间脱机,使任何表空间联机,开始和结束对任何表空间的备份
    DROP TABLESPACE   删除表空间
    UNLIMITED TABLESPACE  使用任何没有数量限制的表空间。此特权忽略了所分配的任何具体定额。

    假如被取消的话,被授权者的模式对象仍然保留,但是进一步的表空间分配被拒绝,除非这一分配是具体的表空间定额允许的。此系统特权仅可以授予用户,而不授予角色。一般而言,应分配具体的表空间定额,而不授予此系统特权

  • 用户  

    CREATE ANY USER   创建用户;分配任意表空间上的定额,设置缺省和临时表空间,指定一个环境资源文件(在CREATE USER 语句中)
    BECOME ANY USER   成为另一个用户(这是任何一个执行完全数据库导入的用户所需要的)
    ALTER USER  改变其他用户:修改任意用户的口令或验证方法,分配表空间定额,设置缺省或临时表空间,在ALTER USER 语句中指定环境资源文件与缺省角色(不必改变自有口令)
    DROP USER   删除另一个用户
  • 角色  

    CREATE ROLE   创建角色
    ALTER ANY ROLE  改变数据库中的任何一个角色
    DROP ANY ROLE   删除数据库中的任何一个角色
    GRANT ANY ROLE  授权数据库中的任何一个角色
  • CREATE TABLE  在自有模式中创建表。还使被授权者能在自有模式下的表中创建索引,包括那些用于完整性约束的索引(被授权者必须有表空间的定额或UNLIMITED TABLESPACE 特权)
    CREATE ANY TABLE  在任何模式中创建表(假如被授权者有CREATE ANY TABLE 特权并在另一个用户模式中创建了一张表,那么拥有者必须在那个表空间上有空间定额。表的拥有者不必具有CREAT [ANY] TABLE 特权)
    ALTER ANY TABLE   改变任何模式中的任何表并编译任何模式中的任何视图
    BACKUP ANY TABLE  在任何模式中使用表的导出工具执行一个增量导出操作
    DROP ANY TABLE  删除或截断任何模式中的任何表
    LOCK ANY TABLE  锁定任何模式中的任何表或视图
  • 特权 所能实现的操作

    COMMENT ANY TABLE  对任何模式中的任何表、视图或列进行注释
    SELECT ANY TABLE  对任何模式中的任何表、视图或快照进行查询
    INSERT ANY TABLE  把行插入到任何模式中的任何表或视图中
    UPDATE ANY TABLE  修改任何模式中的任何表或视图中的行
    DELETE ANY TABLE  删除任何模式中的任何表或视图中的行
  • 索引  

    CREATE ANY INDEX  在任何表的任何模式中创建一条索引
    ALTER ANY INDEX   改变数据库中的任何索引
    DROP ANY INDEX  删除数据库中的任何索引
  • 视图  

    CREATE VIEW   在自有模式中创建视图
    CREATE ANY VIEW   在任意模式中创建视图。要在另一个用户模式中创建视图,你必须具有CREATE ANY VIEW 特权,拥用者必须在该视图引用的对象上具有所需的特权
  • 过程  

    CREATE PROCEDURE  在自有模式中创建存储的过程、函数和包
    CREATE ANY PROCEDURE  在任何模式中创建存储的过程、函数和包(这要求用户还要有ALTER ANY TABLE 、BACKUP ANY TA B LE 、DROP ANY TABLE 、SELECT ANY TABLE 、INSERT ANY TABLE 、UPDATE ANY TABLE 、DELETE ANY TABLE 或GRANT ANY TABLE 特权)
    ALTER ANY PROCEDURE   编译任何模式中的任何存储的过程、函数或包
    DROP ANY PROCEDURE  删除任何模式中的任何存储的过程、函数或包
    EXECUTE ANY PROCEDURE   执行任何过程或函数(独立的或成组的),或在任何模式中引用任何包变量
    DEBUG ANY PROCEDURE 查看定义任何存储程序
  • 序列  

    CREATE SEQUENCE   在自有模式中创建序列
    CREATE ANY SEQUENCE   在任何模式中创建任何序列
    ALTER ANY SEQUENCE  在任何模式中改变任何序列
    DROP ANY SEQUENCE   在任何模式中删除任何序列
    SELECT ANY SEQUENCE   在任何模式中引用任何序列
  • 触发器  

    CREATE TRIGGER  在自有模式中创建触发器
    CREATE ANY TRIGGER  在任何模式中创建与任何模式的任何表相关的任何触发器
    ALTER ANY TRIGGER   启用、停用或编译任何模式中的任何触发器
    DROP ANY TRIGGER  删除任何模式中的任何触发器
  • 同义词  

    CREATE SYNONYM  在自有模式中创建同义词
    CREATE ANY SYNONYM  在任何模式中创建任何同义词
    DROP ANY SYNONYM  在任何模式中删除任何同义词
  • 分析  

    ANALYZE ANY   分析数据库中的任何表、簇或索引
  • 审计  

    AUDIT ANY   审计数据库中的任何模式对象
    AUDIT SYSTEM  启用与停用语句和特权的审计选项
  • 簇  

    CREATE CLUSTER  在自有的模式中创建一个簇
    CREATE ANY CLUSTER  在任何一个模式中创建一个簇;操作类似于CREATE ANY TABLE
    ALTER ANY CLUSTER   改变数据库中的任何一个簇
    DROP ANY CLUSTER  删除数据库中的任何一个簇
  • 数据库  

    ALTER DATA BASE   改变数据库;不管操作系统的特权,经由Oracle把文件添加到操作系统中
  • 数据库链接  

    CREATE DATABASE LINK  在自有模式中创建专用数据库链接
  • 库  

    CREATE LIBRARY  在自有模式中创建调出库
    CREATE ANY LIBRARY  在任何模式中创建调出库
    DROP LIBRARY  删除自有模式中的调出库
    DROP ANY LIBRARY  删除任何模式中的调出库
  • 特权  

    GRANT ANY PRIVILEGE   授予任何系统特权(不包括对象特权)
  • 环境资源文件  

    CREATE PROFILE  创建环境资源文件
    ALTER PROFILE   改变数据库中的任何环境资源文件
    DROP PROFILE  删除数据库中的任何环境资源文件
    ALTER RESOURCE COST   设置所有的用户会话中使用的资源开销
  • 特权 所能实现的操作

  • 公共数据库链接  

    CREATE PUBLIC DATABASE LINK   创建公共数据库链接
    DROP PUBLIC DATABASE LINK   删除公共数据库链接
  • 公共同义词  

    CREATE PUBLIC SYNONYM   创建公共同义词
    DROP PUBLIC SYNONYM   删除公共同义词
  • 回滚段  

    CREATE ROLLBACK SEGMENT  创建回滚段
    ALTER ROLLBACK SEGMENT  改变回滚段
    DROP ROLLBACK SEGMENT   删除回滚段
  • 会话  

    CREATE SESSION  连接到数据库
    ALTER SESSION   发出A LTER SESSION 语句
    RESTRICTED SESSION  当数据库利用STARTUP RESTRICT 启动时进行连接(OSOPER与OSDBA角色包含此特权)
  • 快照  

    CREATE SNAPSHOT   在自有模式中创建快照(用户还必须具有C R E ATE TA B L E 特权)
    CREATE  ANY SNAPSHOT  在任何模式中创建快照(用户还必须具有CREATE ANY TABLE特权)
    ALTER SNAPSHOT  改变任何模式中的任何快照
    DROP ANY SNAPSHOT   删除任何模式中的任何快照
  • 系统  

    ALTER SYSTEM  发出ALTER SYSTEM 语句
  • 事务  

    FORCE TRANSACTION   强迫提交或回滚本地数据库中悬而未决的自有的分布式事务
    FORCE ANY TRANSACTION   强迫提交或回滚本地数据库中悬而未决的任何分布式事务
阅读:178
发布时间: