數據庫登陸名和數據庫用戶名
聯繫如下:
登錄名可以理解爲進入整個大樓的鑰匙,用戶名可以理解爲一個房間的鑰匙。這裏所說的大樓就是sql server服務器,而房間就是這個sql server服務器中的具體的庫。
區別如下:
1、映射關係不同
一個登錄名可以和多個不同庫下的用戶做映射。
在同一個庫下只能和一個用戶做映射,並且一個用戶名可以和多個登錄名有映射關係。
就是一個登錄名在一個數據庫下面只能映射一個用戶名,而在不同數據庫下面可以創造不同的用戶名。一個登錄名可以登錄多個數據庫。
2、權限不同
真正有權限的是用戶名,登錄名只有登進數據庫的功能,然後去找映射的用戶名,這樣就有了相應的權限。
–查找當前的數據庫的用戶名
SELECT DP.name as[user_name],SP.name as [logion_name]
FROM ST.sys.database_principals DP ,ST.sys.server_principals SP
WHERE SP.sid = DP.sid (其中ST爲當下的數據庫名)
數據庫安全性
數據庫賬戶的添加、刪除
對賬戶進行授予權限、收回權限。
1.create login kang with password=‘a@123456’, default_database=ST;–創建登陸賬戶,默認連接到ST的數據庫。
2.create user kang for login kang with default_schema=dbo;–創建數據庫用戶,並且指定scheme爲dbo,這意味着 用戶“kang” 在執行“select * from t”,實際上執行的是 “select * from dbo.t”。
–如果一個用戶me創建了一個table表,另一個用戶you調用table時,要用me.table,如果你不知道是哪個用戶,但是如果你指定dbo,只需要用dbo.table.
3.exec sp_addrolemember ‘db_owner’, ‘kang’;–通過加入數據庫角色,賦予數據庫用戶“kang”權限,此時,kang 就可以全權管理數據庫 ST 中的對象了。
–刪除數據庫用戶角色
exec sp_droprolemember ‘db_owner’,‘sharkUser01’
也可以使用
grant select,update,insert on 數據表名稱 to 用戶名
revoke select,update,insert on student from qiang;
添加具體的權限
4. SELECT DP.name as[user_name],SP.name as [logion_name]
FROM ST.sys.database_principals DP ,ST.sys.server_principals SP
WHERE SP.sid = DP.sid --查找當前的數據庫的用戶名
-
exec sp_helprotect @username=‘qiang’;查看qiang用戶的權限
-
revoke select,update,insert on student from qiang;刪除qiang這個用戶對student表的某些權限
-
drop login qiang;–刪除數據庫登陸賬戶
這個是數據庫用戶角色,對應第三點。
在賦予權限的時候,必須在管理員權限下。
(2)觸發器,存儲過程的使用
創建存儲過程並執行
在執行存儲過程中,output關鍵字必須加,不然會打印不出來。
而且不能不用print打印@num1,不然也會打印不出來。
創建觸發器並測試效果
(3)數據庫備份與恢復
對所創建的數據庫進行備份,利用備份進行數據庫恢復
如果數據庫多個客戶端在連接,在還原之前,首先要把數據庫的連接方式設置爲單一連接。
如果出現這個報錯,你需要選擇覆蓋現有的數據庫。
實驗小結:
- 在第一個實驗中,創建賬戶後,必須更改連接,切換用戶。對用戶授權必須在有管理員權限的情況下才能對新建用戶更改權限。
- 在第二個小實驗的時候,又犯了外鍵插入錯誤。
- 對用戶名和登錄名的理解。