資料庫一致性被破壞:
保護資料庫一致性的方法:
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...