天天看點

SQL Server的安全模型

下面我們來學習一下 SQL Server 的安全模型,首先看一張圖:
SQL Server的安全模型

這就是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的安全模型。