這是大三第一學期《數據庫基礎》的實驗報告,總共15個實驗,前12個百度文庫都有,后面三個網上找不到都是我自己花了很多時間琢磨出來的,希望對大家,以及將來的我有所幫助!
主要是概念問題,先是進入數據庫所必須的登入用戶,然后每個登入用戶必須要有其下的數據庫用戶,每個數據庫用戶必須要有權限,權限具體內容由服務器角色提供。權限具體內容可以使用系統自帶的服務器角色,也可以自定義。
思路很繞,大概有點理解,就是那種層次結構的感覺。
全部總結鏈接
SQL基礎 (數據庫、表、數據的增刪改查、視圖相關,以及所有實驗報告源代碼)
游標 (類似C++ 的 指針)
存儲過程(類似 C++ 的自定義函數)
觸發器 (類似 自定義的陷阱,或者說是監聽器,滿足某個條件了執行某個方法)
用戶權限及權限管理 (類似Windows的多用戶管理)
並發控制 (了解多個用戶同時對數據造成錯誤的情況 和 解決方法)
數據恢復(當數據庫數據丟失,相應的解決方法)
課程名稱 數據庫基礎
實驗項目 實驗13 用戶管理及權限管理
實驗要求
(1)以系統管理員身份完成如下實驗。
- 建立3個不同名稱的注冊用戶.
- 使用ALTER LOGIN命令對建立的注冊用戶用不同的修改.
- 建立一個數據為管理員用戶
(2)以數據為管理員身份完成如下實驗。
- 根據已有的注冊用戶建立幾個當前數據庫的用戶。
- 使用ALTER USER命令修改部分用戶設置。
- 建立若干角色,部分角色指定基他用戶管理。
- 授權一些用戶可以創建表等數據庫對象。
- 完成角色管理及其他授權管理
(3)以下實驗由若干學生一組共同完成。
- 每個用戶有建立對像的權限,各自建立自已的對象(如表和視圖等)。
- 各用戶之間就表或視圖的查詢、修改、刪除、插入等互相授權,在授權過程中體會GRANT命令中WITH GRANT OPTIN短語的作用。
- 分情況收回授權,並體會REVOKE命令中GRANT OPTION FOR 和CASCADE短語的作用
(4)在實驗報告中要給出具體的操作要求和過程,並針對各種情況做出具體的分析和討論。
實驗過程
關於用戶權限的概念性問題和相關SQL代碼研究了好久,總共嘗試了三遍,每次做都有新的理解,下面為最后一次的理解:
最重要的就是概念性問題,首先對其中的概念總結一下:
登入用戶:在SQL server 2012啟動的時候需要登入的用戶,登入用戶必須要用數據庫用戶,否則無法登入。如下圖所示:
服務器角色:書本154頁,相當於java中“類”的概念。可以使用系統預定義的,也可以自己創建自定義權限的角色。
數據庫角色:書本155頁,相當於java中“對象”的概念。當一個數據庫角色和服務器角色“連接”起來,那么這個數據庫角色就含有該服務器角色所擁有的權限。
需要用到的函數:
sp_addrole函數在書本156頁,用來創建新數據庫角色,參數前者為數據庫角色名稱,后者為只讀權限
sp_addrolemember函數在書本157頁,用來連接數據庫角色和數據庫用戶
題目1.1:建立3個不同名稱的注冊用戶
圖 1 創建三個用戶,屬性包括 用戶名 和 密碼 以及默認登入的數據庫
這個時候創建的這三個用戶,還無法登入,因為還沒有打開“學生管理系統”數據庫的權限,如果登入則顯示:
題目1.2:使用ALTER LOGIN命令對建立的注冊用戶用不同的修改
圖 2 分別修改三個用戶的 用戶名 和 密碼
注:此題主要展示一下修改用戶名和密碼的語法,實際上沒有修改,對后面過程沒有影響
題目1.3:建立一個數據為管理員用戶
圖 3 把zwz01用戶設置為sysadmin(書本154頁)管理員,可以做任何事情
但是這個管理員用戶下面沒有數據庫用戶,還是不能登入:
題目2.1:根據已有的注冊用戶建立幾個當前數據庫的用戶。
圖 4 分別創建 兩個 數據庫用戶
其中sp_addrole函數在書本156頁,用來創建新數據庫角色,參數前者為數據庫角色名稱,后者為只讀權限
代碼相當於使用系統的“只讀”類,創建兩個java對象,分別是zwz01和zwz02
這個zwz01和zwz02和登入用戶的zwz01無關,這里重名了,以后有機會再改
題目2.2:使用ALTER USER命令修改部分用戶設置
圖 5 分別修改 兩個用戶 的 用戶名
注:只是展示語法,實際上沒有修改,對后面過程無影響
題目2.3:建立若干角色,部分角色指定基他用戶管理
圖 6建立兩個角色‘zwzdatabase1’、‘zwzdatabase2’,和數據庫用戶“連接”起來
題目2.4:授權一些用戶可以創建表等數據庫對象(創建表、視圖權限)
圖 7 授權zwz01可以創建表
注:主要是展示語法,具體例子在第三大題
題目2.5完成角色管理及其他授權管理
圖 8 紅框內是查看數據庫角色zwzdatabase1的用戶,即zwz01
下方授權代碼是授予zwz01用戶相關權限
第三大題:
在完成第三大題之前,我們先創建三張表格,用於授予權限
圖 9 創建三張表格
圖 10 創建三個登入用戶 分別是user01~03
此時還沒和數據庫角色連起來 是虛的
題目3.1:每個用戶有建立對像的權限,各自建立自已的對象(如表和視圖等)。
圖 11 自定義一個數據庫角色user 然后實例化給user01、02、03,即連接起來
分別賦予 各個用戶 增刪改查 自己表的權限
比如 user01表可以增刪改查user01table 以此類推
題目3.2:各用戶之間就表或視圖的查詢、修改、刪除、插入等互相授權,在授權過程中體會GRANT命令中WITH GRANT OPTIN短語的作用。
第一步:首先我們退出SQL server,改用user01的賬號登入 ,執行以下代碼:
圖 12 第一行代碼為在自己的表中插入一行數據
第二行代碼為查找自己表的全部信息,已經輸出
第三行為把自己表的 增刪改查 權限授權給 user02
第二步:然后我們再退出SQL server,改用user02的賬號登入 ,執行以下代碼:
首先查詢user01table,因為user01已經賦予其權限,所以可以查到:
再查詢user02table,因為這本來就是自己的表,所以也可以查詢:
最后查詢user03table,因為沒有權限,無法訪問
題目3.3:分情況收回授權,並體會REVOKE命令中GRANT OPTION FOR 和CASCADE短語的作用
我們先切換為user01的賬號,執行以下代碼:
即刪除對user02的授權
然后再切換到user02的賬號,查詢表1,無法查詢