數據庫原理及應用【五】安全性和完整性約束

數據庫一致性被破壞:

  • 系統故障
  • 許多用戶的并發訪問
  • 人為破壞
  • 事務本身不正確

保護數據庫一致性的方法:

  • 視圖/查詢修改
  • 訪問控制
    • 普通用戶
    • 擁有資源特權的用戶
    • DBA

數據庫的安全問題

  • 身份驗證
    • 口令
    • 物理設備
GRANT CONNECT TO John IDENTIFIED BY 123456;
GRANT SELECT on TABLES table-name TO user-name WITH GRANT OPTION
--with grant option 表示用戶具有將對這張表的操作權限轉給其他用戶的能力
  • 角色
  • 數據加密
  • 審計追蹤

統計數據庫

個體追蹤器
通用追蹤器

完整性約束

每一個合法實例都必須滿足的條件
如果不滿足完整性約束,DBMS不會允許進入數據庫

  • 靜態約束
    • 數據模型固有的約束
    • 隱含約束:域完整性約束、主鍵約束(實體完整性約束)、外鍵約束(引用完整性約束)
    • 顯式約束
  • 動態約束:數據庫在轉換過程中應該遵循的規則

靜態約束

當有引用完整性約束的時候,如果要刪除所引用的表中的元組,需要檢查該元組的主鍵是否在引用表的外鍵中出現,如果出現,有兩個選擇:

  • 報錯(默認)
  • 級聯刪除(需要進行設置)

引用完整性約束更新主鍵:

  • 報錯(默認)
  • 級聯更新

顯式約束

  • 程序進行限制
  • 使用DBMS斷言ASSERTION
ASSERT balanceCons ON account:balance>=0;	//balanceCons是斷言的名字
  • 使用CHECK:在建表的時候
CREATE TABLE Reserves
(sname CHAR(10),
bid INTEGER,
day DATE,
PRIMARY KEY (bid,day),
CONSTRAINT noInterlakeRes
CHECK('Interlake' <> (SELECT B.bnameFROM Boats BWHERE B.bid=bid)))
--規定名字為Interlake的船不能外借

如果牽涉到兩個以上的表的約束就不能在CREATE語句中使用CHECK,因為這樣只有對其中一個表進行增刪改的時候才會觸發CHECK約束,如果不進行增刪改就沒法保持約束。應該使用斷言進行約束。

CREATE ASSERTION smallClub
CHECK
((SELECT COUNT(*) FROM Sailors) + 
(SELECT COUNT(*) FROM Boats)<100)

可以保證在兩個表任何一個進行增刪改操作的時候都要滿足約束

動態約束+觸發器

主動數據庫:數據庫中的數據達到某種狀態的時候主動進行一些動作
觸發器:E(事件)C(檢查數據庫)A(動作)規則

--監視水手這張表,更新年輕水手表
CREATE TRIGGER youngSailorUpdate
AFTER INSERT ON Sailors	-- ON 后面跟需要監視的表
--AFTER/BEFORE控制動作發生之前還是之后
--INSERT/DELETE/UPDATE 控制發生什么動作
REFERENCING NEW TABLE NewSailors
--NEW表示插入操作的新值,OLD表示老值
--TABLE表示把前面引用的值看作一張表
FOR EACH STATEMENT
--還可以是FOR EACH ROW 當操作涉及多個元組的時候可以分別進行不同的操作
--可以使用WHEN子句進行檢查
INSERT INTO YoungSailors VALUES SELECT * FROM NewSailors N WHERE N.age<=18

實現方法:

  • 立即執行(常見)
  • 延遲
  • 分離

觸發器的連鎖觸發:

  • 根據觸發圖,限制觸發器執行
  • 連續觸發的次數進行限制

觸發器的定義需要小心,不能定義太多的觸發器

觸發器實現方法:

  • 松耦合
  • 緊耦合
  • 嵌套

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/383607.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/383607.shtml
英文地址,請注明出處:http://en.pswp.cn/news/383607.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

遞歸式復雜度求解

代換法 猜測復雜度驗證是否滿足遞歸式&#xff08;使用歸納法&#xff09;找到常數應該滿足的條件針對基本情況&#xff0c;常數足夠大時總是成立的 需要注意的是&#xff0c;我們猜測的復雜度有可能不滿足遞歸式&#xff0c;這個時候就要通過減去一些低階項來使得歸納成立。…

斐波那契數列計算

定義 斐波那契數列&#xff1a; F[n]{0,n01,n1F[n?1]F[n?2],elseF[n] \begin{cases} 0,n0 \\ 1,n1\\ F[n-1]F[n-2],else \end{cases} F[n]??????0,n01,n1F[n?1]F[n?2],else? 樸素計算法 根據遞歸式F[n]F[n?1]F[n?2]F[n]F[n-1]F[n-2]F[n]F[n?1]F[n?2]進行計算…

P、NP、NP完全問題、NP難問題

可以在多項式時間內求解的問題稱為易解的&#xff0c;而不能在多項式時間內求解的問題稱為難解的。 P類問題&#xff1a;多項式類型&#xff0c;是一類能夠用&#xff08;確定性的&#xff09;算法在多項式的時間內求解的判定問題。 只有判定問題才屬于P 不可判定問題&#…

數據可視化【十】繪制地圖

Loading and parsing TOPOJSON 導入Topojson d3文件 地址&#xff1a;https://unpkg.com/topojson3.0.2/dist/topojson.min.js 想要找d3文件的話去unpkg.com好像大部分都能找到的樣子 Rendering geographic features 尋找合適的地圖數據&#xff1a;谷歌搜索world-atlas npm…

數據可視化【十一】樹狀圖

Constructing a node-link tree visualization 首先將節點之間的連線畫出來。 使用json函數讀取文件以后&#xff0c;使用hierarchy等函數得到連線的數組&#xff0c;然后綁定這個數組&#xff0c;給每個元素添加一個path&#xff0c;繪畫使用的是一個函數linkHorizontal&…

數據可視化【十二】 顏色圖例和尺寸圖例

有了前面的知識&#xff0c;制作一個圖例應該不是很難&#xff0c;關鍵是我們想要制作一個可以在其他地方進行使用的圖例&#xff0c;這樣就需要能夠動態地設置圖例的大小&#xff0c;位置&#xff0c;等等。 這里直接上代碼&#xff1a; colorLegend.js export const color…

數據可視化【十三】地區分布圖

在前面的博客中已經介紹了如何繪制地圖&#xff0c;這一節學習如何繪制地區分布圖。如果對繪制地圖還不熟悉的話可以了解一下之前我寫的博客&#xff1a;數據可視化【十】繪制地圖 Intergrating(整合) TopoJSON with tabular data(列表數據) 在前面的博客中沒有使用到tsv文件…

3.01【python正則表達式以及re模塊】

python正則表達式以及re模塊 元字符 正則表達式的語法就由表格中的元字符組成&#xff0c;一般用于搜索、替換、提取文本數據 元字符含義.匹配除換行符以外的任何單個字符*匹配前面的模式0次或1次匹配前面的模式1次或多次?匹配前面的模式0次或1次[]用于定義字符集&#xff…

Linux配置編程環境+云服務器上傳文件

Java環境配置 Ubuntu https://www.cnblogs.com/lfri/p/10437266.html Centos https://blog.csdn.net/qq_21077715/article/details/85536399 Tomcat配置 Centos https://blog.csdn.net/qq_21077715/article/details/85541685 https://www.cnblogs.com/newwind/p/9904561…

gbd + cgbd

gbd&#xff1a;傳送門 cgbd&#xff1a;傳送門 | 傳送門

數據可視化【十四】交互式過濾地區分布圖

在前面的博客中已經介紹了如何繪制地區分布圖&#xff0c;這一節學習如何繪制交互式過濾地區分布圖。如果對繪制地區分布圖還不熟悉的話可以了解一下之前我寫的博客&#xff1a;數據可視化【十三】地區分布圖 整體的框架仍然是在之前的基礎上進行修改&#xff0c;主要是添加交…

Ubuntu環境搭建

本文記錄了一些常用的Ubuntu軟件 然后首先修改軟件源&#xff1a;軟件和更新->Ubuntu軟件->下載自&#xff1a;其他站點&#xff08;修改為阿里云&#xff09; 在關閉的時候需要更新什么的 然后修改更新方式&#xff0c;將不支持的更新去掉 常用的Windows軟件 網易云…

1 兩數之和

雖然只是一道很簡單的題&#xff0c;但是也給我很多思考。 剛看到這道題的時候沒有仔細思考&#xff0c;直接寫了個排序和二分查找&#xff0c;想著對每個數字查找另一個數字會不會出現&#xff0c;復雜度是O(nlognnlogn)O(nlognnlogn)O(nlognnlogn)&#xff0c;主要訓練了一下…

834 樹中距離之和

這道題我自己的想法只有對每個點都用一遍Dijkstra然后再求和&#xff0c;顯然會超時&#xff0c;所以我都沒有嘗試。 研究了一下題解&#xff0c;發現題解很巧妙&#xff0c;自己對樹的處理還是太稚嫩&#xff0c;之前樹鏈剖分學的都忘光了。 對于固定根節點的&#xff0c;我…

75 顏色分類

題目已經提示可以一遍掃描了但是我還是沒有想到&#xff0c;其實雙指針的想法我已經有了&#xff0c;但是一想到有問題就覺得無法實現。這也揭示了我思維上的問題&#xff1a;用一種方法解決問題遇到困難第一件事情不是想著如何攻克而是想著換一種方法。對自己的思維也不自信。…

141 環形鏈表

要求使用空間復雜度為O(1)的方法&#xff0c;可是我并沒有想到。我想到的只有用一個哈希表記錄一下所有訪問過的節點。 題解給出的空間復雜度為O(1)的方法是使用兩個指針&#xff0c;然后讓一個一次跑一步&#xff0c;一個一次跑兩步&#xff0c;如果跑的快的能追上跑的慢的就…

數據可視化【十五】

經驗法則&#xff1a;在顏色不相鄰的時候加上背景顏色顏色的個數為6~12比較好。 顏色其實很大程度上由背景決定而不是他本身決定。 D3 Scale-Chromatic 有許多顏色刻度&#xff0c;可以根據自己的需要進行選擇。 參考論文&#xff1a;Practical Rules for Using Color in Cha…

Ubuntu修改/刪除主目錄下的中文文件夾

在Ubuntu的主目錄下一般是有一些中文的目錄&#xff0c;例如桌面&#xff0c;視頻等等&#xff0c;還無法修改名稱&#xff0c;在一群英文文件夾里面顯得有些突兀&#xff08;Ubuntu終端下的中文一點也不好看&#xff09;&#xff0c;就想把這些文件夾修改一下&#xff0c;結果…

19 刪除鏈表的倒數第N個

題目的意思很簡單&#xff0c;就是刪除一個鏈表倒數第N個節點。 需要用到鏈表的標準操作&#xff1a;快慢指針。 我們讓一個快指針先指向第N個元素&#xff0c;這個時候快指針總比慢指針領先N個元素&#xff0c;等到快指針指向鏈表尾部的時候慢指針就指向需要刪除的元素。 之前…

844. Backspace String Compare

題目的意思大概是有兩個字符串&#xff0c;其中的#表示退格鍵&#xff0c;讓比較最后兩個字符串是否相當。 很容易想到的思路就是用一個棧進行模擬這個過程&#xff0c;特別需要注意如果一個串是空串也是可以退格的。 但是很容易想到的另一個特性就是&#xff0c;前面的字符有…