數據庫安全及事務操作

數據庫安全及事務操作

一、目的與要求

  • 掌握SQL安全機制
  • 掌握服務器的安全性的管理
  • 掌握數據庫用戶的管理
  • 掌握權限的管理

二、實驗內容

1 設計安全機制使得用戶王明 只能查找財務部的職工

思路:創建登錄SQL賬戶王明,數據庫用戶王明DB,創建只包含財務部員工的視圖,授予王 查詢該視圖的權力

--創建SQL server  登錄賬戶 王明
use  實驗三
exec   sp_addlogin '王明' ,'123456'
--創建數據庫用戶 王明DB
exec  sp_grantdbaccess '王明','王明DB'
go
--創建只含有財務部員工信息的視圖
CREATE   VIEW  view_FinanceEmp  as
SELECT  *
from   Employees
where Employees.dep_no = 
(select dep_no   from  Department  where dep_name='財務部')
go
--授予王明DB查看該視圖的權限
GRANT   SELECT  ON  view_FinanceEmp to  王明DB

在這裏插入圖片描述
在這裏插入圖片描述

2 設計一個角色“role_Emp”,該角色可以查看僱員編號,姓名。並將王明作爲成員加入到該角色

思路:

1 創建角色:sp_addrole ‘role_Emp’,創建視圖

2 給該角色授權

3 將王明DB加入到該角色

--創建角色
exec  sp_addrole 'role_Emp'
--創建只包含僱員編號,姓名的視圖
go
CREATE  VIEW  view_empId_Name  as
select     emp_no,emp_name
from    Employees
go;
select  *   from  view_empId_Name
go
--授予該角色查詢的權力
GRANT   select   
on   view_empId_Name
to   role_Emp
--將王明加入到該角色中
exec  sp_addrolemember 'role_Emp','王明DB'

在這裏插入圖片描述

3 用戶張明擁有以下權限;他只能查進貨表中的信息,並擁有對自己進貨表的信息修改的權限,其他表的信息無權查看。

授予他 Purchase 表的查看權限

授予他 purchase表中的一部分(視圖)修改的權限

exec sp_addlogin '張明','123456'--創建sql登錄賬戶
exec sp_grantdbaccess '張明','張明DB'--創建數據庫用戶張明DB
go
create view view_zhangming
as
select * from Purchase
where Emp_no in(select Emp_no from Employees
               where Emp_name='張明')
go
Grant select on Purchase to 張明DB --授予查詢進貨表的權限
Grant select,update on view_zahngming to 張明DB --授予修改自己進貨的信息的權限

4 如何使得采購部門的員工都具有這樣的權限:能查看進貨表的信息,並擁有對自己採購信息的修改

(編寫存儲過程Pro_purchase 作用:輸入參數爲員工姓名,從進貨表中查找該員工所進的產品,沒有則返回,有則相應的在login表中添加賬戶和密碼。並且,創建相應的登錄賬號和數據庫用戶)

5 銀行轉賬問題

CREATE TABLE bank   --創建賬戶表,存放用戶的賬戶信息
(customerName CHAR(10),  --顧客姓名
 currentMoney MONEY     --當前餘額
)
go
--添加約束:根據銀行規定,賬戶餘額不能少於1元,否則視爲銷戶
ALTER TABLE bank  ADD CONSTRAINT CK_currentMoney   CHECK(currentMoney>=1)
go
--張紅開戶,開戶金額爲1000元;李明開戶,開戶金額1元
INSERT INTO bank(customerName,currentMoney)   VALUES('張紅',1000)
INSERT INTO bank(customerName,currentMoney)   VALUES('李明',1)

寫出用事務解決銀行轉賬的存儲過程:

測試數據:exec pro_bank ‘李明’,‘張紅’ ,500 exec pro_bank ‘張紅’ , ‘李明’,500

6 數據庫字段的加密和解密

(1)創建讀者表的空表名爲 reader_bak,增加一字段 :身份證號

(2)創建數據庫主密鑰

(3)建立證書一,該證書使用數據庫主密鑰來加密

(4)向reader_bak 插入一條數據,借書證號:210 身份證:123456789123456789,並對身份證加密

(5)將加密的身份證解密顯示處理

(6)總結對數據庫字段加密和解密的理解

7 給出一個用戶表,創建表的代碼如下

create    table   users(
Unumber INT IDENTITY(1,1),
Uname   varchar(20),
sex  char(2),
Upassword   char(10),
CONSTRANIT PK_Unum PRIMARY KEY(Unumber),
CONSTRAINT CK_sex  CHECK(sex='男'  OR sex='女')CONSTRAINT CK_Upassword CHECK (LEN(Upassword)>=6)
)

要求創建一個存儲過程,實現插入用戶表數據時,插入的密碼自動轉換成明文(用SQL的內置函數實現MD5加密),在存儲過程中捕捉Check約束或觸發器約束中拋出異常。這樣可以比較方便的實現數據校驗,並且減少存儲過程中的多對多數據的判斷)

三、遇到的問題及解決方法

第三問中:

在這裏插入圖片描述
在這裏插入圖片描述

最後一個@dbname無法識別

猜測是因爲變量@dbname 字符串有引號

局部變量的作用域是其被聲明時所在批處理

四、實驗總結

1 SQL的三層安全機制

SQL運行安全防線 只有用戶登錄成功,才能與SQL server 建立一次連接
SQL數據庫的安全防線 每個數據庫都有自己的用戶和角色,該數據庫只能由它的用戶和角色訪問,從而避免非法用戶對數據庫的訪問
SQL數據庫對象的安全防線 權限管理,合法用戶必須在自己的權力範圍內進行數據操作。

2 事務管理

事務控制語句
--#定義事務的開始
BEGIN  TRANSACTION  T1
--#提交事務,結束一個事務
COMMIT TRAN  
--# 回滾事務到事務的開頭或一個保存點
ROLLBACK  TRAN 
--# 在事務中設置一個保存點,是一個事務內的部分操作回滾
SAVE TRAN  save_name  
--# @@ERROR     記錄數據庫最新錯誤的消息
--#@@TRANSCTION    初始值爲0   每次BEGIN TRAN 則加1,commit 時減1,rollback則直接回到0  
封鎖機制 sp_lock
事務日誌

3 三層安全機制 存儲過程總結

添加SQL server服務器登錄帳戶 exec sp_addlogin ‘wmy’ ,‘123456’ sp_droplogin
添加某數據庫的訪問用戶 exec sp_grantdbaccess ‘wmy’,‘wmyDB’
刪除某數據庫的用戶 exec sp_revokedbaccess ‘wmyDB’
SQL server服務器擁有所有操作權sysadmin exec sp_addsrvrolemember ‘wmy’ ,‘sysadmin’
取消某用戶的對SQL server服務器擁有的所有操作權 exec sp_dropsrvrolemember ‘wmy’,‘sysadmin’
某數據庫有任意操作權限db_owner exec sp_addrolemenber ‘db_owner’,‘wmyDB’
授予某數據庫用戶某種權力 GRANT SELECT ON TABLE1 TO wmyDB DENY INSER ,UPDATE ,DELETE ON TABLE1 TO wmyDB
數據庫創建角色 exec sp_addrole ‘moniter_role’(角色名稱)
爲某用戶賦予某角色 exec sp_addrolemember ‘monitor_role’,‘wmy’
                      | exec  sp_addrole 'moniter_role'(角色名稱)                    |

| 爲某用戶賦予某角色 | exec sp_addrolemember ‘monitor_role’,‘wmy’ |

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章