在我們關於SQL服務器安全系列的這文章裡
我們的目標是向你提供安全安裝SQL服務器所需要的工具和信心
這樣的話
你有價值的數據就會受到保護
避免無意或者有意的破壞或者竊取
在本文裡
我們會深入一些基礎的概念
在保護數據庫安全的時候
你需要利用下面這些概念
登錄
用戶
角色
以及組
確定誰在請求訪問數據或者SQL服務器裡其他信息等看上去很簡單的過程
都需要用到所有這些概念
登錄 登錄規定了哪些用戶能夠連接到安裝好的SQL服務器上——這不是某個特定的數據庫
而是而是整個服務器
登錄有兩種不同的形式
Windows集成的登錄
它會授權特定的Windows用戶或者組使用它們的Windows信任書進行連接
SQL服務器登錄
它會授權用戶使用由SQL服務器保存的用戶名和密碼進行連接
你應該使用哪一種? Windows集成登錄肯定要比SQL服務器登錄更加高效和更方便
因為用戶只需要登錄一次——在網絡這一層
單獨登錄到服務器是沒有必要的
因為SQL服務器會自動地處理(在後台)Windows登錄
從而允許到服務器的訪問
只有在服務器運行在Windows NT或者
上的時候
對Windows登錄的支持才有效
安裝在Windows
上的服務器必須要依賴SQL服務器登錄
如果你正在運行Windows
而且最終需要支持原有的應用程序
那麼就要記住
SQL服務器登錄只有在混合模式下才可用
設計上的考慮 在設計自己數據庫的時候
你需要考慮登錄的方法——而且要在你真正開始保證最終產品的安全之前
你應該知道服務器使用的是哪種授權方式
那些還在Window
上使用服務器的人可能現在就要考慮升級
如果安全是一個很重要的問題的話
那樣的話
他們就可以使用Windows集成的安全(策略)
另外一個設計問題是知道誰擁有訪問權
他們能夠訪問什麼數據
以及他們是否能夠對對象和數據進行更改
你不用真的列出其名字
你只需要利用工具有效地幫助用戶就行了
最後
你應該使用系統的存儲過程來管理安全
SQL服務器提供了兩種存儲過程
用於登錄的管理
◆sp_addlogi——在使用SQL服務器驗證保護你服務器安全的時候要使用這個存儲過程
具體的說
這個存儲過程會創建一個新的SQL服務器登錄
它允許用戶使用SQL服務器驗證連接到SQL服務器的實例上
◆sp_grantlogin——這個存儲過程允許Windows
的用戶或者組帳號使用Windows驗證連接到微軟的SQL服務器上
只有sysadmin或者securityadmin固有服務器角色的成員能夠執行這兩個存儲過程
什麼是系統存儲過程? 系統存儲過程是一個內置的存儲過程
它能夠幫助你管理服務器
你可以在MSDN庫裡找到一長串的系統存儲過程
SQL服務器文獻在線囊括了每個系統存儲過程的所有句法細節和使用示例
用戶 登錄屬於服務器
而用戶則屬於數據庫
用戶ID會識別特定數據庫的特定用戶
而且
用戶對於數據庫來說是專門的——也就是說
Northwind數據庫裡Fred這個用戶同公共數據庫裡Fred那個用戶是不同的
盡管這兩個Fred可能和同一個登錄相關聯
當你在數據庫裡創建一個用戶的時候
你就將一個特定的登錄同這個用戶關聯起來了
對於這個數據庫而言
登錄具有這個用戶的權限
盡管登錄所用的ID不需要和用戶ID相同
但是在通常情況下
如果你保持這樣的慣例
那麼事情就會更少讓人糊塗
如果登錄在數據庫裡沒有相關聯的用戶
那麼用戶能夠通過特殊的來賓用戶帳號連接到該數據庫
特殊用戶 所有的用戶都不是數據庫裡的常住人口
而且不能保證用戶帳號就是他們自己的
在希望用戶臨時訪問數據庫的時候
你可以使用來賓用戶帳號
它可以不使用常規的用戶帳號而登錄訪問服務器
來賓用戶的登錄必須擁有訪問數據庫的權限
而且數據庫必須設有來賓用戶帳號
一旦進了數據庫
來賓用戶會被限制到只能進行來賓用戶帳號所指定的活動
但是
來賓用戶帳號在一個剛剛創建的數據庫裡不是缺省就存在的
(數據庫的)所有者或者系統管理員必須創建這樣一個帳號
除了來賓用戶
你還需要考慮數據庫的所有者(DBO)
他是創建數據庫的用戶
數據庫的所有者或者系統管理員必須賦予(其他人)權限
才能讓他們在數據庫創建其它的對象
為了向數據庫裡添加數據
你要運行sp_grantdbaccess
這個存儲過程會在數據庫裡創建一個和指定登錄相對應的用戶
只有sysadmin固有服務器角色
db_accessadmin角色
以及db_owner固有服務器角色的成員才能夠執行sp_grantdbaccess
角色 角色讓你將用戶集中到一起
以利於更簡單的管理
就像用戶一樣
角色也是數據庫的對象
例如
你可以在自己的采購數據庫裡定義一個
銷售
角色
並讓所有的產品所有銷售人員都成為這個角色的成員
如果你隨後賦予這個
銷售
角色許可
那麼這些許可會自動地應用於該角色的所有成員上
此外
一個用戶可以是多個角色的成員
有三種類型的角色 ◆公共——這個角色會為所有的用戶設置缺省的基本許可
所有的用戶都會被分配公共角色
◆服務器——服務器角色適用於整個服務器
◆數據庫——這些角色適用於專門的數據庫
服務器和數據庫角色都有預先定義的類別
我們把它們列在表格A裡
表格 A
角色的分配
有一些系統存儲過程是用於向數據庫添加角色和成員的使用sp_addrole可以在數據庫裡創建一個新的角色然後運行sp_addrolemember向角色添加用戶帳號你不能創建固有的服務器角色你只能夠在服務器這一層添加角色只有sysadmin固有服務器角色db_securityadmin角色以及db_owner固有數據庫角色的成員才能夠執行sp_addrole或者sp_addrolemember
組
組向你提供了批量管理安全的第二種方式而不需要一個用戶一個用戶地來管理在SQL服務器裡並不存在組它們由操作系統來維護組的使用可以讓你把SQL服務器的安全策略和整個企業的安全策略綁在一起
例如如果你有一個叫做銷售的Windows 組它包含著你所有的銷售人員你可以在SQL服務器裡專門為這個組創建一個Windows登錄這個銷售組的任何成員都會作為指定的登錄連接到SQL數據庫上(除非他們有自己單獨的優先登錄)你可以進一步將這個登錄同任何數據庫裡的用戶相關聯然後賦予該用戶許可組的任何成員都會在他們使用數據庫的時候獲得指定的許可
管理策略
用戶管理的主要目標是雙重的首先你希望確保只有那些能夠獲得數據的用戶是真正需要使用數據的人其次你應該盡力將用於用戶管理的精力降到最小繁雜的策略要比直接的策略更少被人采用否則就會導致安全的極大破壞下面是你在用戶管理中可以采納的一些簡單指導方針
在可能的情況下盡量使用Windows集成安全這會降低密碼維護和用戶創建所要的花費精力它還會讓SQL服務器將登錄信息傳遞給已連接的服務器這在分布式數據庫裡很重要
在可能的情況下盡量在聚合這一層管理安全不應該為每個必須訪問你數據的單個人創建用戶而應該創建像銷售或者DataEntryUsers這樣的角色然後你就可以通過添加和刪除角色的用戶來控制訪問同時向角色分配許可另外你也可以在Windows層管理組成員並向代表整個Windows組的用戶分配許可
來賓用戶很危險因為它會給你服務器上每個的登錄都賦予訪問數據庫的權限不要在數據庫裡創建來賓用戶除非它要對所有的人都開放
基本內容
本篇文章裡所討論的概念都是實現你SQL服務器安全的基本要素它們一點也不簡單理解每個登錄的工作方式離你確定自己整個(安全)策略還有很長的路要走
From:http://tw.wingwit.com/Article/program/SQLServer/201311/22168.html