【賽迪網-IT技術報道】前言
保護數據需要權衡考慮安全性和訪問能力。如何找到最合適的方法呢?
目前,公司和政府為數據的可審計性和控制制定了嚴格的標準,這使數據庫安全性成為近來的熱點。DBA 必須保證用戶能夠訪問完成工作所需的數據,同時避免數據風險。
絕對保護數據的惟一方法是把伺服器關閉,鎖起來,不讓人使用。但是,為了讓數據庫發揮作用,就必須允許訪問數據。IDS 在數據庫、表和列級都應用了安全措施。安全措施還可以應用於視圖中的記錄級。所有安全措施都基於用來連接數據庫的用戶名。
我將解釋 Informix 安全特性如何幫助您保護數據,同時允許適當的用戶訪問數據。
安全建議
每個環境和數據庫開發的每個階段有不同的數據庫安全性需求。開發環境必須讓程式員能夠快速創建和修改數據庫對象。測試和生產環境需要穩定性,需要控制可以對數據庫對象執行哪些操作。有效的數據庫安全模型的一個關鍵部分是,定義和分配 DBA、數據庫安全官(DSO)和對象所有者角色。
對於 DBA 角色,應該創建一個抽象的用戶登錄。DBA 本質上是數據庫超級用戶。建立一個單獨的登錄會減少用戶意外刪除數據庫的風險。這條原則在生產環境中尤其重要。DBA 登錄名應該是數據庫和數據庫中所有表的創建者。DBA 應該是對數據庫中任何表有修改特權的惟一用戶。作為數據庫和數據庫中所有表的創建者,DBA 可以把特權授予其他用戶。
一些生產環境可能需要一個 DSO,這是 DBA 之外的一個單獨職位,他負責數據安全。DSO 也應該是一個單獨的抽象用戶登錄。為了能夠有權在數據庫中添加新用戶,DSO 需要 DBA 數據庫特權。DSO 還需要數據庫中每個表的授予特權,以便把特權授予其他用戶。
為了建立具有 DSO 特權的角色,必須給 DSO 分配用戶對於數據庫中每個表可能需要的所有特權。下面是使用帶 grant option 的 grant 命令的 SQL 語法:
GRANT SELECT, INSERT, UPDATE, DELETE, INDEX ON table_name TO dso_login_name
WITH GRANT OPTION;
Public特權
Informix 使用關鍵字 public 表示應用於所有用戶的特權。public 關鍵字是一個非常強大的工具,可以開放對數據的訪問。同樣,為了防止未經過授權的所有用戶連接數據庫和選擇數據,可以完全撤消 public 特權。
對象所有者特權
創建數據庫或數據庫對象(表、索引、函數、過程等等)的用戶就是這個對象的所有者,他控制這個對象的訪問和特權。對象的所有者擁有所有表級特權,而且這些特權不能撤消。當系統從開發環境轉移到生產環境時,或者表或數據庫原來的所有者離開組織時,這個限制可能會造成問題。任何其他用戶(即使是 DBA)都無法撤消所有者的特權。因此,必須謹慎地決定數據庫或表的所有者。
表的所有者是可以向其他用戶授予這個表的特權的惟一用戶。一些應用程式也使用 owner.tablename 語法來訪問表。在我的一個客戶的數據庫中,表在開發、接收測試和生產階段有不同的所有者。一個表只能有一個所有者。當把應用程式代碼從開發環境轉移到測試環境,然後再轉移到生產環境中時,必須改變表的所有者,這可能會造成問題。在不同的環境中,必須修改應用程式代碼中的 owner.tablename,這會增加風險。
數據庫特權
有三個數據庫特權級別:DBA、Resource 和 Connect。Connect 特權允許用戶訪問數據庫以及添加、修改和刪除數據。Resource 特權授予用戶所有 Connect 特權,還授予創建新的表、索引和過程的特權。DBA 特權包括 Connect 和 Resource 特權,還授予用戶把 Resource、Connect 或 DBA 特權授予其他用戶的權力。具有 DBA 特權的用戶還可以刪除數據庫中的所有對象或完全刪除數據庫。
對於大多數數據庫活動,Connect 特權就足夠了。要創建新對象的程式員或開發人員可能需要 Resource 特權。DBA 特權就像是 Unix 作業系統的 “超級用戶”。授予或撤消數據庫特權的語法是:
grant [ dba | resource | connect ] to [ public | USERS ];
revoke [ dba | resource | connect ] from [ public | USERS ];
數據庫特權存儲在系統表 sysusers 中。可以用 select * from sysusers; 列出所有用戶及其數據庫特權,顯示的資訊包括:
◆username,連接數據庫的用戶的登錄名
◆usertype,數據庫特權類型;D 表示 DBA,R 表示 Resource,C 表示 Connect
◆priority,這一列沒有正式使用,但它是系統表的一部分(通常,對於所有用戶,這一列是 5;對於數據庫所有者,是 9)
◆password,這一列沒有使用,但它是系統表的一部分
數據庫特權
應該避免把 DBA 特權授予 public。我見過一些第三方應用程式把 DBA 特權授予 public,僅僅是因為這樣做非常省事。如果把 DBA 特權授予 public,那麼任何用戶都能夠刪除數據庫、撤消所有其他用戶的所有特權和創建新的數據庫用戶。如果把 Resource 特權授予 public,那麼就允許任何用戶在數據庫中創建對象(表或視圖)。
撤消用戶的 DBA 或 Resource 特權會使特權轉換為 Connect。如果希望從數據庫中完全刪除一個用戶,還需要撤消 Connect 特權。
在授予數據庫特權時,採用以下原則可以減少很多麻煩:
◆DBA 特權應該只授予一兩個登錄名,這些登錄名不供常規用戶使用。這些登錄名應該只用於數據庫管理(DBA 和 DSO)。
◆Resource 特權應該只授予開發環境中的程式員,以及必須通過運行過程創建索引的用戶。
◆Connect 特權應該只授予需要訪問數據庫的用戶。
表特權
有七種表特權:
◆Select(查看表中的數據)
◆Insert(在表中添加新的數據行)
◆Update(修改現有行)
◆Delete(刪除數據行)
◆Index(在表中添加索引)
◆Alter(修改表結構)
◆Reference(在引用約束中引用列)
用戶必須具有 Resource 數據庫特權和相關的表特權,才能創建索引、修改表結構或引用持久表。
1
2
下一頁>>