2025年9月25日: PostgreSQL 18 釋出!
支援的版本: 當前 (18) / 17 / 16 / 15 / 14 / 13
開發版本: devel
不支援的版本: 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1

createuser

createuser — 定義一個新的 PostgreSQL 使用者賬戶

概要

createuser [連線選項...] [選項...] [使用者名稱]

描述

createuser 建立一個新的 PostgreSQL 使用者(更準確地說,是一個角色)。只有超級使用者和具有 CREATEROLE 許可權的使用者才能建立新使用者,因此 createuser 必須由能夠連線為超級使用者或具有 CREATEROLE 許可權的使用者來呼叫。

如果您希望建立一個具有 SUPERUSERREPLICATIONBYPASSRLS 許可權的角色,您必須連線為超級使用者,而不僅僅是具有 CREATEROLE 許可權。超級使用者意味著能夠繞過資料庫內的所有訪問許可權檢查,因此不應輕易授予超級使用者訪問許可權。CREATEROLE 也授予了 非常廣泛的許可權

createuser 是一個包裝器,用於執行SQL命令 CREATE ROLE。透過此實用程式建立使用者與透過其他方法訪問伺服器來建立使用者之間沒有實際區別。

選項

createuser 接受以下命令列引數

使用者名稱

指定要建立的 PostgreSQL 使用者的名稱。此名稱必須與此 PostgreSQL 安裝中的所有現有角色都不同。

-a 角色
--with-admin=角色

指定一個現有的角色,該角色將自動新增為新角色的成員,並賦予其管理許可權,使其能夠將新角色的成員資格授予他人。可以透過編寫多個 -a 開關來指定多個現有角色。

-c 數字
--connection-limit=數字

為新使用者設定最大連線數。預設是不設定限制。

-d
--createdb

新使用者將被允許建立資料庫。

-D
--no-createdb

新使用者將被不允許建立資料庫。這是預設設定。

-e
--echo

回顯 createuser 生成併發送到伺服器的命令。

-E
--encrypted

此選項已過時,但為向後相容仍然接受。

-g 角色
--member-of=角色
--role=角色 (已棄用)

指定新角色應自動新增為指定現有角色的成員。可以透過編寫多個 -g 開關來指定多個現有角色。

-i
--inherit

新角色將自動繼承其成員角色的許可權。這是預設設定。

-I
--no-inherit

新角色將不會自動繼承其成員角色的許可權。

--interactive

如果命令列未指定使用者名稱,則提示輸入使用者名稱;並且還提示輸入命令列未指定的 -d/-D-r/-R-s/-S 中的任何一個。 (這是 PostgreSQL 9.1 及以前版本的預設行為。)

-l
--login

新使用者將被允許登入(即,使用者名稱可用作初始會話使用者識別符號)。這是預設設定。

-L
--no-login

新使用者將被不允許登入。(沒有登入許可權的角色仍然可以作為管理資料庫許可權的手段。)

-m 角色
--with-member=角色

指定一個現有的角色,該角色將自動新增為新角色的成員。可以透過編寫多個 -m 開關來指定多個現有角色。

-P
--pwprompt

如果給出,createuser 將會提示輸入新使用者的密碼。如果您不打算使用密碼認證,則這不是必需的。

-r
--createrole

新使用者將被允許建立、修改、刪除、註釋、更改其他角色的安全標籤;也就是說,該使用者將具有 CREATEROLE 許可權。有關此許可權所授予功能的更多資訊,請參閱 角色建立

-R
--no-createrole

新使用者將被不允許建立新角色。這是預設設定。

-s
--superuser

新使用者將成為超級使用者。

-S
--no-superuser

新使用者將不是超級使用者。這是預設設定。

-v 時間戳
--valid-until=時間戳

設定一個日期和時間,之後該角色的密碼將不再有效。預設是不設定密碼過期日期。

-V
--version

列印 createuser 版本並退出。

--bypassrls

新使用者將繞過所有行級安全 (RLS) 策略。

--no-bypassrls

新使用者將不會繞過行級安全 (RLS) 策略。這是預設設定。

--replication

新使用者將擁有 REPLICATION 許可權,更多資訊請參閱 CREATE ROLE 的文件。

--no-replication

新使用者將不會擁有 REPLICATION 許可權,更多資訊請參閱 CREATE ROLE 的文件。這是預設設定。

-?
--help

顯示關於 createuser 命令列引數的幫助資訊,然後退出。

createuser 還接受以下用於連線引數的命令列引數

-h 主機
--host=主機

指定伺服器執行所在計算機的主機名。如果值以斜槓開頭,則用作 Unix 域套接字目錄。

-p
--port=

指定伺服器正在監聽連線的 TCP 埠或本地 Unix 域套接字副檔名。

-U 使用者名稱
--username=使用者名稱

要連線的使用者名稱(不是要建立的使用者名稱)。

-w
--no-password

絕不發出密碼提示。如果伺服器需要密碼身份驗證且密碼不可用(例如透過 .pgpass 檔案),則連線嘗試將失敗。此選項在沒有使用者在場輸入密碼的批處理作業和指令碼中很有用。

-W
--password

強制 createuser 提示輸入密碼(用於連線到伺服器,而不是新使用者的密碼)。

此選項從不是必需的,因為如果伺服器要求密碼認證,createuser 將自動提示輸入密碼。但是,createuser 會浪費一次連線嘗試來發現伺服器需要密碼。在某些情況下,鍵入 -W 以避免額外的連線嘗試是值得的。

環境變數

PGHOST
PGPORT
PGUSER

預設連線引數

PG_COLOR

指定是否在診斷訊息中使用顏色。可能的值為 alwaysautonever

此實用程式以及大多數其他 PostgreSQL 實用程式也使用 libpq 支援的環境變數(請參閱 第 32.15 節)。

診斷

如果遇到困難,請參閱 CREATE ROLEpsql 以獲取有關潛在問題和錯誤訊息的討論。資料庫伺服器必須在目標主機上執行。此外,libpq 前端庫使用的任何預設連線設定和環境變數都將適用。

示例

要在預設資料庫伺服器上建立一個名為 joe 的使用者

$ createuser joe

要在預設資料庫伺服器上建立一個名為 joe 的使用者,並提示輸入一些額外的屬性

$ createuser --interactive joe
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) n
Shall the new role be allowed to create more new roles? (y/n) n

使用主機為 eden、埠為 5000 的伺服器,透過明確指定屬性來建立相同的 joe 使用者,並檢視底層命令

$ createuser -h eden -p 5000 -S -D -R -e joe
CREATE ROLE joe NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT LOGIN;

建立一個名為 joe 的使用者,並立即為其分配密碼

$ createuser -P -s -e joe
Enter password for new role: xyzzy
Enter it again: xyzzy
CREATE ROLE joe PASSWORD 'md5b5f5ba1a423792b526f799ae4eb3d59e' SUPERUSER CREATEDB CREATEROLE INHERIT LOGIN;

在上面的示例中,新密碼在輸入時實際上並未回顯,但為了清晰起見,我們顯示了輸入的內容。正如您所見,密碼在傳送到客戶端之前會進行加密。

提交更正

如果您在文件中看到任何不正確、與您實際使用該功能時的體驗不符或需要進一步澄清的內容,請使用 此表單 報告文件問題。