zoukankan      html  css  js  c++  java
  • 转:Oracle 權限 (privileges)

    首先還是先建立測試用的資料
    測試用Tablespace   demots
    測試用User         demouser
    測試用Table        demouser.AAA


    ## 建立測試用 Tablespace  demots ##
    Create tablespace DEMOTS datafile '/u2/oradb/oradata/orcl/test1-01.dbf' size 10M;

    ## 建立測試用user demouser ##
    create user DEMOUSER identified by DEMOUSER
    default tablespace DEMOTS
    temporary tablespace TEMP;
    grant create session,create table to DEMOUSER;
    grant resource to DEMOUSER;
    grant drop any table to DEMOUSER;

    ## 建立測試用Table  AAA ##
    conn demouser/demouser
    create table AAA (
        name    char(6),
        salary  number(6),
        note    varchar(20));
       
    insert into  AAA values('James','60000','HaHa');
    insert into  AAA values('Peter','50000','HaHa2');
    insert into  AAA values('Nancy','40000','HaHa3');
    insert into  AAA values('Mary','30000','HaHa4');
    insert into  AAA values('Bill','30000','HaHa5');
    insert into  AAA values('Joe','30000','HaHa6');

    一些針對 privileges 常用的 view
    The views for Oracle object privileges
    USER_TAB_PRIVS
    ALL_TAB_PRIVS 
    ROLE_TAB_PRIVS
    DBA_TAB_PRIVS

    USER_ROLE_PRIVS
    ALL_ROLE_PRIVS
    ROLE_ROLE_PRIVS
    DBA_ROLE_PRIVS

    Additionally there are Oracle object privileges that pertain to the whole system called system privileges.
    USER_SYS_PRIVS
    ALL_SYS_PRIVS
    ROLE_SYS_PRIVS
    DBA_SYS_PRIVS

    Then the VIEWS that contain information about the users in the database are:
    USER_USERS
    ALL_USERS
    DBA_USERS

    系統權限 System Privilege
    系統權限包含能建立各種資料庫物件,修改資料庫組態,及大範圍的權力如 drop any table,預設只有DBA可以授予系統權限。

    語法
    grant provilege [, privilege, ...]
    to username [,username]
    [with admin option];

    物件權限  Object Privilege
    明確的授予使用者可以在可以在哪些schema object上做哪些動作,如使用者 B 可以在使用
    者A上的物件作select的動作。

    語法
    grant privilege [,privilege, ...] | ALL [(column[, column, ...])]
    on objectname
    to user | role | public
    [with grant option];

    ## 查詢所有 System Privileges ##
    select DISTINCT PRIVILEGE from DBA_TAB_PRIVS;

    ## 查詢已經被授 System Privilege 的使用者 ##
    select distinct GRANTEE from DBA_SYS_PRIVS order by GRANTEE;
    select * from DBA_SYS_PRIVS where GRANTEE='DEMOUSER';

    ## 查詢已經被授 Object Privilege 的使用者 ##
    select distinct GRANTEE from DBA_TAB_PRIVS order by GRANTEE;
    select * from DBA_TAB_PRIVS where GRANTEE='DEMOUSER';

    以上的查詢可以得知帳號DEMOUSER有被授予 System Privilege 但未被授予 Object Privilege,因為TABLE AAA 是屬於帳號DEMOUSER的Object。

    ## 建立使用者 testuser,來存取demouser的object ##
    create user TESTUSER identified by TESTUSER;
    grant connect, create session to TESTUSER;             --#授予可以連sqlplus的系統權限。
    grant select on DEMOUSER.AAA to TESTUSER;     --#授予可以select DEMOUSER.AAA 的物件權限。

    測試一下testuser是否可以 select 資料
    conn testuser/testuser
    SQL> select * from DEMOUSER.AAA;

    NAME       SALARY NOTE
    ------ ---------- --------------------
    James       60000 HaHa
    Peter       50000 HaHa2
    Nancy       40000 HaHa3
    Mary        30000 HaHa4

    再來看一看 testuser 所被授予的物件權限
    SQL> conn / as sysdba

    SQL> show user;
    USER is "SYS"

    SQL> select GRANTEE,OWNER,PRIVILEGE from DBA_TAB_PRIVS where GRANTEE='TESTUSER';
    GRANTEE         OWNER           PRIVILEGE
    --------------- --------------- ---------------
    TESTUSER        DEMOUSER        SELECT


    使用者權限概念差不多了,接下來就是角色了,以下方向為建立一個使用者,給他可以連SQLPLUS的系統權限,但不給她物件權限而是給他角色,讓她達到可以select DEMOUSER.AAA的目的,這次就把系統權限授予給角色,使用者就可以不用建立系統權權限也可以用SQLPLUS囉。

    ## 建立使用者 ROLEUSER,授予 ROLE_AAA 角色,來存取demouser的object ##
    conn / as sysdba
    create user ROLEUSER identified by ROLEUSER;

    ## 建立角色 ROLE_AAA
    create role ROLE_AAA not identified;
    grant connect, create session to ROLE_AAA;   <= 這次就把系統權限授予給角色。
    grant select on DEMOUSER.AAA to ROLE_AAA;

    ## 將角色授予給ROLEUSER
    grant ROLE_AAA to ROLEUSER;

    ## 切換到ROLEUSER 測試 select 的功能。
    conn ROLEUSER/ROLEUSER
    select * FROM DEMOUSER.AAA;

    ## 再給一個物件權限,來達到使用者ROLEUSER可以update 表格DEMOUSER.AAA 的目的。
    conn / as sysdba
    grant update on DEMOUSER.AAA to ROLEUSER;

     ## 切換到ROLEUSER做測是 update 的功能。
     
    SQL> conn ROLEUSER/ROLEUSER
    SQL> update DEMOUSER.AAA set NAME='Man' where NAME='Joe';

    1 row updated.   <== 有update成功

    當然角色也可以授予系統權限,請各看官自己試試看囉。


    一些查詢授予權限的範例。
    ## 查詢所有系統權限 System Privileges ##
    select distinct name from system_privilege_map;
    SELECT DISTINCT privilege FROM dba_sys_privs;

    ## 查詢已經被授 System Privileges 的使用者 ##
    select distinct GRANTEE from dba_sys_privs order by GRANTEE;
    select * from dba_sys_privs where GRANTEE='ROLEUSER';

    ## 查詢已經被授 Object Privileges 的使用者 ##
    select distinct GRANTEE from dba_tab_privs order by GRANTEE;
    select * from dba_tab_privs where GRANTEE='ROLEUSER';


    ## 查詢所有存在的角色 ##
    select name from user$ where type#=0 order by name;

    ## 查詢所有存已經被授與角色的角色 ##
     select * from ROLE_ROLE_PRIVS;


    ## 查詢已經被授予 System Privileges 的的角色 ##
    select * from ROLE_SYS_PRIVS where role='ROLE_AAA';

    ## 查詢已經被授予 Object Privileges 的的角色 ##
    select distinct ROLE from  ROLE_TAB_PRIVS order by role;
    select * from ROLE_TAB_PRIVS where role='ROLE_AAA';

    ## 查詢已經被授予的角色的使用者 ##
    select distinct GRANTEE from dba_role_privs order by GRANTEE;
    select * from  dba_role_privs where GRANTEE='ROLEUSER';

    原文链接http://bloodsucker.pixnet.net/blog/post/38649657-oracle-%E6%AC%8A%E9%99%90-(privileges)

  • 相关阅读:
    关于EKT相关知识(类的反射)
    关于EKT的相关知识(类加载)
    jsoup中selector的用法及作用
    xml相关的Dom解析
    Jsoup的快速入门
    java.sql.SQLException: Column count doesn't match value count at row 1
    JAVA调用存储过程、存储函数
    注解的使用场景-反射与知识点
    JDK1.5新特性
    在JDK中,主要由以下类来实现Java反射机制
  • 原文地址:https://www.cnblogs.com/weaver1/p/2746300.html
Copyright © 2011-2022 走看看