當談到開源數據庫時,MySQL獲得了業界大部分的注意力,IT168之前也曾報道過《開源數據庫受熱捧 MySQL數據庫繼續流行》。MySQL是一個易於使用的數據庫,同時有許多開源的Web應用程序都是直接在它上面開發的。不過也有異樣的聲音,比如PostgreSQL創始人:MySQL衰退屬必然。
另外一種主要的開源數據庫是PostgreSQL,雖然它也是眾所周知的,但是卻沒有獲得像MySQL所得到的認可。這是很不幸的,因為在這兩者中,相比MySQL,PostgreSQL能提供更加安全、更加可靠、數據也更加完整的服務。
但是,這同樣也有一定的缺陷。PostgreSQL對於設置和使用的要求比較高,它利用的是特殊權限、底層操作系統的安全性以及數據庫內提供的角色(roles)和特權。如果你對這些東西不夠了解的話,會使得PostgreSQL的使用變得困難。但一旦你掌握了它們,你就可以像使用MySQL一樣很容易的使用PostgreSQL。
與MySQL相類似,PostgreSQL的工作基於這樣一種原則,即特定的用戶有特定的數據訪問權限。在PostgreSQL裡,這些被稱之為“角色(roles)”,通過采用CREATE ROLE, ALTER ROLE, and DROP ROLE這些語句可以創建和管理它們。和MySQL不同的是,這些“角色”可以映射和綁定到系統的用戶,這就意味著它可以利用不同形式的體系認證:ident server authentication、LDAP server authentication、PAM和Kerberos。而對於本地連接,你也可以通過使用這些文件體系的權限來確定誰可以訪問Unix域套接字,以及它的位置。
這就允許系統用戶“joe”作為“joe”或者“ecommerce.”來訪問數據庫。它也允許系統“postgres”用戶以“joe”的身份連接到數據庫。同時強化對於名字為“esite”識別方法的映射類型,如在pg_ident.conf中所定義的那樣。這就意味著在本地類型(Unix域套接字)和本地TCP/IP地址(127.0.0.1)中,只有joe和postgres能夠連接到數據庫。沒有其他的用戶有權來訪問它。
這種識別方法是一種很好的方式,用於控制哪一個本地用戶可以連接到哪一個數據庫。這種方法只對本地主機(TCP/IP 或者UNIX 域套接字)的連接起作用,而對於遠程控制是無效的。
雖然對於那些習慣使用MySQL的人來說這看起來似乎有點混亂,但目前對具有這種認證精度的數據庫的需求確是實實在在的。MySQL只支持基於登錄證書的身份驗證,而這些證書只由數據庫本身進行儲存和管理。
另一方面,PostgreSQL不僅允許這種采用密碼機制的身份驗證,而且允許采用無密碼的身份驗證。這些驗證機制包括像討論的認證機制、PAM(其中規定了許多有意思的驗證方案)以及LDAP 和 Kerberos。Kerberos是一種在MySQL使用多年的方式(事實上,出現於2004年11月的MySQL錯誤#6733就需要得到Kerberos的支持)。許多公司的偏好Kerberos和LDAP密碼存儲目錄,這就使得PostgreSQL成為了一個引人關注的數據庫。
還有其他很多特色使得PostgreSQL更加適用於企業。雖然安全性很重要,但除此之外PostgreSQL對於數據完整性、訪問控制、ACID規則以及其他一些重要方面的關注和支持,都很好的解釋了在眾多的數據庫管理者中為什麼PostgreSQL享有如此高的贊譽。