在絕大部分的程序安裝里,SQL Server都是作為一個標準的應用程序棧(包括用戶界面、中間層和數據庫)中的最底層。很少用戶會知道自己正在使用的是什么類型的數據庫,更不用說要對數據庫進行存取或者直接使用了。因此,數據庫安全配置往往非常是最低程度的。有時候在數據庫和中間層之間只有很容易就被“破解”的用戶名和密碼。
缺乏安全性保障看起來似乎不是什么大問題。如果你設置了防火墻,而你的用戶和程序開發員也都很可靠,你可能就會自信滿滿地認為沒有人會惡毒地刪除你的數據。但是,只要你有一個滿腹牢騷的員工,他只需悄悄一點一點地修改你的商業數據,就足以使你的系統崩潰。除了這種惡意的刪改之外,你還需要擔心一些不小心的意外出現的刪改。所幸的是,你只需要采取一些簡單的安全措施就能夠防止這些數據破壞,不管是意外的還是惡意的破壞。
一個應用程序數據庫應該至少制定三種訪問權限等級:
- 用戶權限,只能夠執行應用程序中指定的一部份已知查詢。
- 程序開發員權限,由于需要對系統提供支持,可以對非敏感數據進行只讀訪問。
- 管理員權限,可以訪問所有數據庫對象和數據。
制定這些權限等級的第一步就是建立自己的安全負責人(例如,需要利用數據庫資源的實體)。SQL Server有許多數據庫訪問權限機制,根據你的應用程序數據環境可選擇適當的機制:
- 綜合型用戶:窗口登錄,只準許個人訪問。
- 綜合型群組:窗口登錄,可允許當前群組成員訪問。
- SQL用戶,個人:每一個訪問你數據庫的用戶都要進行登錄,并獲取適當的訪問權限。
- SQL用戶,單個:SQL Server只允許但個人登錄訪問。
當你建立好自己的安全負責人,你必須對其給于賦予訪問權限等級。最簡單的權限等級就是建立管理員等級。只要把負責人加入到db_owner的身份就可以,使用以下命令:
USE <database_name>
EXEC sp_addrolemember 'db_owner', '<principal_name>' |
只要你的數據庫里沒有敏感數據,程序開發員的權限等級也很容易建立:只需要把負責人加入到db_datareader的身份。而敏感數據,如銀行帳號等,則必須按照具體情況進行評估和設定。你可以利用下面這個技術來保障數據的安全:
- l表格級別的安全措施,使用DENY語句來防止SELECT訪問某一個特定的表格。
- l列等級安全措施,與表格級別的安全措施相似,使用DENY語句來限制SELECT訪問某一列。
- 加密:可以在應用程序中對數據進行加密,或者利用SQL Server 2005中的內置式加密功能對數據進行加密。
實施已建立的用戶訪問權限等級的方法稍有不同:使用存儲程序。在存儲程序里,用戶需要EXECUTE特權來執行應用程序運行的每一個程序。但是,如果你的應用程序已經建有內嵌的SQL,除了授予全部的訪問權限之外,你只有一個選擇,你必須根據程序運行的查詢授予SELECT、INSERT、UPDATE和DELETE表格和列的特權。