這就是SQLServer的三層安全管理體系,我們打個比方,假設您住在一個防衛森嚴的小區,您如果希望進入您的房間,當然需要闖三關。
第一關:您需要通過小區的門衛檢查,進入小區;
第二關:到了您所在的單元樓門前,您還需要單元門的鑰匙或門鈴密碼;
第三關:進了單元門後,您還需要您自己房間的鑰匙。
看一下上面的圖,SQLServer的安全管理是不是非常類似小區的三層驗證關口?同樣的,我們想操作資料庫的某張表也要闖三關:
第一關:我們需要登入到SQL Server系統,即需要登入帳戶;
第二關:我們需要通路某個資料庫(相當于我們的單元樓),即需要成為該資料庫的使用者
第三關:我們需要通路資料庫中的表(相當于打開我們的房間),即需要資料庫管理者DBA給您授權,如增添、修改、删除、查詢等權限。
咱們都知道,登入驗證有兩種方式:
1.SQL身份驗證:适合于非windows平台的使用者或Internet使用者, 需要提供帳戶和密碼
2.Windows身份驗證:适合于windows平台使用者,不需要提供密碼,和windows內建驗證
那麼,登入帳戶相應有兩種:SQL 帳戶和Windows帳戶。
下面我們就一起來看看如何建立登入帳戶、如何建立資料庫使用者以及如何給使用者授權。
1. 建立登入• 添加 Windows登入帳戶
EXEC sp_grantlogin ‘leno\123‘ /*域名/使用者名 */
• 添加 SQL登入帳戶
EXEC sp_addlogin ‘zhangsan', ‘1234’ /*使用者名/密碼*/
2. 建立資料庫使用者建立資料庫使用者需要調用系統存儲過程sp_grantdbaccess,其用法為:
EXEC sp_grantdbaccess ‘登入帳戶名’,’資料庫使用者名’
其中,“資料庫使用者名“為可選參數,預設為登入帳戶名,即資料庫使用者預設和登入帳戶同名。
USE stuDB
GO
EXEC sp_grantdbaccess
'leno\123', 'lenoDBUser'
'zhangsan', 'zhangsanDBUser'
其實,系統本身就内置了兩個資料庫使用者:
q dbo 使用者
q 表示資料庫的所有者(DB Owner)
q 無法删除 dbo 使用者,此使用者始終出現在每個資料庫中
q guest 使用者
q 适用于沒有資料庫使用者的登入帳号通路
q 每個資料庫可有也可删除
dbo使用者:表示DataBase Owner即資料庫的主人,一般來說,誰建立的資料庫,誰就是資料庫的主人,但是可以轉讓,就像房屋産權證轉讓一樣。
guest來賓使用者:就像你不是某個公司的員工,您進入該公司就是作為一個來賓(guest)身份一樣。資料庫中的guest使用者含義一樣:如果登入到SQL Server中了,希望通路某個資料庫,但又不是該資料庫的使用者,那麼當你通路時,SQL Server就認為你作為guest使用者的身份通路資料庫,至于你作為guest來賓使用者是否能夠通路資料庫,那就看管理者的授權了。如果管理者給guest帳戶授予了通路的權限,那麼你就能通路。那麼,什麼叫做通路權限呢?打個比方:對于某間房屋來說,房屋的權限就是指×××出售權(房主)、轉租(可能是租房人有事不住了,但又沒到期)、隻能居住(租房人)等。對于資料庫來說,通路權限指的就是資料庫的增(insert)、删(delete)、改(update)、查(select)權限以及其它執行權限等。
3. 給資料庫使用者授權授權的文法
• GRANT 權限 [ON 表名 ] TO 資料庫使用者
USE stuDB
/*--為zhangsanDBUser配置設定對表stuInfo的select, insert, update權限--*/
GRANT select, insert, update
ON stuInfo TO zhangsanDBUser
/*--為lenoDBUser配置設定建表的權限--*/
GRANT create table TO lenoDBUser
注意授權隻能向資料庫使用者授權,而不是給登入帳戶授權。而且資料庫的權限僅限于目前資料庫,如果希望通路其他資料庫,還需要成為其他資料庫的使用者。是以,現在大家應該清楚了:登陸賬号->資料庫使用者->通路權限,這三道關口就是SQL Server的安全模型。