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

2022-09-20 08:06:08 字數 4748 閱讀 6963

1 資料庫安全性

1.1 不安全因素

1.2 資料庫安全性控制

訪問控制

自主控制訪問

主要的訪問許可權如下

物件型別

物件操作型別

資料庫模式

模式create schema

資料庫模式

基本表create table,alter table

資料庫模式

檢視create view

資料庫模式

索引create index

資料基本表和檢視

select,insert,update,delete

references,all privileges

資料屬性列

select,insert,update

references,all privileges

1.3 許可權授予和撤銷

1 許可權授予

-- 若帶有 eith grant option, 則該使用者可以繼續轉讓許可權給別的使用者

grant 《許可權》 on [表名(列名)] to 使用者名稱 with grant option;

授予使用者 user1 擁有對錶 student 的查詢許可權

grant select on student to user1 with grant option;
2 許可權**
revoke 《許可權》 on 《資料物件》 from 《使用者名稱》 [cascade];
撤銷使用者 user1 及其下所有授權使用者對於表 student 表的查詢許可權

revoke select on student from user1 cascade;
1.4 資料庫角色

1 角色的建立

建立乙個 ceo 角色

create role 《角色名》;

create role ceo;

2 角色授權
給 ceo 授予對 student 的查詢許可權

grant 《許可權》 on 《物件型別》 物件名 to 《角色1>, 《角色2>,..;

grant select on student to ceo;

3 授權角色給其他使用者
將 ceo 角色授權給 lihua

grant 《角色名》 to 使用者名稱 [with admin option];

grant ceo to lihua;

4 角色許可權收回
** ceo 的許可權

revoke 《許可權》 on 《物件名》 from 角色名;

revoke select on student from ceo;

1.5 檢視機制
create view cs_student

asselect * from student where sdept = "cs";

grant select on cs_student to 石昊;

grant all privileges on cs_student to 石昊;

1.6 審計
對修改 sc 表的操作進行審計

audit update on sc;
取消對 sc 表的一切審計

noaudit update on sc;
1.7 資料加密

2 資料庫完整性

2.1 三大完整性

1 實體完整性

create table course (

id int not null,

time varchar(255),

primary key (id)

);create table curse (

id int not null primary key,

time varchar(255)

);

2 參照完整性
create table course (

id int,

time varchar(255),

title varchar(255),

techer_id int,

primary key (id),

foregin key (id) references teacher(course_id)

);

3 使用者定義完整性
create table student (

no char(9) primary key,

age int not null

);

create table student (

no char(9) primary key,

age int nuique

);

create table student (

no char(9) primary key,

*** char(2) check (*** in ('男', '女')),

age int not null

);

2.2 斷言

1 建立斷言

限制每一門課最多有 60 名學生選修

carete assertion 《斷言名》 = all (select count(*) from sc group by cno)

);

2 刪除斷言
drop assertion 斷言名;

drop assertion ass_sc_num;

2.3 觸發器
-- 每當觸發事件發生時,該觸發器被啟用

create trigger 《觸發器名》;

-- 指明觸發器啟用的事件是在執行觸發事件之前或者之後

《觸發事件》 on 《表名》;

-- referencing 指出引用的變數

referencing new|old row as 《變數》;

-- 定義觸發器的型別,指明動作體執行的頻率

for each ;

-- 僅當觸發條件為真時,才執行觸發動作體

[when 《觸發條件》] 《觸發體動作》;

行級觸發器:當對表 sc 的 grade 屬性進行修改時,若分數增加了 10%, 則將此次操作記錄到另乙個表sc_u(sno, cno, oldgrade, newgrade)中,其中oldgrade是指修改前的分數,newgrade是指修改後的分數

-- sc_t 是觸發器的名字

create trigger sc_t

-- update of grade on sc 是觸發事件

-- after 是觸發時機,表示對 sc 的 grade 屬性修改完之後再觸發下面的規則

after update of grade on sc

-- oldrow、newrow 分別是老表和新錶的名字

referencing

oldrow as oldtuple,

newrow as newtuple

-- 行觸發器,即每執行依次 grade 的更新,就執行一次下方規則

for each row

-- 觸發條件,只有條件為真時才會執行下方的規則

when (newtuple.grade >= 1.1 * oldtuple.grade)

-- 具體的觸發器所觸發的規則

insert into sc_u(sno, cno, oldgrade, newgrade)

values (oldtuple.sno, oldtuple.cno, oldtuple.grade, newtuple.grade);

語句級觸發器:將每次對錶 student 的插入操作所增加的學生個數記錄到表 insertlog 中

create trigger student_count

after insert on student

referencing

new table as delta

-- 語句級觸發器,即執行完 insert 語句後,下面的觸發器動作體才會執行一次

for each statment

insert into insertlog(numbers)

select count(*) from delta;

資料庫完整性

完整性約束條件 實體完整性給出了主鍵的取值的最低約束條件 規則是 主鍵的各個屬性都不能為空。參照完整性給出了在關係之間建立正確的聯絡的約束條件 規則是 外來鍵或者取空值 此時要求外來鍵的各個屬性均為空值 或者等於被參照關係中的主鍵的某個值。使用者自定義完整性 關係數控應用系統中的關係往往還應該滿足一...

資料庫完整性

資料的完整性和安全性 資料庫的完整性和安全性是兩個既有聯絡又不盡相同的概念。資料的完整性是為了防止資料庫中存在不符合語義的資料,也就是防止資料庫中存在不正確的資料。資料的安全性是保護資料庫防止惡意破壞和非法訪問。完整性檢查和控制的防範物件是不合語義的 不正確的資料,防止它們進入資料庫。安全性控制的方...

資料庫 完整性

一 實驗目的 1 掌握資料庫約束的概念 2 熟悉sql server 的完整性約束技術。3 了解sql server 的違反完整性處理措施。二 實驗環境 sql server2014 三 實驗內容 1.在前幾次實驗所使用的資料庫中新建乙個教師資訊表,表名為teacher,字段包括tno 教師編號 t...