通俗地講,資料庫是儲存具有某些特性的資料的數據庫。通常,我們把使用資料庫系統的用戶劃分為四類,資料庫設計者、資料庫管理者、應用程序設計者及一般使用者。其中資料庫管理者負責賬號的管理與維護,決定所有資料庫使用者的使用權限。資料庫安全管理可說是資料庫管理者最重要的工作。SQL Server是Microsoft的企業級資料庫,它是個功能強大、易於使用的資料庫,可直接與Windows NT/2000的使用者賬號做安全機制整合。
那麼,到底什麼是安全管理呢?簡而言之,安全管理是指對需要登入服務器的人員進行管理。在應用程序中,我們會對資料庫的各類使用者設置資料操作權限,通常是直接在應用程序中做賬號與密碼的管理,但這種做法需要撰寫程序控制。而SQL Server具有親切、易操作的圖形使用界面,可以方便地管理使用者對SQL Server的存取權限。
SQL Server 安全管理可分為3個層次,即登入賬戶、資料庫的管理與連接特定資料庫的權限和使用者對所連接資料庫部分的操作權限。下面,我們將針對這3個層次做詳細說明。
一、登入賬戶 任何需要存取 SQL Server的使用者皆需要有一組服務器認可的賬戶和密碼。SQL Server支持2種登入方式,一種為Windows驗證,另一種為SQL Server驗證。前者只要在SQL Server中建立與Windwos NT/2000對應的登入賬戶,讓使用者登入Windows NT/2000時所用的賬戶能與在SQL Server中的賬戶相互對應,即可順利連上SQL Server,由此,我們完成了對Windows NT/2000安全管理機制的整合。
接下來,資料庫管理者在Windows NT上登入賬號,可直接將Windows NT中的群組加到SQL Server中,從而成為一個登入賬戶。
通過上述操作,Windows NT登入群組中的成員皆可連接SQL Server。如果該群組中某一成員不允許其登入SQL Server,可在SQL Server中將該成員的個人賬戶設為拒絕存取。如果把SQL Server安裝在 Windows 95、Windows 98或Windows Me中,則無法使用Windows驗證方式。
如果使用SQL Server驗證,必須在SQL Server中為要連接SQL Server的使用者建立登入的賬號名稱和密碼,這些賬號和密碼與Windows NT/2000的賬戶無關。
二、管理與連接特定資料庫的權限 在建立登入賬戶後,使用者便能進入SQL Server中,但並不代表使用者有連接SQL Server特定資料庫的權限,必須對使用者或群組設置對SQL Server的操作權限。SQL Server中對資料庫的操作權限可分為服務器自身的操作權限與資料庫的存取權限。對SQL Server的操作權限可由服務器角色來設置,資料庫的存取權限則可由角色與使用者對個別表格的存取權限來設置。那麼,服務器角色與角色之間有什麼不同呢?
1. 服務器角色
SQL Server系統內建8種服務器角色(可把角色想像成Windows NT賬號中的群組),它不能更改或新增。當對某一使用者或群組設置好服務器角色後,其便擁有該服務器角色所擁有的權限。服務器角色是將SQL Server的各項管理工作加以分類,如建立賬號和資料庫備份等,它與資料庫角色不一樣,後者為對個別資料庫的操作權限。
我們簡單列出8種服務器角色所擁有的權限。
system administrators 表示系統管理員可執行任何動作。
security administrators 表示管理登入賬戶。
server administrators 表示設置SQL Server的各項參數。
setup administrators 表示有關replication(復制)的設置與管理擴充預存程序。
process administrators 表示管理SQL Server所有執行中的程序。
disk administrators 表示管理資料庫文件。
database administrators 表示建立和更改資料庫屬性。
bulk insert administrators 表示對可執行bulk insert操作的管理。
2. 角色
SQL Server內建10種資料庫角色,它不能更改或刪除,但可對個別資料庫增加角色。若給予使用者有內建角色中的資料庫擁有者權限,它便擁有該資料庫的完整操作權。其余各角色的詳細權限說明可參考SQL Server的bol(即SQL Server books online),通過查詢關鍵字roles,進入標題為roles的項目,其中有包含內建服務器角色與資料庫角色的完整說明,在此不多贅述。
需要注意的是,在對使用者分別設置了各種角色(每一使用者或群組可具有多種角色)後,它便擁有所有角色聯集的權限,但若其中有某一角色對某一操作權(如對某一表格的select權)設置了拒絕,它將失去了該項權限,換句話說,拒絕權限優於授予權限。
三、資料庫中部件的存取權限
對於SQL Server的管理與可連接特定資料庫的權限,由SQL Server所提供的服務器角色與資料庫角色基本上可以符合我們大部份需求。另外,可直接對使用者或群組設置對資料庫中部件的個別存取權限,這些個別的存取權限有select、insert、update、delete、exec和dri,其中exec與dri分別表示對預存程序的執行權限和對表格有效性的驗證權限。在做直接的權限設置時,我們也可針對特殊的使用者(如內建資料庫角色不能滿足時),當然,如果使用相同權限方式的用戶比較多時,可以增加一個符合需求的資料庫角色,或將這些使用者在Windows NT/2000上先歸於某群組,再對該群組設置權限,這樣做比較方便於管理與維護。
除上述內容之外,在實際運行時,筆者對於資料庫安全的把關總結出以下幾點建議。
1. 除非必要,否則盡量以Windows驗證來管理可連接SQL Server的使用者,以整合Windows NT/2000的安全機制。
2. 善用SQL Server的服務器角色與資料庫角色功能。
3. 善用SQL Server的加密功能。
SQL Server提供了登入賬號、網絡傳輸、虛擬表和預存程序的加密功能。其中賬號的密碼加密是預設的,而網絡間傳輸資料則可用SSL方式進行加密,要啟動此功能必須啟動net-library的加密功能,同時要配合Windows 2000的CA功能,並在服務器端與用戶端設置完成,從而雙方在傳輸資料前,便會在SSL加密後再進行傳輸。由於虛擬表和預存程序的定義是以明碼保存在系統資料表中,若要將虛擬表和預存程序加密,可在其建立時在eNTerprise manager中設置加密選項或以 alter 敘述來設置加密。
4. 系統安裝完畢後,務必更改預設的sa密碼,免得有其他使用者"義務"管理您的SQL Server。