資料庫原理及應用 五 安全性和完整性約束

2021-10-24 04:41:29 字數 1993 閱讀 6639

資料庫一致性被破壞:

保護資料庫一致性的方法:

grant

connect

to john identified by

123456

;grant

select

ontables

table

-name to

user

-name with

grant

option

--with grant option 表示使用者具有將對這張表的操作許可權轉給其他使用者的能力

個體追蹤器

通用追蹤器

每乙個合法例項都必須滿足的條件

如果不滿足完整性約束,dbms不會允許進入資料庫

動態約束:資料庫在轉換過程中應該遵循的規則

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

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

顯式約束

assert balancecons on account:balance>=0;

//balancecons是斷言的名字

create

table reserves

(sname char(10

),bid integer

,day

date

,primary

key(bid,

day)

,constraint nointerlakeres

check

('interlake'

<>

(select b.bname

from boats b

where 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

實現方法:

觸發器的連鎖觸發:

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

觸發器實現方法:

資料庫 資料的安全性與完整性

1 資料庫安全性 1.1 不安全因素 1.2 資料庫安全性控制 訪問控制 自主控制訪問 主要的訪問許可權如下 物件型別 物件操作型別 資料庫模式 模式create schema 資料庫模式 基本表create table,alter table 資料庫模式 檢視create view 資料庫模式 索...

資料庫安全性

訪問控制 確保只授權給有資格的使用者訪問資料庫的許可權,令未授權的人員無法接近資料庫 訪問控制機制主要包括使用者許可權和合法許可權檢查 定義使用者許可權,並將使用者許可權登記到資料字典中 合法許可權檢查 每當使用者發出訪問資料庫的操作後,資料庫管理系統會查詢資料字典,對合法許可權檢查 定義使用者許可...

資料庫 資料安全性

確保只授權給有資格的使用者訪問資料庫的許可權,同時令所有未被授權的人員無法接受資料,這主要通過資料庫系統的訪問控制機制實現。訪問控制主要包括定義使用者許可權和合法許可權檢查兩部分。1 定義使用者許可權,並將使用者許可權登記到資料字典中 2 合法許可權檢查。c2級的資料庫管理系統支援自主訪問控制,b1...