修改密碼
在上一節(jié)中我們講了兩種連接PostgreSQL的方式酵熙,分別是命令行連接和圖形界面連接蒜埋。這里不知道大家有沒有發(fā)現(xiàn)一個(gè)問題,就是不管是在命令行連接或者是圖形界面連接的時(shí)候,我們都沒有要求大家設(shè)置密碼或者輸入密碼议惰?
這是因?yàn)椋赑ostgreSQL安裝完成后乡恕,我們使用/usr/pgsql-9.6/bin/postgresql96-setup initdb
命令進(jìn)行初始化的時(shí)候言询,并沒有通過這個(gè)命令指定初始用戶postgres的密碼俯萎。當(dāng)我們在服務(wù)器命令行界面使用peer認(rèn)證直接登陸時(shí),沒要求我們輸入密碼运杭。但是要記住夫啊,這樣使用數(shù)據(jù)庫是非常危險(xiǎn)的,特別是你的數(shù)據(jù)庫布置在云服務(wù)器的時(shí)候辆憔,很可能分分鐘就被黑掉撇眯。在圖形界面連接的時(shí)候,我們還設(shè)置了使用trust認(rèn)證方式虱咧,這種方式默認(rèn)允許不使用密碼即可進(jìn)行連接熊榛,也是非常危險(xiǎn)的。為了避免這些意外情況腕巡,我們今天來介紹一下如何設(shè)置以及修改用戶的密碼来候。
1. 初始化時(shí)設(shè)置密碼
當(dāng)使用rpm包或PostgreSQL的官方y(tǒng)um源安裝好PostgreSQL以后,不要使用/usr/pgsql-9.6/bin/postgresql96-setup initdb
命令進(jìn)行初始化逸雹。而是使用initdb
命令营搅。這個(gè)命令的用法如下:
initdb [命令選項(xiàng)] [--pgdata | -D] 目錄名
常用命令選項(xiàng)有:
-A method:設(shè)置認(rèn)證方式,比如method的值可以是peer梆砸、ident转质、md5、trust等值
--auth-host=method:這個(gè)選項(xiàng)用來設(shè)置遠(yuǎn)程主機(jī)連接的認(rèn)證方法
--auth-local=method:這個(gè)選項(xiàng)用來設(shè)置本地主機(jī)連接的認(rèn)證方法
-E encoding:設(shè)置服務(wù)器端的編碼方式
-U user :設(shè)置服務(wù)器的超級用戶
--pwfile=filename:設(shè)置超級用戶的密碼文件帖世,從filename文件中的第一行讀取休蟹,一般用于設(shè)置比較復(fù)雜的密碼,或者用于自動(dòng)化處理日矫。
-W :后面不帶任何數(shù)值赂弓,表示在初始化時(shí)手動(dòng)輸入密碼。
-D/--pgdata:這個(gè)用來設(shè)置存放PostgreSQL數(shù)據(jù)庫文件和配置文件所在目錄哪轿。
介紹完這個(gè)命令的用法以后盈魁,我們嘗試使用這個(gè)命令來初始化數(shù)據(jù)庫并給postgres用戶設(shè)置一個(gè)密碼。這個(gè)命令是不能用root用戶來允許的窃诉,因此先切換到postgres用戶:
su - postgres
這個(gè)命令默認(rèn)是在/usr/pgsql-9.6/bin/目錄下杨耙,因此使用絕對路徑來允許這個(gè)命令:
/usr/pgsql-9.6/bin/initdb -A md5 -U postgres -W -D 9.6/data
在這個(gè)命令中,我們使用的是md5加密密碼飘痛,超級用戶是postgres珊膜,目錄是postgres用戶的家目錄下的9.6/data/目錄,完整路徑是/var/lib/psql/9.6/data/宣脉。執(zhí)行過程如下:
因?yàn)槲覀儧]有設(shè)置編碼模式车柠,從圖中我們可以看到默認(rèn)使用的是UTF8編碼,然后執(zhí)行過程中有讓我們輸入密碼,輸入密碼確認(rèn)以后竹祷,開始創(chuàng)建目錄介蛉,設(shè)置各種參數(shù)。配置完成以后還給出了啟動(dòng)PostgreSQL服務(wù)的命令:
/usr/pgsql-9.6/bin/pg_ctl -D 9.6/data -l logfile start
pg_ctl是postgresql自帶的管理工具溶褪,也是只能在普通用戶權(quán)限下執(zhí)行的命令币旧。這里我們先暫時(shí)不使用這個(gè)工具。初始完成以后猿妈,我們使用systemctl啟動(dòng)PostgreSQL服務(wù)器:
systemctl start postgresql-9.6
然后連接數(shù)據(jù)庫:
psql -U postgres
此時(shí)登錄就可以看到已經(jīng)要求你輸入賬號(hào)密碼了仰禽,輸入剛才我們初始化時(shí)設(shè)置的密碼枕扫,成功登陸。我們再看看配置文件pg_hba.conf,如下所示:
此時(shí)所有的默認(rèn)認(rèn)證方式都是我們剛才設(shè)置的md5認(rèn)證方式翩腐。說明設(shè)置成功幼东。
以上就是初始化時(shí)設(shè)置密碼的所有內(nèi)容颊糜,讀者還可以自己嘗試一下使用密碼文件的方式來設(shè)置密碼凑阶。
2. 初始化完成后修改密碼
如果使用的是默認(rèn)的初始化模式,則默認(rèn)使用的是peer和ident的認(rèn)證方式芬萍,配置好這兩種認(rèn)證方式以后尤揣,是不需要密碼就可以登陸。這時(shí)候可以先登陸到PostgreSQL服務(wù)器柬祠,然后修改密碼北戏。修改密碼有兩種方式:
- psql命令工具修改密碼
- PostgreSQL的SQL語句修改密碼
psql用來修改的命令工具是\password,命令行界面登錄成功以后漫蛔,輸入這個(gè)命令嗜愈,就可以直接修改當(dāng)前用戶的密碼。比如我們是postgres用戶登陸莽龟,輸入這個(gè)密碼則修改postgres的密碼蠕嫁,若是其他用戶,則修改其他用戶的密碼毯盈,如下所示:
連續(xù)輸入兩遍密碼剃毒,即成功修改,退出以后重新登陸時(shí)就需要輸入新密碼奶镶。
SQL語句用來修改密碼的格式如下:
ALTER USER username PASSWORD 'passwordtext';
我們修改postgres用戶的密碼就是這樣寫:
ALTER USER postgres PASSWORD 'postgres_pass'
修改成功后會(huì)提示ALTER ROLE迟赃,這里是為了給大家演示,才設(shè)置這樣的密碼厂镇,但是大家自己在使用的時(shí)候不要設(shè)置這種比較容易猜到的密碼。
密碼修改成功以后左刽,將配置文件里的認(rèn)證方式修改為md5認(rèn)證
然后重啟PostgreSQL服務(wù)器
systemctl restart postgresql-9.6
重啟完成后捺信,重新登陸就需要輸入密碼登陸了,不管是命令行登錄還是圖形工具登錄。
基本信息查看
正常登錄服務(wù)器以后迄靠,我們就可以查看服務(wù)器的一些基本信息了秒咨。目前登錄的用戶基本上都是postgres這個(gè)超級用戶,在后面講到用戶管理的時(shí)候掌挚,才會(huì)涉及到不同用戶對不同表的權(quán)限問題雨席,這里假設(shè)可以看到所有的內(nèi)容。
1. 查看服務(wù)器端版本信息
(1)通過psql命令查看吠式,命令是psql --version
(2)登錄后通過SQL語句查看陡厘,命令是:SELECT version()
這個(gè)命令查看的信息更詳細(xì),可以看到服務(wù)器版本特占,平臺(tái)型號(hào)糙置,編譯信息等。
2. 查看數(shù)據(jù)庫信息
(1)查看有多少數(shù)據(jù)庫是目,命令是:\l
剛初始化完成的數(shù)據(jù)庫只有3個(gè)數(shù)據(jù)庫谤饭,一個(gè)是postgres默認(rèn)數(shù)據(jù)庫,另外兩個(gè)是模板數(shù)據(jù)庫template0和template1懊纳,PostgreSQL支持?jǐn)?shù)據(jù)庫繼承揉抵,因此可以直接從模板繼承生成新的數(shù)據(jù)庫。template0是不可刪除的數(shù)據(jù)庫嗤疯,template1可以刪除功舀。template1刪除以后會(huì)自動(dòng)從template0繼承重新生成。
(2)查看數(shù)據(jù)庫上的表信息身弊,命令是:\d
辟汰,顯示當(dāng)前數(shù)據(jù)庫下的所有表:
默認(rèn)的postgres數(shù)據(jù)庫上沒有任何表信息,因此看到的是沒有找到關(guān)聯(lián)表的提示阱佛。而如果是已經(jīng)有很多表的數(shù)據(jù)庫帖汞,則顯示如下:
會(huì)顯示以后的所有表信息,包括表的模式凑术、名稱翩蘸、類型、所有者等等淮逊。如果想看表的具體信息催首,則命令是\d table_name
,比如想看上圖中的perm_account表的具體信息泄鹏,則命令是:
\d perm_account
會(huì)顯示出該表中的字段定義郎任、索引等詳細(xì)信息。
在上面的操作里备籽,我們從postgres數(shù)據(jù)庫切換到datacenter數(shù)據(jù)庫舶治,使用的命令格式是\c databasename
,從postgres切換到datacenter就是\c datacenter
:
提示中可以看到,是以postgres用戶的身份切換到datacenter數(shù)據(jù)庫霉猛,命令行前端也從postgres變成了datacenter尺锚。
(3)查看數(shù)據(jù)庫啟動(dòng)時(shí)間
通過函數(shù)來計(jì)算:
SELECT date_trunc('second', current_timestamp - pg_postmaster_start_time()) as uptime;
(4)查看數(shù)據(jù)庫占用的硬盤空間和表占用的硬盤空間
查看數(shù)據(jù)庫硬盤空間占用情況命令使用函數(shù)pg_database_size('databasename'),一般查看的是當(dāng)前數(shù)據(jù)庫惜浅,使用函數(shù)current_database():
SELECT pg_database_size(current_database());
這里顯示的單位是bytes瘫辩,如果想要更易理解的顯示,則需要另外一個(gè)函數(shù)pg_size_pretty()
坛悉,如下圖所示:
如果要看看其他數(shù)據(jù)庫伐厌,則命令是:
在
pg_database_size()
里加上數(shù)據(jù)庫名稱即可。
查看表所占用的空間使用函數(shù)pg_relation_size()
吹散,這個(gè)函數(shù)返回的是表內(nèi)所有數(shù)據(jù)所占用的硬盤空間弧械,而對于一張數(shù)據(jù)表來說,除了表內(nèi)的數(shù)據(jù)空民,還有根據(jù)表的字段建立的索引刃唐、視圖、臨時(shí)表等等信息界轩,如果要加上這些內(nèi)容的空間占用画饥,則需要使用pg_total_relation_size()
函數(shù)。如下圖所示:
可以看到浊猾,相同的一張表抖甘,帶有各種索引信息所占用的空間比純表要大很多。
總結(jié):
這一章里我們學(xué)習(xí)的內(nèi)容是如何給用戶設(shè)置密碼葫慎、如何配置用戶的認(rèn)證方式以及如何查看用戶的基本信息衔彻。
- 設(shè)置密碼分為兩種方式,分別是psql命令行形式和SQL語句形式
- 用戶認(rèn)證可以在初始化時(shí)進(jìn)行配置偷办,也可以在初始化完成后修改pg_hba.conf文件進(jìn)行配置
- 查看表的信息也是通過兩種方式艰额,一種是psql的命令行工具,例如
\l椒涯、\d柄沮、\c
等,另外一種是PostgreSQL提供的函數(shù)废岂,例如pg_relation_size()
等祖搓。這里要注意的一點(diǎn)是,PostgreSQL提供的函數(shù)如果帶參數(shù)時(shí)湖苞,要用引號(hào)將參數(shù)引起來否則會(huì)報(bào)錯(cuò)拯欧,如下所示,會(huì)提示表不存在袒啼。:
以上就是這一章的所有內(nèi)容哈扮。