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

如何建立安全的MSSQL Server的啟動賬號

2022-06-13   來源: SQL Server 

  SQL SERVER的安全問題一直是困擾DBA的一個難題作為開發者和用戶希望自己的權限越大越好最好是sa而作為DBA希望所有的用戶權限越小越好這總是一對矛盾一般來說我們會考慮采用WINDOWS驗證模式建立安全的用戶權限改變SQL SERVER TCP/IP的默認端口等安全措施但很多DBA還是忽略了SQL SERVER服務的啟動賬號這也是一個非常值得重點關注的問題特別是SQL SERVER提供了許多操作系統和注冊表擴展存儲過程比如xp_cmdshell xp_regdeletekey xp_regdeletevalue 等等
  
  我們先來回顧一下SQL SERVER執行這些擴展存儲過程的步驟SQL SERVER提供的擴展存儲過程使你可以向TSQL一樣調用一些動態鏈接庫的內部函數邏輯而且這些擴展存儲過程可以包括WIN和COM的大多數功能
  
  當關系數據庫引擎確定 TransactSQL語句引用擴展存儲過程時
  
  關系數據庫引擎將擴展存儲過程請求傳遞到開放式數據服務層
  
  然後開放式數據服務將包含擴展存儲過程函數的 DLL 裝載到 SQL Server 地址空間(如果還沒有裝載)
  
  開放式數據服務將請求傳遞到擴展存儲過程
  
  開放式數據服務將操作結果傳遞到數據庫引擎
   
  從上圖中我們可以清楚的看到SQL Server 的數據庫引擎通過擴展存儲過程和Windows Resources進行交互而擴展存儲過程可以完成處理操作系統任務的關鍵是要有一個自己的身份SID這個SID就來自SQL SERVER服務啟動賬號所以如果這個SQL SERVER服務啟動賬號是administrators組的用戶我們就可以通過這些擴展存儲過程做任意想做的事情刪除系統信息破壞注冊表等等如果我們限制SQL SERVER服務啟動賬號的權限這樣即使黑客或懷有惡意的開發人員獲得數據庫的管理員權限也不會對操作系統造成很大的影響只要有數據庫的備份我們可以非常方便的恢復數據庫而不要重新安裝系統所以為了更安全的保護我們的系統我們希望SQL SERVER服務啟動賬號的權限越低越好
  
  作為系統的一個服務啟動SQL SERVER 服務的用戶賬號也需要一些必要的權限下面我們就通過一個具體的實例來解釋這些權限(本實例只針對成員服務器如果是DC和啟動了活動目錄Active Directory還需要其它的配置)
  
  .通過本地用戶管理建立一個本地用戶sqlserver密碼
  
  .如果現在就我們打開SERVICES配置通過該用戶啟動系統會報錯誤
  
  Source:Service Control Manager
  Event ID:
  Description:
  The %service% service failed to start due to the following error:
  The service did not start due to a logon failure
  No Data will be available
  
  這是因為作為一個普通用戶是無法啟動服務的我們需要給sqlserver用戶分配必要的權限
  
  SQL Server服務啟動賬號必須有個基本權限
  
  數據庫本地目錄的讀寫權限
  
  啟動本地服務的權限
  
  讀取注冊表的權限
  
  .賦予sqlserver用戶SQL目錄的讀寫權限
  
  因為我的SQL SERVER是安裝在D盤所以我在權限管理中將D:\PROGRMAM FILE\Microsoft SQL Server\MSSQL讀寫權限賦予sqlserver用戶
   
  .分配sqlserver用戶啟動本地服務的權限
  
  這個比較復雜我只舉例作為成員服務器的情況
  
  啟動Local Security Setting MMC 管理單元
  
  展開Local Policy然後單擊User Rights Assignment
  
  在右側窗格中右鍵單擊Log on as Service將用戶添加到該策略然後單擊OK
  
  在右側窗格中右鍵單擊Log on as a batch job將用戶添加到該策略然後單擊OK
  
  在右側窗格中右鍵單擊Locks pages in memory將用戶添加到該策略然後單擊OK
  
  在右側窗格中右鍵單擊Act as part of the operating systme將用戶添加到該策略然後單擊OK
  
  在右側窗格中右鍵單擊Bypass traverse checking將用戶添加到該策略然後單擊OK
  
  在右側窗格中右鍵單擊Replace a process level token將用戶添加到該策略然後單擊OK
  
  關閉Local Security Setting MMC 管理單元
  
  如圖
   
  . 重新啟動系統用sqlserver用戶登陸系統
  
  . 再重新啟動系統已administrator用戶登陸打開SERVICES管理工具配置用該用戶啟動SQL Server服務
   
  這樣我們就可以通過限制SQL SERVER用戶的權限來控制SQL SERVER擴展存儲過程的權限現在sqlserver用戶只對D:\PROGRMAM FILE\Microsoft SQL Server\MSSQL目錄有寫的權限這樣就降低了通過xp_cmdshell來刪除系統文件的風險
  
  通過收購來配置是比較繁瑣的幸運的是SQL SERVER已經提供了這樣的工具來配置啟動啟動賬號你可以通過SQL SERVER的企業管理器配置入下圖
  
  這樣SQL SERVER企業管理器會自動幫你配置好所有的必要條件包括目錄的訪問權限啟動服務的權限訪問注冊表的權限等等所以我們正確的配置順序是
  
  .建立用戶
  
  .在SQL SERVER企業管理器中配置該用戶啟動
  
  . 在分配其它相應的權限(如果需要復制操作)
  
  備注
  
  通過SQL Server企業管理器增加的服務啟動賬號會在registry中增加很多信息即使你更換用戶也不會刪除所以在改變服務啟動賬號不要頻繁更換這樣會增大registry的容量同時要注意只有屬於sysadmin角色的用戶才可以配置SQL Server服務的啟動賬號
  
  總結
  
  構建一個安全高效的SQL SERVER是多方面的深入了解SQL Server的運行機制是基礎我們不但要考慮數據庫用戶的安全也要考慮SQL SERVER服務的安全性
From:http://tw.wingwit.com/Article/program/SQLServer/201311/11240.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.