SQL數據庫安全性
許多Windows系統管理員,還兼職著微軟SQL Server數據庫管理員(DBA)的身份。另一方面,企業將許多機密的信息存儲到了SQL Server數據庫中。作為一名DBA新手,則需要了解SQL Server的安全模式和如何配置其安全設置,以保證“合法”用戶的訪問并阻止“非法”訪問。而在SQL Server中登陸、用戶、角色、權限提供了對數據庫訪問的權限,接下來在數據庫安全性上著重分析它們的關系。
● 安全層次和驗證模式
一、安全層次
SQL Server支持三級安全層次。在我們登陸到SQL Server時,其實我們是經過了三步的驗證。
第一層次是用戶提供正確的賬號和密碼登錄到SQL Server,或者已經成功登陸了一個可以映射到SQL Server的windows賬號。但是在SQL Server登陸并不意味著能夠訪問數據庫,而是要經過第二層次的驗證。
第二層次的權限允許用戶與一個或多個數據庫相連,這一層次的實現要在數據庫對象的用戶中綁定登陸賬戶。
第三個層次的安全權限允許用戶擁有對指定數據庫中的對象的訪問權限,例如:可以指定用戶有權使用哪些表和視圖、運行哪些存儲過程。在第一層次中的windows賬號,其實是在我們裝機時給windows指定的自己登陸到windows系統的賬號,而作為windows系統管理員的我們其實也兼職了SQL Server的管理權,那我們如何設置才能保證只有我們指定的用戶才能訪問SQL數據庫呢?就是我們下面要說的驗證模式。
二、SQL登陸驗證模式
SQL的登陸驗證模式有兩種,一種是Windows的驗證模式,另一種是Windows和SQL Server混合驗證模式。如果我們選擇windows模式登陸并把windows賬號映射到SQL Server的登陸上,那么合法的windows用戶也就連接到了SQL Server中。
Windows模式的登陸需要在SQL Server中設置。方法:
打開SQL Server企業管理器,找到安全性文件夾,打開后再登陸中新建一個windows身份驗證模式的賬戶。需要注意的是在新建賬戶時,賬戶的名稱一定要填我們windows賬戶的名字,如:我的計算機在用戶中名稱為張信秀,則在填名稱時一定要填張信秀。
/*示例說明:在數據庫company中創建一個擁有表product的所有權限、擁有表employees的SELECT權限的角色rtest隨后創建了一個登錄ltest,然后在數據庫company中為登錄ltest創建了用戶賬戶utest同時將用戶賬戶utest添加到角色rtest中,使其通過權限繼承獲取了與角色rtest一樣的權限最后使用DENY語句拒絕了用戶賬戶utest對表titles的SELECT權限。經過這樣的處理,使用ltest登錄SQL Server實例后,它只具有表product的所有權限。 USE company --創建角色 rtest --授予 rtest 對product 表的所有權限 --添加登錄 ltest,設置密碼為pwd,默認數據庫為pubs --為登錄 ltest 在數據庫 pubs 中添加安全賬戶 utest --添加 utest 為角色 rtest 的成員 --拒絕安全賬戶 utest 對 employees 表的 SELECT 權限 /*--完成上述步驟后,用 ltest 登錄,可以對company表進行所有操作,但無法對employees表查詢,雖然角色 rtest 有employees表的select權限,但已經在安全賬戶中明確拒絕了對employees的select權限,所以ltest無employees表的select權限--*/ --從數據庫 company 中刪除安全賬戶 --刪除登錄 ltest --刪除角色 rtest |
● 總結:
在新建登陸時,利用服務器角色分配賬戶的功能,利用數據庫角色管理用戶對數據庫進行的操作。在新建角色時為角色分配權限,來限制用戶的操作。
懂得SQL Server安全性的機制后,我們就可以開發自己的數據庫安全策略了。你下一步所需要的可能就是產生一個SQL Server腳本了。在SQL Server企業管理器中,右擊一個數據庫,選擇“所有任務”,選擇“生成SQL腳本”,這個選項能夠產生一個腳本,對包括安全策略在內的數據庫進行更新。一個腳本文件可以代替通過鼠標在SQL Server事件管理器中進行點擊和選擇的操作,大大減少DBA的工作量。
posted on 2012-08-24 11:00 順其自然EVO 閱讀(348) 評論(0) 編輯 收藏 所屬分類: 數據庫