| 導購 | 订阅 | 在线投稿
分享
 
 
 

postgresql認證和用戶管理

來源:互聯網  2008-05-18 21:58:24  評論

首先在這裏先向sonicer和lanb兩位老兄說聲對不起了,沒辦法我現在在爲了生活不得不一天忙到晚,星期六星期天我也得回家不能出來,主要原因是因爲我快要做爸爸了,所以老婆在家需要人照顧,只有在上班的時候才會到網上來看看了。真是不好意思。

我們先來講講postgresql的用戶認證吧。

我想我們有必要明白以下幾個問題:

第一、postgresql的用戶和操作系統的用戶沒有任何直接的的關系。雖然在postgaresql的初始安裝中,它會有一個內建的超級用戶 postgres,而且它會建議你在操作系統中也新建一個用戶postgres用它來連接數據庫服務器和管理數據庫集群,但是這並不是必需要的。在啓動數據庫服務器之前,你必需先要安裝一個數據庫集群,也是初始化一個數據庫目錄,也就是按這個命令來做:initdb ,這個命令會初始化一個數據庫,它的用法如下:initdb -D 目錄名,這樣它就准備好了一個新的數據庫目錄,你現在可以用命令啓動數據庫了,postmaster -D 目錄,或者是用pg_ctl start -D 目錄名, 這個腳本來啓動數據庫用戶,啓動後你將進行第一次登錄,注意因爲在postgresql中預設是以ident sameuser這種方式來登錄的(幾種登錄的方式我們在下面講), 所以我們只有切換到我們預建的postgres 用戶下才能登錄進入數據庫服務器。

su postgres; psql template1; 這樣就登錄入數據庫服務器。但是這個認證方式是由所在的數據庫目錄裏的一個文件來pg_hba.conf來控制的。

第二、postgres在默認是不接受tcp/ip連接的。有兩種方式來控制它接受tcp/ip連接,一種是用啓動參數 -i ,另一種方式是修改數據庫目錄裏的文件:postgresql.conf中的參數,將tcpip_socket = false改爲true port = 5432 前面的注釋符號去掉。表示接受tcp/ip在5432的連接。

第三、關于pg_hba.conf這個文件:

這個文件是控制postgresql數據庫服務器登錄的關鍵。還記得我們第一條裏所做的第一次登錄嗎?在那裏我們是用的系統用戶postgres進行登錄的。爲什麽會這樣呢?我不用這個系統用戶登錄不行嗎?當然可以。我們可以看看psql這個客戶端的登錄語法:psql [-h 主機名] [-U 用戶名] [-W 密碼] 數據庫名 。 如果省略主機名,系統會認爲首先從本機連接,那麽它會采用unix socket的方式來進行連接,如果指定-h參數它會以TCP/IP的方式來進行連接,-U是登錄用戶名,-W 指定用戶密碼,可以不寫密碼系統會提示你要輸入密碼的。

所以當你啓動後,可以使用如下命令進行登錄(不需要切換到系統用戶postgres)

psql -h localhost -U postgres -W template1 當要你輸入密碼時,直接回接就行了。默認postgres用戶是沒有密碼的。如果不能登錄看我的配制文件:pg_hba.conf如果裏面的關于登錄的方法爲ident sameuser的話,就會提示錯誤,當然不並不影響我們的試驗。

第四:pg_hba.conf這個文件的語法與登錄認證的幾種方式:當我們打開這個文件的時候會看到如下的字句:

# TYPE DATABASE USER IP-ADDRESS IP-MASK METHOD

local all all trust

host all all 127.0.0.1 255.255.255.255 trust

~

它的寫法上面已經有很清楚的介紹了,第一個域是登錄類型,主要由本地登錄和從別的主機上登錄兩種。第二個域表示要登錄的數據庫,第三個域是登錄的用戶,第四個是客戶登錄ip地址或者是網段,第四個則是了網掩碼了,第五個就是認證的方式及認證方式的先項了。

登錄的類型我們可以寫以下三種:local, host, hostssl ,

認證方式有這幾種:trusst (信任登錄),指定的這種登錄是不需要任何密碼的。只要存在這種用戶就可直接登錄:local all all trust

允許來來自本機任何合法的數據庫用戶登錄所有的數據庫(注意是數據庫用戶,而且是從本機登錄的)。

口令認證:這種認證方式有幾種寫種寫法:password, crypt, md5,這三種方式中password是以明碼方式傳遞密碼的。crypt在postgresql7.2.x以下用得較多,因爲它們沒有實現md5的方式認證。如果你想采用密碼認證,最好是采用md5的方式。

Ident(這種稱爲映射認證),顧名思義,它會將數據庫用戶映射爲某種用戶。比如說:local all all indent sameuser,將會數據庫用戶與操作系統用戶映射起來。如果大家用過WINDOWS的MS SQL SERVER肯定不會對這個感到陌生了。windows2000 server和ms sql server裏的由windows2000 server管理數據庫登錄和這個就是一樣的道理。因此在數據庫的新安裝中(RPM包安裝中),你都會以一個新建的系統用戶來試問數據庫就是這個道理。如果是從網上下載自行編譯的版本,它的默認方式是trust,可以不用新建系統用戶postgres來登錄入數據庫服務器。但是爲了有一個好的習慣,你應該還是新建一個系統用戶postgres來管理你的數據庫服務器。

第五、postgresql用戶的屬性:

postgresql的數據庫用戶可以使用SQL語言的CREATE USER 來建立的。如果需要建數立超級數據庫用戶,只需要這樣來建立:CREATE USER 用戶名 WITH PASSWORD CREATEUSER,這樣就可建立一個超級數據庫用戶了,如果你想使用戶有建立數據庫的能力,那麽你只需要將CREATEUSER 改爲:CRATEDB就行了。如果只建普通用戶就不需要帶這兩個選項了,至于普通用戶的權限可以通過GRANT和REVOKE來管理。也就是說在 postgresql裏預建的只有CREATEUSER和CREATEDB這兩種。可以使用ALTER USER來修改數據庫用戶的屬性。具體的命令用法請參考SQL手冊。

  首先在這裏先向sonicer和lanb兩位老兄說聲對不起了,沒辦法我現在在爲了生活不得不一天忙到晚,星期六星期天我也得回家不能出來,主要原因是因爲我快要做爸爸了,所以老婆在家需要人照顧,只有在上班的時候才會到網上來看看了。真是不好意思。   我們先來講講postgresql的用戶認證吧。   我想我們有必要明白以下幾個問題:   第一、postgresql的用戶和操作系統的用戶沒有任何直接的的關系。雖然在postgaresql的初始安裝中,它會有一個內建的超級用戶 postgres,而且它會建議你在操作系統中也新建一個用戶postgres用它來連接數據庫服務器和管理數據庫集群,但是這並不是必需要的。在啓動數據庫服務器之前,你必需先要安裝一個數據庫集群,也是初始化一個數據庫目錄,也就是按這個命令來做:initdb ,這個命令會初始化一個數據庫,它的用法如下:initdb -D 目錄名,這樣它就准備好了一個新的數據庫目錄,你現在可以用命令啓動數據庫了,postmaster -D 目錄,或者是用pg_ctl start -D 目錄名, 這個腳本來啓動數據庫用戶,啓動後你將進行第一次登錄,注意因爲在postgresql中預設是以ident sameuser這種方式來登錄的(幾種登錄的方式我們在下面講), 所以我們只有切換到我們預建的postgres 用戶下才能登錄進入數據庫服務器。   su postgres; psql template1; 這樣就登錄入數據庫服務器。但是這個認證方式是由所在的數據庫目錄裏的一個文件來pg_hba.conf來控制的。   第二、postgres在默認是不接受tcp/ip連接的。有兩種方式來控制它接受tcp/ip連接,一種是用啓動參數 -i ,另一種方式是修改數據庫目錄裏的文件:postgresql.conf中的參數,將tcpip_socket = false改爲true port = 5432 前面的注釋符號去掉。表示接受tcp/ip在5432的連接。   第三、關于pg_hba.conf這個文件:   這個文件是控制postgresql數據庫服務器登錄的關鍵。還記得我們第一條裏所做的第一次登錄嗎?在那裏我們是用的系統用戶postgres進行登錄的。爲什麽會這樣呢?我不用這個系統用戶登錄不行嗎?當然可以。我們可以看看psql這個客戶端的登錄語法:psql [-h 主機名] [-U 用戶名] [-W 密碼] 數據庫名 。 如果省略主機名,系統會認爲首先從本機連接,那麽它會采用unix socket的方式來進行連接,如果指定-h參數它會以TCP/IP的方式來進行連接,-U是登錄用戶名,-W 指定用戶密碼,可以不寫密碼系統會提示你要輸入密碼的。   所以當你啓動後,可以使用如下命令進行登錄(不需要切換到系統用戶postgres)   psql -h localhost -U postgres -W template1 當要你輸入密碼時,直接回接就行了。默認postgres用戶是沒有密碼的。如果不能登錄看我的配制文件:pg_hba.conf如果裏面的關于登錄的方法爲ident sameuser的話,就會提示錯誤,當然不並不影響我們的試驗。   第四:pg_hba.conf這個文件的語法與登錄認證的幾種方式:當我們打開這個文件的時候會看到如下的字句:   # TYPE DATABASE USER IP-ADDRESS IP-MASK METHOD   local all all trust   host all all 127.0.0.1 255.255.255.255 trust   ~   它的寫法上面已經有很清楚的介紹了,第一個域是登錄類型,主要由本地登錄和從別的主機上登錄兩種。第二個域表示要登錄的數據庫,第三個域是登錄的用戶,第四個是客戶登錄ip地址或者是網段,第四個則是了網掩碼了,第五個就是認證的方式及認證方式的先項了。   登錄的類型我們可以寫以下三種:local, host, hostssl ,   認證方式有這幾種:trusst (信任登錄),指定的這種登錄是不需要任何密碼的。只要存在這種用戶就可直接登錄:local all all trust   允許來來自本機任何合法的數據庫用戶登錄所有的數據庫(注意是數據庫用戶,而且是從本機登錄的)。   口令認證:這種認證方式有幾種寫種寫法:password, crypt, md5,這三種方式中password是以明碼方式傳遞密碼的。crypt在postgresql7.2.x以下用得較多,因爲它們沒有實現md5的方式認證。如果你想采用密碼認證,最好是采用md5的方式。   Ident(這種稱爲映射認證),顧名思義,它會將數據庫用戶映射爲某種用戶。比如說:local all all indent sameuser,將會數據庫用戶與操作系統用戶映射起來。如果大家用過WINDOWS的MS SQL SERVER肯定不會對這個感到陌生了。windows2000 server和ms sql server裏的由windows2000 server管理數據庫登錄和這個就是一樣的道理。因此在數據庫的新安裝中(RPM包安裝中),你都會以一個新建的系統用戶來試問數據庫就是這個道理。如果是從網上下載自行編譯的版本,它的默認方式是trust,可以不用新建系統用戶postgres來登錄入數據庫服務器。但是爲了有一個好的習慣,你應該還是新建一個系統用戶postgres來管理你的數據庫服務器。   第五、postgresql用戶的屬性:   postgresql的數據庫用戶可以使用SQL語言的CREATE USER 來建立的。如果需要建數立超級數據庫用戶,只需要這樣來建立:CREATE USER 用戶名 WITH PASSWORD CREATEUSER,這樣就可建立一個超級數據庫用戶了,如果你想使用戶有建立數據庫的能力,那麽你只需要將CREATEUSER 改爲:CRATEDB就行了。如果只建普通用戶就不需要帶這兩個選項了,至于普通用戶的權限可以通過GRANT和REVOKE來管理。也就是說在 postgresql裏預建的只有CREATEUSER和CREATEDB這兩種。可以使用ALTER USER來修改數據庫用戶的屬性。具體的命令用法請參考SQL手冊。
󰈣󰈤
王朝萬家燈火計劃
期待原創作者加盟
 
 
 
>>返回首頁<<
 
 
 
 
 熱帖排行
 
 
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有