(本文章原始記錄於 2010 年 5 月 24 日)

******* createuser 及 dropuser 建立及刪除使用者 *******

  1. 使用 createuser 建立使用者

    createuser 指令的使用必須在已有 server 啟動的狀態下方能執行,否則會產生錯誤;
    基本上至少要設定三種權限,即是否為 superuser、是否可建立資料庫、是否可建立新使用者,superuser 擁有 PostgreSQL Cluster 的所有權限,包括建立資料庫及建立使用者等;下指令時若少了指定 [-s|-S] 或 [-r|-R] 或 [-d|-D] 或新使用者名稱時,就會進入互動式介面個別詢問,故簡單一點的建立使用者方式就是完全不設定 OPTION,直接下 createuser 指令後讓程式詢問。

    使用語法如下:
    C:\> createuser [OPTION] … [ROLENAME]

    其中常用的 option 有以下幾個:

    -d | -D 該使用者是否可以建立資料庫,是則用小寫的 d,否則用大寫的 D
    -r | -R 該使用者是否可以建立新使用者,是則用小寫的 r,否則用大寫的 R
    -s | -S 該使用者是否為 superuser,是則用小寫的 s,否則用大寫的 S
    -l | -L 該使用者是否可以登入,是則用小寫的 l,否則用大寫的 L
    -P 為新使用者設定密碼
    -E 建立的密碼要先經過編碼
    -N 建立的密碼不需經過編碼
    === 以下為連線選項,表示要指定到哪一個 PostgreSQL Cluster 上 ===
    -h HOST 指定主機名稱
    -p PORT 指定主機 port
    -U USER 指定由哪位使用者建立本使用者(必須擁有建立使用者的權限)
    -W 強制使用者輸入密碼作確認,若 initdb 時指定 -A password 的話,
    則不管是否有此選項都會要求使用者輸入密碼

    範例:
    C:\> createuser -s admin
    建立使用者 admin,並給予其 superuser 權限

    C:\> createuser -d -S -R norm
    建立使用者 norm,並不給予 superuser 權限,
    且不給予建立使用者的權限,只給予建立資料庫的權限

    C:\> createuser -d -S -r norm
    建立使用者 norm,並給予建立使用者及建立資料庫的權限,但並不給予 superuser 權限

    C:\> createuser -d -S -R -U admin norm
    以 admin 帳號來新增使用者 norm,不給予 superuser 及建立新使用者的權限,
    只給予建立資料庫的權限

    若 initdb 初始化 Cluster 檔案時有指定 -A password 強制要輸入密碼才能登入時,
    則 createuser 時一定要用 -U 指定一位擁有建立使用者權限的使用者來建立新使用者,
    並加上 -P 為新使用者設定密碼,這樣新使用者才能登入 PostgreSQL,
    否則還要由建立者進入 psql 後下 SQL 的 ALTER USER 指令,
    (ALTER USER <user> WITH PASSWORD ‘<password for user>’)
    或者用 \password <user> 修改該使用者密碼後才能登入。

    關於 createuser 的用法可以參考 C:\> createuser --help

  2. 使用 dropuser 刪除使用者

    同 createuser 指令,必須在已有 server 啟動的狀態下方能執行,否則會產生錯誤;
    同 createuser 指令,若 initdb 初始化 Cluster 檔案時有指定 -A password,
    則在 dropuser 時必須用 -U 指定一位擁有建立使用者權限的使用者來刪除使用者。

    使用語法如下:
    C:\> dropuser [OPTION] … [ROLENAME]

    其中常用的 option 有:

    -i 刪除前再詢問一次是否確定要刪除該使用者
    === 以下為連線選項,表示要指定到哪一個 PostgreSQL Cluster 上 ===
    -h HOST 指定主機名稱
    -p PORT 指定主機 port
    -U USER 指定由哪位使用者刪除本使用者(必須擁有建立使用者的權限)
    -W 強制使用者輸入密碼作確認,若 initdb 時指定 -A password 的話,
    則不管是否有此選項都會要求使用者輸入密碼

    範例:
    C:\> dropuser -i norm
    刪除使用者 norm,並在刪除之前再詢問一次

    C:\> dropuser -U admin norm
    以 admin 帳號來刪除使用者 norm

    關於 dropuser 的用法可以參考 C:\> dropuser --help

  3. createuser 及 dropuser 的動作,可以用擁有建立使用者權限的帳號登入 psql 後,
    直接下 SQL 指令 CREATE USER <user>DROP USER <user> 來達成。