麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 數據庫 > PostgreSQL > 正文

PostgreSQL7.0手冊-管理員手冊-28. 安全性

2019-09-08 23:33:53
字體:
來源:轉載
供稿:網友
第二十八章. 安全性
內容 
用戶認證 
用戶名和組 
訪問控制 
函數和規則 
安全 TCP/IP 聯接 
數據庫安全性分成幾個級別: 
  
數據庫文件保護。所有在數據庫里存儲的文件都受到保護,除了Postgres 超級用戶帳戶外其他用戶是不能讀取的。 
缺省的時候,客戶端只能通過一個本地的 Unix 套接字聯接到數據庫服務器上來,而不是通過 TCP/IP 套接字。后端必須帶 -i 選項啟動才能允許非本地的客戶端聯接上來。 

可以通過在 PG_DATA 里的 pg_hba.conf 文件來限制可聯接的客戶端 IP 地址和/或用戶名。 

客戶端聯接可以通過其他外部軟件包來認證。 

Postgres 里的每個用戶都賦予了一個用戶名和一個(可選的)口令。缺省是,用戶對不是他們創建的數據庫沒有寫權限。 

用戶可以賦予組,而且表的訪問權限可以以組權限為基礎設置。

用戶認證
認證是后端服務器和 postmaster 認定正在請求訪問數據的用戶就是他/她自稱的那個人的過程。所有激活Postgres 的用戶都對照 pg_user 表的內容進行檢查以確保他們有這么做的權限(激活數據庫)。不過,對用戶的實際身份的的核對是通過好幾種方式進行的: 
從用戶 shell 來的用戶 
  
從用戶 shell 啟動的后端數據庫服務器在進行一個 setuid 調用把用戶標識轉為用戶 postgres 之前要檢查用戶的(有效的)用戶標識。有效的用戶標識被當作訪問控制檢查的基礎。不進行其他的認證。 
從網絡來的用戶 
  
如果 Postgres 系統是為分布(處理)制作的,任何人都可以訪問postmaster 進程的網際網的 TCP 端口。DBA 配置在 PGDATA 目錄里的 pg_hba.conf 文件,根據訪問從哪個主機來和要訪問哪個數據庫聲明需要采用的認證方式。參閱 pg_hba.conf(5) 獲取一份可以使用的認證系統的描述。當然,在 Unix 里,以主機為基礎的認證也不是無懈可擊的。有能力的入侵者也可能偽裝源主機(地址)。那些安全性問題超越了Postgres 的范疇。 
以主機為基礎的訪問控制
以主機為基礎的訪問控制 是 PostgreSQL 決定哪些客戶端可以訪問數據庫以及那些客戶端上的用戶如何認證他們自己的基本控制的名稱。 
每個數據庫系統都包含一個文件叫 pg_hba.conf,在其 PGDATA 目錄里,該文件控制誰可以聯接到各自的數據庫。 

每個正在訪問數據庫的客戶端必須被 pg_hba.conf 里的其中一條記錄涵蓋。否則所有從那個客戶端發送上來的聯接請求都將被拒絕,錯誤信息為 "User authentication failed" (用戶認證失敗)。 

文件 pg_hba.conf 的常用格式是一套記錄,每行一條。空白行或者雜亂符號("#")開頭的行被忽略。一條記錄是由若干用空格和/或 tab 分隔的字段組成。 

從客戶端來的聯接可以使用 Unix 域套接字或者網際網域套接字(例如:TCP/IP)建立。用 Unix 域套接字進行的聯接是用下面格式的記錄進行控制的: 

local database authentication method
這里 
   
 database 聲明記錄所應用的數據庫。值 all 表明該記錄應用于所有數據庫。 
authentication method 聲明一個用戶在用 Unix 域套接字與該數據庫聯接時用于認證他們自身的方法。不同的方法在下面描述。 

用網際網(IP)域套接字進行的聯接是用下面格式的記錄進行控制的: 

host database TCP/IP address TCP/IP mask authentication method
TCP/IP address 邏輯上與聲明的 TCP/IP mask 和正在聯接的客戶端的 TCP/IP 地址分別相加。如果兩個結果相等則該記錄用于這次聯接。如果一個聯接匹配多于一條記錄,那么使用文件里第一條匹配的記錄。 TCP/IP address 和 TCP/IP mask 都是用點分十進制符號表示的。 
如果一個聯接不能和任何記錄相匹配,則應用拒絕認證方法(見下文)。 

認證方法
下面的認證方法可用于 Unix 和 TCP/IP 域套接字: 
trust 
無條件允許聯接。 
reject 
無條件拒絕聯接。 
crypt 
客戶端被要求向用戶請求一個口令。該口令被加密后(使用 crypt(3))發送,然后與放在 pg_shadow 表里的口令進行比較。如果口令匹配,則允許聯接。 
password 
客戶端被要求向用戶請求一個口令。該口令以明文發送,然后與放在 pg_shadow 表里的口令進行比較。如果口令匹配,則允許聯接。可以在 password 關鍵字后面聲明一個可選的文件名,用于提供對應的口令而不是使用 pg_shadow 表里面的。參閱 pg_passwd。 
下面的認證方式只能用于 TCP/IP 域套接字: 
krb4 
Kerberos V4 用于認證用戶。 
krb5 
Kerberos V5 用于認證用戶。 
ident 
在客戶端的 ident 服務器用于認證該用戶(RFC 1413)。可以在 ident 關鍵字后面聲明一個可選的映射名,這樣允許 ident 用戶名映射成Postgres 用戶名。映射放在文件 $PGDATA/pg_ident.conf 里。 
例子
# Trust any connection via Unix domain sockets.
local   trust
# Trust any connection via TCP/IP from this machine.
host    all     127.0.0.1       255.255.255.255         trust
# We don't like this machine.
host    all     192.168.0.10    255.255.255.0           reject
# This machine can't encrypt so we ask for passwords in clear.
host    all     192.168.0.3     255.255.255.0           password
# The rest of this group of machines should provide encrypted passwords.
host    all     192.168.0.0     255.255.255.0           crypt

--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

用戶名和組
要定義一個新用戶,運行工具程序 createuser。 
要把一個用戶或者一套用戶指派到一個新組,我們必須先定義該組,然后分派用戶到該組中去。在Postgres 里,這些步驟目前還不被一條 create group 命令支持(譯注:已經支持了)。代替的做法是,向 pg_group 系統表里插入一些合適的值,然后用 grant 命令給組賦予權限。 

創建用戶
創建組
目前,我們還沒有簡便的方法設置用戶組。你必須顯式地插入/更新 pg_group 表。例如: 
jolly=> insert into pg_group (groname, grosysid, grolist)
jolly=>     values ('posthackers', '1234', '{5443, 8261}');
INSERT 548224
jolly=> grant insert on foo to group posthackers;
CHANGE
jolly=>
pg_group 里的域是: 
  
groname 
組名稱。這個名稱應該是純數字和字母組成。不要包含下劃線和其他標點。 
  
grosysid 
組標識。這是一個 int4。這個字段應該在各個組之間唯一。 
grolist 
屬于這個組的 pg_user id (標識)的列表。這個字段是一個 int4[]。 
把用戶分派到組

--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

訪問控制
Postgres 提供允許用戶限制其他用戶對他提供的數據的訪問的機制。 
數據庫超級用戶 
數據庫超級用戶(也就是說,擁有設置了 pg_user.usesuper 字段的用戶)超越下面描述的所有訪問控制,只有兩點例外:如果用戶沒有設置了的 pg_user.usecatupd 字段,則不允許手工更新系統表,第二點是決不允許刪除(或者更改表結構)系統表。 
訪問權限 
限制用戶對表的讀,寫和設置規則的的訪問權限在 grant/revoke(l) 里描述。 
表刪除和表結構修改 
象 alter,drop table,和 drop index 這樣的刪除或者修改現有表的命令只能由表的所有者執行。還有上面提到的,決不允許對系統表進行這些操作。 

--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

函數和規則
函數和規則允許用戶在其他用戶可能不知道的情況下向后端服務器里插入代碼。因此,兩種機制都允許用戶使用特洛伊木馬對付其他用戶。唯一有效的保護措施是牢牢控制誰可以定義函數(即是向關系中寫入 SQL 域)和規則。我們還建議在 pg_class,pg_user 和 pg_group 上設置跟蹤和警告器。 
函數
用 SQL 以外的語言寫的在后端服務器進程里運行的函數擁有用戶 postgres 的權限(后端服務器帶著設置為 postgres 的真實有效的用戶標識運行。)用戶有可能從一個被信任的函數里面修改服務器的內部數據結構。因此,除了別的問題外,這樣的函數可以巧取任何系統訪問控制。這是一個用戶定義的 C 函數的固有毛病。
規則
就象 SQL 函數一樣,規則總是以激活后端服務器的用戶的標識和權限運行。
注意事項
我們沒有計劃準備顯式地支持 Postgres 內部數據的加密(當然我們無法阻止用戶在用戶定義函數里對數據進行加密)。我們也沒有計劃準備顯式地支持加密的網絡聯接,那樣將導致前/后端協議的完全重寫。 
用戶名,組名和相關系統標識(比如,pg_user.usesysid 的內容)都是假設在整個數據庫里唯一的。如果不是這樣,會造成不可預料的結果。


--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

安全 TCP/IP 聯接
作者:來自一封 Gene Selkov, Jr. 的 e-mail。于 1999-09-08 為回答 Eric Marsden 的一個問題而作。
我們可以使用 ssh 來對 Postgres 服務器和客戶端之間的網絡聯接進行加密。經過適當處理后,這樣做可以獲得一個足夠安全的網絡聯接。 
ssh 的文檔提供了前期了解所需的大多數信息。請參考 http://www.heimhardt.de/htdocs/ssh.html 獲取更多信息。 
  我們可以只用兩個步驟做一次分步解釋。 
通過 shh 運行一個安全的通道 

我們可以只用兩個步驟做一次分步解釋。 



建立一個與后端機器的通道,象這樣: 
ssh -L 3333:wit.mcs.anl.gov:5432 [email protected]
-L 參數的第一個數字 3333,是通道你這端的端口號。第二個數字,5432,是通道的遠端 -- 你的后端使用的端口號。在兩個端口號之間的名稱或者地址屬于服務器機器,ssh 的最后一個參數也是屬于服務器機器,它還包括可選的用戶名。如果沒有用戶名,ssh 將使用你登錄到客戶端機器的這個用戶名。你可以使用任何服務器機器接受的用戶名,而不一定是那些與 postgres 有關的。 
既然你已經有了一個正在運行的 ssh 會話,那么你就可以把一個 postgres 客戶端與你本地主機上的那個你在上一步里聲明的端口號聯接了。如果是psql,你將需要另一個 shell,因為你在第一步里使用的 shell 會話現在被 ssh 占著呢。 

psql -h localhost -p 3333 -d mpw
注意你必須聲明 -h 參數以便讓你的客戶端使用 TCP 套接字而不是 Unix 套接字。如果你選擇 5432 作為通道你這一端的端口,你可以省略端口參數。

--------------------------------------------------------------------------------
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 日本不卡一区二区三区在线 | 国产无遮挡一区二区三区毛片日本 | 久夜草| 日韩精品免费一区二区三区 | 色综合久久久久久久久久久 | 国产精品久久久久久婷婷天堂 | 国产一区二区欧美精品 | 一区二区三区日本在线观看 | 女人一级一级毛片 | 黄色av片在线观看 | 国产精品亚洲一区二区三区久久 | 国产成人av一区二区 | 国产午夜精品久久久久婷 | 麻豆视频网| 一级免费黄色免费片 | 精品一区二区电影 | 久久55| 91精品最新国内在线播放 | 日韩视频1 | 欧美日韩色 | 在线成人免费观看视频 | 羞羞网站| 中文字幕在线永久视频 | 91 成人| 亚洲精品欧美二区三区中文字幕 | 正在播放91 | 日本一区二区在线看 | 欧美视屏一区二区 | 亚洲成人免费网站 | 国产羞羞网站 | 黄色网址免费在线播放 | 成人羞羞在线观看网站 | 精品久久久久久久久中文字幕 | 久久资源总站 | 综合日韩欧美 | 国产伊人色 | 日本在线视 | 欧美一级电影网 | 九九热九九| 久久国产中文 | 在线播放h |