数据库实验四 用户权限管理
廣州大學學生實驗報告
?
開課實驗室:計算機科學與工程實驗(電子樓418B) ????2019年5月22日
| 學院 | 計算機科學與網絡工程學院 | 年級、專業、班 | 計科172 | 姓名 | ? | 學號 | ? | |
| 實驗課程名稱 | 數據庫原理實驗 | 成績 | ? | |||||
| 實驗項目名稱 | 用戶權限管理 | 指導老師 | ? | |||||
| 實驗目的 ? ? 實驗內容 理論學習:Oracle 權限設置 一、權限分類: 系統規定用戶使用數據庫的權限。(系統權限是對用戶而言)。 實體權限: 某種權限用戶對其它用戶的表或視圖的存取權限(針對表或視圖而言)。 ? 二、系統權限管理: ? 1、系統權限分類: RESOURCE:擁有Resource權限的用戶只可以創建實體,不可以創建數據庫結構。 CONNECT:擁有Connect權限的用戶只可以登錄Oracle,不可以創建實體,不可以創建數據庫結構。 對于普通用戶:授予connect, resource權限。 ? 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 用戶名;? //用戶沒有建任何實體 說明:當前正連接的用戶不得刪除。 ? 三、實體權限管理 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用戶: drop table stud02.emp; create table stud02.employee as?select * from scott.emp; ? 4. 實體權限傳遞(with grant option): grant select, update on product to user02 with grant option; ?// user02得到權限,并可以傳遞。 ? 5. 實體權限回收: user01: ? 說明:如果取消某個用戶的對象權限,那么對于這個用戶使用WITH GRANT OPTION授予權限的用戶來說,同樣還會取消這些用戶的相同權限,也就是說取消授權時是級聯的。 正式操作: create user cc identified by ccpassword ; grant resource, connect, DBA? to cc; select * from user_role_privs; 可以看到自己的權限,有多少種權限? 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; 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'); ? select * from dba_role_privs; select * from dba_sys_privs; select * from role_sys_privs; select table_name from user_tables; drop table rb; 再次執行: select table_name from user_tables; 顯示什么結果? Revoke dba, resource from CC; Create Table Aa(cola int); 成功嗎?為什么? grant resource to CC; select * from user_role_privs; 可以看到自己的權限,有多少種權限? Create Table Aa(cola int); 成功嗎?為什么? DROP USER CC; 成功嗎?為什么? DROP USER CC; 成功嗎?為什么? 怎樣才能成功刪除用戶CC ? 僅僅斷開連接就行了嗎? Drop User Cc Cascade; 為何要加Cascade ?刪去后,還能以用戶CC的身份連接嗎? 刪去后,不能以用戶CC的身份連接 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'); 選擇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; 插入成功了嗎? 成功 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' 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; 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時,通過指定保存點可以回退到指定的點。 ? ? ? | ||||||||
| ? | ||||||||
| ? | ? | ? | ? | ? | ? | ? | ? | ? |
?
總結
以上是生活随笔為你收集整理的数据库实验四 用户权限管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 模糊匹配
- 下一篇: linux cmake编译源码,linu