国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

講解Informix安全特性保護數據的具體措施

2024-07-21 02:44:16
字體:
來源:轉載
供稿:網友

前言


保護數據需要權衡考慮安全性和訪問能力。如何找到最合適的方法呢?


目前,公司和政府為數據的可審計性和控制制定了嚴格的標準,這使數據庫安全性成為近來的熱點。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 數據庫特權和相關的表特權,才能創建索引、修改表結構或引用持久表。

 


創建表的用戶是所有者,他擁有所有表特權,這些特權無法撤消。with grant option 允許用戶把特權授予其他用戶;應該謹慎地使用這個選項,因為它把控制表特權的過程委托給了其他用戶。使用 as GRANTOR 選項以另一個用戶的身份授予特權。只有 DBA 或具有授予權限的用戶可以使用這個選項。只有授予一個特權的用戶能夠撤消這個特權。


授予和撤消表特權的語法如下:


grant [ all | [ select | insert | update | delete | index | alter | reference ]

on [ TABLE | VIEW | SYNONYM ] to [ public | USERS ]

[ with grant option ][ as GRANTOR ];


revoke [ all | [ select | insert | update | delete | index | alter| reference ]

on [ TABLE | VIEW | SYNONYM ] from [ public | USERS ];

 

 

表特權存儲在系統表systabauth中,這個表包含四列:


◆grantor,授予這個特權的用戶

◆grantee,獲得這個特權的用戶

◆tabid,這個表在系統表中的編號

◆tabauth,表特權

使用下面的 SQL 語句列出表和具有表特權的用戶:


select systables.tabname, systabauth.*from systables, systabauth

where systables.tabid = systabauth.tabid and systables.tabid > 99 order by tabname;

 

 

這個語句聯結 systabauth 和 systables,從 systables 中獲取表名并顯示用戶。tabauth 列包含特權,需要根據這個列中的位置進行解碼(見圖 1)。

圖 1. tabauth 列包含的特權

 

tabauth 中的字符表示對于一個表有哪些表級特權。表 1 給出列中的位置與其表示的表和列級特權之間的對應關系。

 

表1. 表和列級特權之間的對應關系

 

大寫字母表示用戶可以把這個特權授予其他用戶;- 表示用戶不擁有這個特權。所以在圖 1 中,Sarah 只有 customer 表的 select 特權,而 Robert 有 select、insert、update 和 delete 特權;沒有列級特權。


與數據庫特權一樣,應該謹慎地使用 public。可以撤消一個用戶的所有表特權,但是這個用戶仍然擁有分配給 public 的特權。在默認情況下,每個表在創建時都有 public 特權,所以需要檢查 public 特權,考慮是否需要修改默認的 public 特權。


在數據倉庫系統中,用戶只需要 select 特權。在 OLTP 數據庫中,應該根據需求把特權限制在 select、update、insert 和 delete。

列特權


兩個列級特權是 select 和 update。具有列級特權的用戶不應該擁有表級的 select 或 update 特權。用戶的表級 select 或 update 特權將覆蓋列級特權。列級特權存儲在 syscolauth 表中,它們限制用戶是否可以查看或修改表中記錄的指定列。


授予列級特權的語法如下:


grant [ select (COLUMN) | update (COLUMN) | reference ( COLUMN ) ]

on [ TABLE | VIEW | SYNONYM ] to [ public | USERS ][ with grant option ][ as GRANTOR ] ;


除非在表級撤消 select 和 update 特權,否則列級特權不起作用。當存在列級特權時,systabauth 表的 tabauth 列的第三個位置上會顯示一個星號(見表 1)。


列級特權在控制對機密信息(比如工資或 SSN)的訪問方面非常有用。

權衡考慮控制和訪問


安全性是 DBA 的一項重要責任。既要保護組織的數據,又要滿足適當的使用需求,這是個難題。關鍵是分配適當的特權級別。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 平舆县| 工布江达县| 宣恩县| 永嘉县| 墨脱县| 五指山市| 杭锦旗| 阿巴嘎旗| 聂拉木县| 河源市| 旅游| 普兰店市| 永顺县| 黔西县| 闵行区| 盘锦市| 定襄县| 富蕴县| 石河子市| 周口市| 新巴尔虎左旗| 水富县| 绍兴县| 隆子县| 卫辉市| 岢岚县| 永清县| 莲花县| 蒙城县| 垫江县| 本溪| 成安县| 海宁市| 商丘市| 胶州市| 买车| 都昌县| 江口县| 涞水县| 江阴市| 合江县|