熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> SQL Server >> 正文

保護SQL服務器的安全-用戶識別問題

2013-11-15 14:40:49  來源: SQL Server 
在我們關於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
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.