日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

数据库实验四 用户权限管理

發布時間:2023/12/10 数据库 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据库实验四 用户权限管理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

廣州大學學生實驗報告

?

開課實驗室:計算機科學與工程實驗(電子樓418B) ????2019年5月22日

學院

計算機科學與網絡工程學院

年級、專業、班

計科172

姓名

?

學號

?

實驗課程名稱

數據庫原理實驗

成績

?

實驗項目名稱

用戶權限管理

指導老師

?

實驗目的

  • 對ORACLE數據庫系統的用戶權限管理有感性認識。
  • ?

  • 事務是由用戶定義的一個數據庫的操作序列,這些操作要么全做,要么全不做,是一個不可分割的工作單位。 Oracle數據庫使用事務機制來確保數據的一致性,數據庫的事務機制是發生在第一個SQL語句執行時,結束于COMMIT或ROLLBACK命令執行時。只有一個事務執行完成后,另一個可執行的SQL語句才能執行。SQL執行時,所有的數據改變都是暫時的,只有結束事務的時候,才會真正寫入數據庫。通過本實驗,對事務管理有感性認識。
  • ?

    實驗內容

    理論學習:Oracle 權限設置

    一、權限分類:
    系統權限

    系統規定用戶使用數據庫的權限。(系統權限是對用戶而言)。

    實體權限

    某種權限用戶對其它用戶的表或視圖的存取權限(針對表或視圖而言)。

    ?

    二、系統權限管理:

    ?

    1、系統權限分類:
    DBA:擁有全部特權,是系統最高權限,只有DBA才可以創建數據庫結構。

    RESOURCE:擁有Resource權限的用戶只可以創建實體,不可以創建數據庫結構。

    CONNECT:擁有Connect權限的用戶只可以登錄Oracle,不可以創建實體,不可以創建數據庫結構。

    對于普通用戶:授予connect, resource權限。
    對于DBA管理用戶:授予connect,resource, dba權限。

    ?

    2、系統權限授權命令:

    系統權限只能由DBA用戶授出:sys, system(最開始只能是這兩個用戶)

    授權命令:grant connect, resource, dba to 用戶名1 [,用戶名2]...;

    普通用戶通過授權可以具有與system相同的用戶權限,但永遠不能達到與sys用戶相同的權限,system用戶的權限也可以被回收。

    例:以system用戶身份連接數據庫之后,執行:

    create user cc identified by ccpassword ;

    grant resource, connect, DBA ?to cc;

    查詢用戶擁有哪里權限

    select * from dba_role_privs;

    select * from dba_sys_privs;

    select * from role_sys_privs;

    刪除用戶: drop user 用戶名 cascade;?

    //加上cascade則將用戶連同其創建的東西全部刪除

    ?

    3、系統權限傳遞:

    增加WITH ADMIN OPTION選項,則得到的權限可以傳遞。

    grant connect, resource to CC with admin option;? //可以傳遞所獲權限

    ?

    4、系統權限回收:系統權限只能由DBA用戶回收

    Revoke dba, resource from CC;

    ?

    5、刪除用戶

    drop user 用戶名;? //用戶沒有建任何實體
    drop user 用戶名 CASCADE;? // 將用戶及其所建實體全部刪除

    說明:當前正連接的用戶不得刪除。

    ?

    三、實體權限管理
    1、實體權限分類:

    select, update, insert, alter, index, delete, all?? //all包括所有權限

    execute? //執行存儲過程權限

    user01:

    grant select, update, insert on product to user02;

    grant all on product to user02;

    user02:

    select * from user01.product;

    // 此時user02查user_tables(連接中能顯示的),不包括user01.product這個表,但如果查all_tables則可以查到,因為他可以訪問。

    2. 將表的操作權限授予全體用戶:

    grant all on product to public;?

    // public表示是所有的用戶,這里的all權限不包括drop。

    select owner, table_name from all_tables; // 用戶可以查詢的表

    select table_name from user_tables;? // 用戶創建的表

    select grantor, table_schema, table_name, privilege from all_tab_privs;

    // 獲權可以存取的表(被授權的)

    select grantee, owner, table_name, privilege from user_tab_privs;??

    // 授出權限的表(授出的權限)

    ?

    3. DBA用戶可以操作全體用戶的任意基表(無需授權,包括刪除):

    DBA用戶:
    Create table stud02.product(id number(10),?name varchar2(20));

    drop table stud02.emp;

    create table stud02.employee as?select * from scott.emp;

    ?

    4. 實體權限傳遞(with grant option)
    user01:

    grant select, update on product to user02 with grant option;

    ?// user02得到權限,并可以傳遞。

    ?

    5. 實體權限回收:

    user01:
    Revoke select, update on product from user02;? //傳遞的權限將全部丟失。

    ?

    說明:如果取消某個用戶的對象權限,那么對于這個用戶使用WITH GRANT OPTION授予權限的用戶來說,同樣還會取消這些用戶的相同權限,也就是說取消授權時是級聯的。

    正式操作:

  • SYSTEM身份連接到orcl數據庫,創建新的用戶并授權(如果原來已有這個用戶,可以忽略本步驟):
  • create user cc identified by ccpassword ;

    grant resource, connect, DBA? to cc;

  • 以用戶CC的身份建立連接,并在此連接下執行后面的操作;
  • select * from user_role_privs;

    可以看到自己的權限,有多少種權限?

  • CC連接中:拷貝代碼運行,刪去舊的同名數據表(如果是新創建的用戶,此步驟可以省略):
  • Declare

    tmp integer default 0;

    Begin

    select count(*) into tmp from user_tables where table_name='RB';

    if(tmp>0) then

    execute immediate 'drop table RB';

    end if;

    select count(*) into tmp from user_tables where table_name='READER';

    if(tmp>0) then

    execute immediate 'drop table READER';

    end if;

    select count(*) into tmp from user_tables where table_name='BOOK';

    if(tmp>0) then

    execute immediate 'drop table BOOK';

    end if;

    end;

  • CC連接中:拷貝代碼運行,建立表格及輸入數據:
  • create table Reader

    (

    ??? RNO????? varchar2(4) primary key,

    ??? Rname??? varchar2(10) not null,

    ??? Rsex?????? varchar2(2),

    ??? Rage?????? integer,

    ??? Rboss???? varchar2(10),

    ??? Raddress varchar2(30)

    ) ;

    insert into Reader (RNO,Rname,Rage,Rsex,Rboss, Raddress) values('R001','張三',20,'男','李四','416');

    ?

    create table Book

    (

    ??? BNO????? varchar2(4),

    ??? Bname??? varchar2(50) not null,

    ??? Bauthor? varchar2(50),

    ??? Bpress??? varchar2(50),

    ??? Bprice??? numeric(6,2),

    ??? primary key(BNO)

    );

    insert into book (BNO,Bauthor,Bname, bpress, bprice) values('B001','嚴蔚敏','數據結構','清華大學出版社',null);

    ?

    create table RB

    (

    ??? RNO varchar2(4),

    ??? BNO varchar2(4),

    ??? RBdate date default sysdate,

    ??? primary key(RNO,BNO),

    ??? foreign key (RNO) references Reader(RNO),

    ??? foreign key (BNO) references Book(BNO)

    );

    insert into RB (RNO,BNO) values ('R001','B001');

  • CC連接中:確認orcl數據庫中有這三個數據表,以及相應的數據
  • ?

  • CC連接中:查詢用戶CC的權限信息(每句單獨執行):
  • select * from dba_role_privs;

    select * from dba_sys_privs;

    select * from role_sys_privs;

  • CC連接中:查詢用戶創建的表
  • select table_name from user_tables;

  • CC連接中:刪去數據表BR,成功嗎?
  • drop table rb;

    再次執行:

    select table_name from user_tables;

    顯示什么結果?

  • 回收用戶CC的部分權限:以SYSTEM的身份連接(可以在SQL DEVELOPER的右上角切換),在此連接中執行
  • Revoke dba, resource from CC;

  • CC的身份連接數據庫(可以在SQL DEVELOPER的右上角選擇連接),執行:
  • Create Table Aa(cola int);

    成功嗎?為什么?

  • 切換為SYSTEM的連接,執行
  • grant resource to CC;

  • 切換為CC的連接,執行
  • select * from user_role_privs;

    可以看到自己的權限,有多少種權限?

    Create Table Aa(cola int);

    成功嗎?為什么?

  • 切換為SYSTEM的連接,執行
  • DROP USER CC;

    成功嗎?為什么?

  • 刪除連接CC,在SYSTEM的連接中,執行
  • DROP USER CC;

    成功嗎?為什么?

    怎樣才能成功刪除用戶CC ? 僅僅斷開連接就行了嗎?

    Drop User Cc Cascade;

    為何要加Cascade ?刪去后,還能以用戶CC的身份連接嗎?

    刪去后,不能以用戶CC的身份連接

  • SYSTEM的連接中,重新創建用戶CCDD
  • Create User Cc Identified By Ccpassword;

    Create User dd identified by ddpassword;

    grant resource, connect, DBA? to cc,dd;

    ?

    查看這兩個用戶的權限(只有SYSTEM才有權執行下面這條語句):

    select * from dba_role_privs where GRANTEE in ('CC','DD');

  • CCDD的身份分別建立連接,使得目前系統加上原來的SYSTEM共有三個連接(為識別方便,連接名和用戶名一致)
  • 選擇CC連接,執行:

    Create Table from_CC(內容 char(1));

    Insert into from_cc values('a');

    select * from from_cc;

    選擇DD連接,執行:

    select owner, table_name from all_tables where table_name='FROM_CC';

    顯示什么?什么意思?

    查詢已建立的表及表的擁有者

    select * from from_cc;

    顯示什么?什么意思?

    表或視圖不存在

    選擇CC連接,執行:

    grant all on from_cc to dd;

    選擇DD連接,執行:

    select owner, table_name from all_tables where table_name='FROM_CC';

    顯示什么?什么意思?

    查詢已建立的表及表的擁有者

    ?

    select * from from_cc;

    顯示什么?

    select * from cc.from_cc;

    顯示什么?怎么回事?

    表from_cc 的創建者是cc,其屬于cc

    刷新DD連接下的表,有沒有“FROM_CC”這個表?

    沒有

    選擇DD連接,執行:

    Insert into cc.from_cc values('d');

    select * from cc.from_cc;

    插入成功了嗎?

    成功

  • 選擇CC連接,執行:
  • Revoke insert on FROM_CC from DD;

    選擇DD連接,執行:

    select * from cc.from_cc;

    能顯示表的內容嗎?

    可以

    Insert into cc.from_cc values('y');?

    select * from cc.from_cc;

    插入成功了嗎?? // 貌似插入成功?

    貌似成功

    選擇SYSTEM連接,執行:

    Revoke dba, resource from DD;

    選擇DD連接,執行:

    select * from cc.from_cc;

    能顯示表的內容嗎? //

    Insert into cc.from_cc values('z');?

    select * from cc.from_cc;

    插入成功了嗎?? // 貌似插入成功?

    選擇CC連接,執行:

    Revoke all on FROM_CC from DD;

    select * from cc.from_cc;? // 沒有顯示前面成功插入的記錄'y'、'z'

    選擇DD連接,執行:

    select * from cc.from_cc;? // 顯示前面成功插入的記錄'y'、'z'

  • 刪除連接DD后,重新添加連接DD
  • select * from cc.from_cc;

    顯示這個數據對象不存在。

    select * from user_role_privs;

    當前用戶有多少種權限?

    一種

    Create Table from_DD(哦 char(2));

    能執行嗎?

    不能

    選擇SYSTEM連接,執行:

    grant resource to dd;

    選擇DD連接,執行:

    Create Table from_DD(哦 char(2));

    能執行嗎?

    不能

    刪除連接DD后,重新添加連接DD

    Create Table from_DD(哦 char(2));

    Insert into from_dd values('甲');?

    ?

    select * from from_dd;

    能看到記錄“甲”嗎?能

    選擇CC連接,執行:

    select * from dd.from_dd;

    能看到記錄“甲”嗎?不能

    ?

    用戶CC怎樣才能看到from_dd表的所有記錄?用戶CC怎樣才能為from_dd表添加記錄?

    選擇dd連接,執行:

    grant all on from_dd to cc;就能看到了

    用戶CC怎樣才能為from_dd表添加記錄?

    Insert into dd.from_dd values('d');

    并且commit提交后用戶CC才能為from_dd表添加記錄

  • 創建新的用戶并授權:
  • create user cc1 identified by cc1password ;

    grant resource, connect, DBA? to cc1;

  • 以用戶CC1的身份建立連接,并在此連接下執行后面的操作;
  • create table mytable(tno char(2) primary key, tname char(8));

  • 拷貝代碼運行,建立表格及輸入數據:
  • Insert Into Mytable Values('01','趙老大');

    select * from mytable;

    Insert Into Mytable Values('02','趙老二');

    select * from mytable;

    Insert Into Mytable Values('03','趙老三');

    select * from mytable;

    ?

    表中共有多少行數據?

    3行

    ?

    Insert Into Mytable Values('04','錢老大');

    select * from mytable;

    Insert Into Mytable Values('05','錢老二');

    select * from mytable;

    Rollback;

    select * from mytable;

    ?

    回退到哪里?表中剩下多少行數據?

    0行數據

    ?

    ?

    Insert Into Mytable Values('01','趙老大');

    select * from mytable;

    Insert Into Mytable Values('02','趙老二');

    select * from mytable;

    Insert Into Mytable Values('03','趙老三');

    select * from mytable;

    commit;

    Insert Into Mytable Values('04','錢老大');

    select * from mytable;

    Insert Into Mytable Values('05','錢老二');

    select * from mytable;

    Rollback;

    select * from mytable;

    ?

    回退到哪里?表中剩下多少行數據?commit的作用是什么?

    3行數據,commit的作用是及時提交數據

    ?

    ?

    Insert Into Mytable Values('04','錢老大');

    Savepoint p1;

    select * from mytable;

    Insert Into Mytable Values('05','錢老二');

    Savepoint p2;

    select * from mytable;

    Insert Into Mytable Values('06','錢老三');

    select * from mytable;

    Rollback to p2;

    select * from mytable;

    Rollback to p1;

    select * from mytable;

    ?

    運行結果顯示,Savepoint的作用是什么?

    保存點(savepoint)是事務過程中的一個邏輯點,用于取消部分事務,當結束事務時,會自動的刪除該事務中所定義的所有保存點。當執行rollback時,通過指定保存點可以回退到指定的點。

    ?

    ?

    ?

    ?

    ?????????

    ?

    總結

    以上是生活随笔為你收集整理的数据库实验四 用户权限管理的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。