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提供的擴展存儲過程使你可以向T
SQL一樣調用一些動態鏈接庫的內部函數邏輯
而且這些擴展存儲過程可以包括WIN
和COM的大多數功能
當關系數據庫引擎確定 Transact
SQL語句引用擴展存儲過程時
關系數據庫引擎將擴展存儲過程請求傳遞到開放式數據服務層
然後開放式數據服務將包含擴展存儲過程函數的 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