2、Oracle用戶權限管理和Sql*plus 基本命令

  1. Oracle和SQL Server的區別:sql

     

    SQL Server用戶sa登陸後,能夠看到不少數據庫;而Oracle的啓動實際上是啓動一個Oracle的實例,至關於一個數據庫。那麼Users只能對這個Oracle實例中的數據對象擁有權限。而每一個用戶擁有的數據對象可能不相同。數據庫

  2. Oracle的用戶管理網絡

    Oracle安裝完成後,會默認生成三個用戶,sys、system、scott,其中scott是普通用戶;sys是超級管理員,權限最高,角色是dba,而且具備create database的權限;system是系統管理員,權限也很高,角色是dbaoper,沒有create database權限。session

    Oracle權限介紹:oracle


    (1)權限:ide

             查詢oracle中全部的系統權限,通常是DBA去操做spa

             select * from system_privilege_map order by name;code

             查詢全部的對象權限: select distinct privilege from dba_tab_privs;orm

             查詢數據庫的表空間: select tablespace_name from dba_tablespaces;對象

             回收系統權限和對象權限的區別:系統權限不是級聯回收,而對象權限會級聯回收。好比:A 將系統權限授予B,          B又將權限授予C,若是A收回B的權限,那麼C的系統權限不會被回收。而對象權限則不是,若是A收回B的對象權          限,那麼C的對象權限也將被收回。

    (2)角色

            角色是爲了簡化權限的管理,是相關權限的命令集合。角色通常是由DBA來創建,若是別的用戶創建,須要有create role的系統權限。那麼如何建立角色?

            a. 建立角色:

                   create role roleName not identified;    create role roleName identified by password;  後者加口令驗證,若是要修改角色則須要提供password。

                 b. 給角色受權: 

                    (注意:系統權限的unlimited tablespace 和對象權限的 with grant option 選項不能授予角色)

                     grant create session to roleName [with admin option];  grant select on dog.emp to roleName; 

                     前者受權系統權限,後者受權其餘用戶的對象權限。通常受權對象權限,最好是對應用戶去受權。

                 c. 刪除角色:drop role roleName;  須要注意的是:一旦role被刪除,那麼會影響到擁有該角色的用戶。

                 d. 顯示角色信息:

                     顯示全部角色: select * from dba_roles;      

                     顯示角色具備的系統權限: select privilege, admin_option from role_sys_privs where role = 'roleName';                        顯示角色具備的對象權限:  role_tab_privs

       (2)User

    1. create user username identified by password

      建立一個新的用戶,通常是具備DBA(數據庫管理員)權限的user才能建立

      這裏引出方案的概念。方案的定義是:數據庫對象的集合,用來管理該用戶的數據對象。在建立一個新的用戶以後,oracle數據庫會自動爲該用戶建立方案,並以用戶名 命名方案。

    2. passw[ord] [userName]  或者  alter user username identified by newPassword

      該命令用於修改用戶的密碼。若是想要修改其餘用戶的密碼,則使用後者,而且操做的用戶須要具備sys/system等DBA的權限或alter user的系統權限。

    3. drop user userName [cascade]

      刪除用戶,通常以DBA的身份去刪除某個用戶;若是其餘用戶去刪除用戶須要具備drop user的權限。並且當前用戶本身不能夠刪除本身若是用戶已經建立了表等,刪除時須要帶cascade參數進行級聯刪除。

    4. 顯示用戶具備的角色: select granted_role, default_role from dba_role_privs where grantee = 'userName';

    5. 用戶管理案例:建立的新用戶是沒有任何權限的,甚至連connnect數據庫的權限都沒有,須要爲其指定相應的權限。賦權限 grant,收回權限 revoke

      create user dog identified by dog;

      --connect 角色可以使用戶鏈接到數據庫,resuorce可使用戶建表等

      grant connect, resource to userName;

      建立emp等表,同時再建立一個user   muscleDog/muscleDog

    6. DROP TABLE DEPT;
      CREATE TABLE DEPT(
      		DEPTNO NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY,
      		DNAME VARCHAR2(14) ,
      		LOC VARCHAR2(13));
      		
      DROP TABLE EMP;
      CREATE TABLE EMP(
              EMPNO NUMBER(4) CONSTRAINT PK_EMP PRIMARY KEY,
      		ENAME VARCHAR2(10),
      		JOB VARCHAR2(9),
      		MGR NUMBER(4),
      		HIREDATE DATE,
      		SAL NUMBER(7,2),
      		COMM NUMBER(7,2),
      		DEPTNO NUMBER(2) CONSTRAINT FK_DEPTNO REFERENCES DEPT);
      		
      INSERT INTO DEPT VALUES (10,'ACCOUNTING','NEW YORK');
      INSERT INTO DEPT VALUES (20,'RESEARCH','DALLAS');
      INSERT INTO DEPT VALUES (30,'SALES','CHICAGO');
      INSERT INTO DEPT VALUES (40,'OPERATIONS','BOSTON');
      
      INSERT INTO EMP VALUES
      (7369,'SMITH','CLERK',7902,to_date('17-12-1980','dd-mm-yyyy'),800,NULL,20);
      INSERT INTO EMP VALUES
      (7499,'ALLEN','SALESMAN',7698,to_date('20-2-1981','dd-mm-yyyy'),1600,300,30);
      INSERT INTO EMP VALUES
      (7521,'WARD','SALESMAN',7698,to_date('22-2-1981','dd-mm-yyyy'),1250,500,30);
      INSERT INTO EMP VALUES
      (7566,'JONES','MANAGER',7839,to_date('2-4-1981','dd-mm-yyyy'),2975,NULL,20);
      INSERT INTO EMP VALUES
      (7654,'MARTIN','SALESMAN',7698,to_date('28-9-1981','dd-mm-yyyy'),1250,1400,30);
      INSERT INTO EMP VALUES
      (7698,'BLAKE','MANAGER',7839,to_date('1-5-1981','dd-mm-yyyy'),2850,NULL,30);
      INSERT INTO EMP VALUES
      (7782,'CLARK','MANAGER',7839,to_date('9-6-1981','dd-mm-yyyy'),2450,NULL,10);
      INSERT INTO EMP VALUES
      (7788,'SCOTT','ANALYST',7566,to_date('13-JUL-87','dd-mm-yyyy'),3000,NULL,20);
      INSERT INTO EMP VALUES
      (7839,'KING','PRESIDENT',NULL,to_date('17-11-1981','dd-mm-yyyy'),5000,NULL,10);
      INSERT INTO EMP VALUES
      (7844,'TURNER','SALESMAN',7698,to_date('8-9-1981','dd-mm-yyyy'),1500,0,30);
      INSERT INTO EMP VALUES
      (7876,'ADAMS','CLERK',7788,to_date('13-JUL-87','dd-mm-yyyy'),1100,NULL,20);
      INSERT INTO EMP VALUES
      (7900,'JAMES','CLERK',7698,to_date('3-12-1981','dd-mm-yyyy'),950,NULL,30);
      INSERT INTO EMP VALUES
      (7902,'FORD','ANALYST',7566,to_date('3-12-1981','dd-mm-yyyy'),3000,NULL,20);
      INSERT INTO EMP VALUES
      (7934,'MILLER','CLERK',7782,to_date('23-1-1982','dd-mm-yyyy'),1300,NULL,10);

      a. 【dog】賦查詢...dog用戶emp表的權限給muscleDog用戶。

          grant select[, insert, update, delete/ all] on tableName to userName;

          conn muscleDog 後,select * from dog.emp;

          因而可知,Oracle容許兩張同名的表,只要不在同一個表空間當中。Oracle數據庫數據對象的組織方式是     以用戶爲單位來組織的。

      b. 【dog】收回muscleDog的權限。 注意:收回權限必須由相應的受權人。

          revoke select[, insert, update, delete/ all] on tableName from userName;

      c.  (權限的維護) 但願在給muscleDog用戶權限的時候,容許muscleDog用戶能夠將權限傳遞給其餘的用戶。

          --【dog】若是是對象權限,則在受權後面加上  with grant option

          grant select[, insert, update, delete/ all] on tableName to userName with grant option;

          --【system】建立thinDog用戶

          -- 【muscleDog】將dog的emp表賦select...權限給thinDog

          grant select on dog.emp to thinDog;

          --【sys/system】若是是系統權限,則在受權後面加上 with admin option

          grant connect[, resource, dba] to userName with admin option;

      d. 收回muscleDog的對dog.emp表的select權限,那麼thinDog的權限還存在嗎?

          thinDog的select權限也被收回了。株連。。。

    7. 使用profile管理用戶口令

      profile是口令限制,資源限制的命令集合,當創建數據庫時,oracle會自動創建名稱爲default的profile。當創建用戶沒有指定profile選項,那oracle就會將default分配給用戶。

      a. 帳戶鎖定:指定用戶登陸最多能夠輸入的密碼次數,也能夠指定用戶鎖定的時間(天),通常以dba的身份去操做。  

          sql> create profile lock_account limit failed_login_attempts 3 password_lock_time 2;

          sql> alter user userName profile lock_account.

      b. 解鎖帳戶

          sql> alter user userName account unlock;

      c. 終止口令:爲了讓用戶按期修改密碼,可使用終止口令來完成,一樣須要dba身份。

          給用戶建立一個profile 文件,要求該用戶每隔10天修改密碼,寬限期爲2天。

          sql> create profile myProfile limit password_life_time 10 password_grace_time 2;

          sql> alter user userName profile myProfile;

      d. 口令歷史:若是但願用戶在修改密碼時,不能使用之前使用過的密碼,可使用口令歷史,這樣Oracle講口令       修改的信息存放在數據字典中,當用戶修改密碼時,Oracle會比較新舊密碼。

          sql> create profile password_history limit password_life_time 10 password_grace_time 2                                   password_reuse_time 10;

          password_reuse_time   //指定口令能夠重用時間,即10天后就能夠重用

          sql> alter user userName profile myProfile;

      e. 刪除profile: sql> drop profile password_history [cascade]

  1. Sql * Plus 經常使用命令:

    1. 鏈接命令

      1. conn[ect]

        用法: conn userName/password@網絡服務名(數據庫名) [as sysdba/sysoper]

        當時用特權用戶(好比 sys)身份鏈接時,必須帶上 as sysdba  或 as sysoper,

        不然會報:ERROR ORA-28009:connection as SYS should be as SYSDBA or SYSOPER。

      2. disc[onnect]

        該命令用來斷開與當前數據庫的鏈接。

      3. show user    顯示當前用戶名

      4. exist    該命令會斷開與數據庫的鏈接,同時推出Sql * plus

    2. 文件操做命令

      1. start 和 @     運行sql腳本

        如: sql> @ D:\test.sql 或者  sql> start D:\test.sql

      2. edit   該命令能夠編輯置頂的sql腳本

        如: sql> edit D:\test.sql

      3. spool   該命令能夠講sql * plus屏幕上的內容輸入到指定文件中。

        如: sql> spool D:\bb.sql;    --創建文件

                sql> select * from emp;    --輸入文件的內容

                sql> spool off;    --操做結束

    3. 顯示和設置環境變量

      能夠用來控制輸出的格式,set show 若是但願永久的保存相關設置,能夠去修改glogin.sql 腳本。

      1.  linesize    設置顯示行的寬度,默認是80個字符

          sql> show linesize;

                sql> set linesize 160;

            2.  pagesize    設置每頁顯示的行數目,默認是14,用法同上。

相關文章
相關標籤/搜索