Chapter 17. 資料庫用戶和權限

Table of Contents
17.1. 資料庫用戶
17.2. 用戶屬性
17.3.
17.4. 權限
17.5. 函數和觸發器

每個資料庫集群都包含一個資料庫用戶的集合。 這些用戶是和那些在同一個伺服器上執行的操作系統的用戶相獨立的。 用戶擁有資料庫對像(比如說,資料表)以及可以把這些對象的權限賦予其它用戶,這樣就能控制誰可以訪問哪些對象。

本章描述如何建立和管理用戶,以及介紹權限系統。 有關各種類型的資料庫對像和權限的效果可以在 Chapter 5 中找到。

17.1. 資料庫用戶

資料庫用戶從概念上與操作系統用戶是完全無關的。 在實際使用中把它們對應起來可能比較方便,但不是必須的。 資料庫用戶名在整個資料庫集群中是全局的(而不是每個庫不同)。 要建立一個用戶,使用 SQL 命令 CREATE USER

CREATE USER name;

name 遵循 SQL 標識的規則: 要麼完全沒有特殊字元,要麼用雙引號引起。 要刪除一個現有用戶,使用類似的命令 DROP USER

DROP USER name;

為了方便,程序 createuserdropuser 提供了對了這些 SQL 命令的封裝。 我們可以在 shell 命令上直接調用它們:

createuser name
dropuser name

要判斷一套現有用戶,檢查 pg_user 系統資料表,比如

SELECT usename FROM pg_user;

psql 的元命令 \du 也可以用於列出現有用戶。

為了能初創資料庫系統,新建立的資料庫總是包含一個預定義的用戶。 這個用戶將有固定的 ID 1, 並且預設時(除非在執行 initdb 時更改過)他將和初始化該資料庫集群的用戶有相同的名稱。 通常,這個用戶叫postgres。 為了建立更多用戶,您必須首先以這個初始用戶身份連線。

一個和資料庫的活躍連接只能有一個用戶身份進行。 和特定資料庫連線的用戶名是由初始化連線請求的應用以應用相關的方式聲明的, 比如,psql 程序使用-U命令行選項聲明它代資料表的進行連線的用戶。 許多應用以目前操作系統的用戶名為預設(這樣的應用包括 createuserpsql)。 這樣我們就可以很方便地維護這兩個用戶集合之間地映射關係。

一個客戶端連線可以用來連線的資料庫用戶集合是由客戶認證設置決定的, 在 Chapter 19 裡面有解釋。 (因此,一個客戶端並不局限於以它的操作系統用戶同名的用戶進行連線, 就像您登錄系統的名稱不一定要是您的真實姓名一樣。) 因為用戶地身份決定了一個已連接地客戶端可用的權限, 所以在多用戶環境裡仔細配置這些內容是非常重要的。