資料庫---實驗四 oracle的安全性和完整性控制

来源:http://www.cnblogs.com/chen9510/archive/2016/12/08/6145523.html
-Advertisement-
Play Games

實驗內容: 實驗分析: 在本次資料庫實驗中,我完成了實驗要求。本次實驗內容是關於sql語言進行用戶許可權的授予和回收,實體完整性,參照完整性及用戶定義的完整性的定義。在課堂上,老師講授了oracle的安全性和完整性控制相關知識,我也用筆練習寫了sql語句,但是感覺印象還不是很深刻,有些不太理解。在實驗 ...


 

實驗內容:

(一)    授權
1.    以dba用戶的身份登陸oracle,創建用戶u1+學號後四位,u2+學號後四位。
  SQL> create user u1_3985 identified by "123";
  SQL> create user u2_3985 identified by "123";
SQL> create user u3_3985 identified by "123";
SQL> create user u4_3985 identified by "123";
2.    對1.中創建的用戶授予connect,resource的許可權。
       SQL> grant connect,resource to u1_3985,u2_3985;
3.    用戶jsj***把查詢Student表許可權授給用戶u1+學號後四位,u1執行相應的查詢。
SQL> grant select on student to u1_3985;
SQL> con u1_3985/123@orcl;
1)    查詢jsj***用戶的全體學生的詳細記錄。
   SQL> select * from j2014213985.student ;
2)    查詢jsj***用戶的所有姓劉的學生的姓名、學號和性別。
   SQL> select sname,sno,ssex from j2014213985.student where sname like '劉%';
3)    查詢jsj***用戶的名字中第二字為“勇”字的學生的姓名和學號。
   SQL> select sname,sno from j2014213985.student where sname like '_明';
4.    用戶jsj***把對Student表和Course表的全部許可權授予用戶u2+學號後四位,u3+學號後四位;u2+學號後四位用戶修改jsj***的數據。
   SQL> grant all privileges on student to u2_3985,u3_3985;
   SQL> grant all privileges on course to u2_3985,u3_3985;
   SQL> update j2014213985.student set sage=24 where sname='劉明';
5.    把對錶SC的查詢許可權授予所有用戶。
   SQL> grant select on SC to public;
1)    查詢選修了3號課程的學生的學號及其成績,查詢結果按分數的降序排列
  SQL> con u1_3985/123@orcl;
  SQL> select sno,grade from j2014213985.SC where cno=3 order by grade desc;
2)    查詢各個課程號與相應的選課人數。
  SQL> select cno,count(*) from j2014213985.SC group by cno;
6.    用戶jsj***授予用戶u4+學號後四位對student表的insert許可權,並允許此許可權傳播。
     SQL> con j2014213985/j123456@orcl;
      SQL> grant insert on student to u4_3985 with grant option;
7.    用戶u4+學號後四位將對錶student的insert許可權授予u5+學號後四位,並允許將許可權轉授給其他用戶。(首先應該以u5+學號後四位的身份重新登陸資料庫,然後再進行授權)
   SQL> con u4_3985/123@orcl;
SQL> grant insert on j2014213985.student to u5_3985 with grant option;
SQL> con u5_3985/123@orcl;
SQL> grant insert on j2014213985.student to u1_3985 with grant option;
(二)    回收許可權
1.    收回所有用戶對錶sc的查詢許可權
SQL> revoke select on SC from public;
2.    收回用戶u4對student表的insert許可權
 SQL> revoke insert on student from u4_3985;
3.    在回收許可權之後驗證用戶是否真正喪失了該許可權(查詢表,插入記錄)
SQL> select * from j2014213985.SC; 
select * from j2014213985.SC
ORA-00942: 表或視圖不存在
SQL> insert into j2014213985.student values('201421','小屋','',100,'MA');
insert into j2014213985.student values('201421','小屋','',100,'MA')
ORA-00942: 表或視圖不存在
(三)    角色
1.    創建一個角色
SQL> create role ro1;
2.    給角色授予許可權
SQL> grant insert,update,select on student to ro1;
3.    將角色授予某一用戶
SQL> grant ro1 to u1_3985;
4.    檢查用戶是否具有相應的許可權
SQL> con u1_3985/123@orcl;
SQL> select * from j2014213985.student;
SQL> insert into j2014213985.student values('20070002','徐梅','',29,'MA');
SQL> update j2014213985.student set sage=25 where sname='劉明';
檢查此用戶是否具有相應許可權。
SQL> con j2014213985/j123456@orcl;
SQL> insert into student values('20070001','張悅','',22,'MA');
SQL> select * from student;
SQL> update student set sage=18 where sname='劉明';
(四)    完整性
1.    建立部門表DEPT,要求部門名稱Dname列取值唯一,部門編號Deptno列為主碼
     create table DEPT(
          Deptno varchar(10) constraint a1 primary key,
          Dname varchar(10) unique not null,
          Dnum number(4));
(1)SQL> insert into DEPT values('201411','巨集光實業',1000);
(2)SQL> insert into DEPT values('201412','巨集光實業',2000);
insert into DEPT values('201412','巨集光實業',2000)
ORA-00001: 違反唯一約束條件 (J2014213985.SYS_C0039963)
(3)SQL> insert into DEPT values('201411','長青實業',2000);
insert into DEPT values('201411','長青實業',2000)
ORA-00001: 違反唯一約束條件 (J2014213985.A1)
2.    建立學生登記表Student,要求學號在9000至9999之間,年齡<29,性別隻能是’男’或’女’,姓名非空。
 create table Student2(
        sno number(10) check(sno>=9000 and sno<=9999),
        sanme varchar(10) not null,
        sage number(4) constraint a2 check(sage<29),
        ssex varchar(4) check(ssex in('','')));        
     
(1)SQL> insert into student2 values(9000,'李二',27,'');
(2)SQL> insert into student2 values(8888,'張三',23,'');
insert into student2 values(8888,'張三',23,'')
ORA-02290: 違反檢查約束條件 (J2014213985.SYS_C0039970)
(3)SQL> insert into student2 values(9999,'張三',30,'');
insert into student2 values(9999,'張三',30,'')
ORA-02290: 違反檢查約束條件 (J2014213985.A2)
3.    修改表Student的結構,由年齡小於29改為小於40。
SQL> alter table Student2 drop constraint a2;
SQL> alter table Student2 add constraint a2 check(sage<40);

(1)SQL> insert into student2 values(9994,'張三',30,'')
(2)SQL> insert into student2 values(9996,'王五',40,'');
insert into student2 values(9996,'王五',40,'')
ORA-02290: 違反檢查約束條件 (J2014213985.A2)
(3)SQL> insert into student2 values(9992,'',38,'');
insert into student2 values(9992,'',38,'')
ORA-01400: 無法將 NULL 插入 ("J2014213985"."STUDENT2"."SANME")
4.    建立職工表EMP,要求每個職工的應發工資不得超過3000元。應發工資實際上就是實發工資列Sal與扣除項Deduct之和。
         create table EMP(
              sname varchar(10) primary key,
              salary number(10) check(salary<=3000),
              Sal number(10),
              Deduct number(10));
(1)SQL> insert into EMP values('李二',2600,2300,300);
(2)SQL> insert into EMP values('張三',3100,2900,200);
insert into EMP values('張三',3100,2900,200)
ORA-02290: 違反檢查約束條件 (J2014213985.SYS_C0039991)
(3)SQL> insert into EMP values('李四',3001,2900,101);
insert into EMP values('李四',3001,2900,101)
ORA-02290: 違反檢查約束條件 (J2014213985.SYS_C0039991)
                

對上述新建立和修改定義的表,每個表輸入3條數據,其中1條數據符合完整性約束,2條違反約束條件的,驗證和體會Oracle的實體完整性和參照完整性。

 

實驗分析:

在本次資料庫實驗中,我完成了實驗要求。本次實驗內容是關於sql語言進行用戶許可權的授予和回收,實體完整性,參照完整性及用戶定義的完整性的定義。在課堂上,老師講授了oracle的安全性和完整性控制相關知識,我也用筆練習寫了sql語句,但是感覺印象還不是很深刻,有些不太理解。在實驗課中我練習了sql語句,對課堂上所學的知識有了更深的理解,收穫很多。實驗中,我遇到了一些問題,通過查詢資料和老師同學幫助最終解決了。遇到的問題如下:

1、在授予許可權時,grant <許可權> on table <表名> to <用戶> ;這樣寫後一直報錯,後來同學告訴我不能加table ,因為oracle的資料庫與資料庫標準原理有一點區別,修改後,果然對了。

2、在切換用戶時,我不知道怎麼切換,記得老師講過,就是想不起來具體怎麼做,後來問了同學,同學告訴我這樣寫 con user/pass@orcl;  這樣寫果然切換用戶成功了。

在本次試驗中收穫很多,很開心。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 基本上每個跟資料庫打交道的程式員(當然也可能是你同事)都會碰一個問題,MySQL誤操作後如何快速回滾?比如,delete一張表,忘加限制條件,整張表沒了。假如這還是線上環境核心業務數據,那這事就鬧大了。誤操作後,能快速回滾數據是非常重要的。 binlog2sql快速回滾 首先,確認你的MySQL s ...
  • 我的新書ASP.NET MVC企業級實戰預計明年2月份出版,感謝大家關註! 本篇,我將來講解一下在Sqlserver中批量插入數據。 先創建一個用來測試的資料庫和表,為了讓插入數據更快,表中主鍵採用的是GUID,表中沒有創建任何索引。GUID必然是比自增長要快的,因為你生成一個GUID演算法所花的時間 ...
  • 最近在做一個關於雲計算安全系統的項目,需要用到MySQL資料庫,現在把建立資料庫的步驟記錄下來。 一、用命令在Ubuntu上安裝MySQL # sudo apt-get update # sudo apt-get upgrade # sudo apt-get -f install 1. sudo a ...
  • 日常的項目很多時候都需要用到緩存。redis算是一個比較好的選擇。一般情況下做一個主從就可以滿足一些比較小的項目需要。有些時候也需要用到集群。 使用時候可以先瞭解redis cluster的原理http://www.cnblogs.com/foxmailed/p/3630875.html 一、環境 ...
  • 1. mysql 5.7.14 winx64\bin配置到Path中 2. 在解壓路徑下複製my default.ini,修改名稱為my.ini 3. 在my.ini添加如下 [mysqld] basedir=C:\\software\Mysql\mysql 5.7.14 winx64 datadi ...
  • 原文: http://blog.sina.com.cn/s/blog_5c51172c0102v26g.html ...
  • `衣帶漸寬終不悔,為伊消得人憔悴,眾里尋他千百度,驀然迴首,那人卻在燈火闌珊處`好通順的句子哈哈 轉了那麼多彎,才明白問題就在一個地方。睡覺之前想明白了問題,還是經驗太少。王國維的治學三境界: 昨夜西風凋碧樹,獨上高樓,望盡天涯路 衣帶漸寬終不悔,為伊消得人憔悴 眾里尋他千百度,驀然迴首,那人卻在燈 ...
  • 因數分解機(Factorization Machine, 簡稱FM)是一種不錯的CTR預估模型,也是我們現在在使用的廣告點擊率預估模型,比起著名的Logistic Regression, FM能夠把握一些組合的高階特征,因此擁有更強的表現力。 在做點擊率預估時,我們的特征往往來自於用戶(user)、 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...