PostgreSQL 使用者和許可權管理
阿新 • • 發佈:2019-01-25
預設使用者
postgres安裝完成後,會自動在作業系統和postgres資料庫中分別建立一個名為postgres
的使用者以及一個同樣名為postgres
的資料庫。
登入
- 方式1:指定引數登入
psql -U username -d database_name -h host -W
引數含義:
-U
指定使用者-d
要連線的資料庫-h
要連線的主機-W
提示輸入密碼。
- 方式2:切換到postgres同名使用者後登入
su username
psql
當不指定引數時
psql
使用作業系統當前使用者的使用者名稱作為postgres的登入使用者名稱和要連線的資料庫名。所以在PostgreSQL安裝完成後可以通過以上方式登入。
建立使用者
- 方式1:在系統命令列中使用
createuser
命令中建立
createuser username
- 方式2:在PostgresSQL命令列中使用
CREATE ROLE
指令建立
CREATE ROLE rolename;
- 方式3:在PostgresSQL命令列中使用
CREATE USER
指令建立
CREATE USER username;
CREATE USER
和CREATE ROLE
的區別在於,CREATE USER
指令建立的使用者預設是有登入許可權的,而CREATE ROLE
沒有。
\du
指令顯示使用者和使用者的使用者屬性
建立使用者時設定使用者屬性
- 基本語法格式
CREATE ROLE role_name WITH optional_permissions;
- 示例:在建立使用者時設定登入許可權。
CREATE ROLE username WITH LOGIN;
- 可以通過
\h CREATE ROLE
指令檢視全部可設定的管理許可權
修改使用者屬性
- 修改許可權的命令格式
ALTER ROLE username WITH attribute_options;
- 例如:可通過以下方式禁止使用者登入
ALTER ROLE username WITH NOLOGIN;
設定訪問許可權
- 語法格式如下:
GRANT permission_type ON table_name TO role_name;
- 例項:
GRANT UPDATE ON demo TO demo_role; --賦予demo_role demo表的update許可權
GRANT SELECT ON ALL TABLES IN SCHEMA PUBLIC to demo_role; --賦予demo_role所有表的SELECT許可權
- 特殊符號:
ALL
代表所訪問許可權,PUBLIC
代表所有使用者
GRANT ALL ON demo TO demo_role; --賦給使用者所有許可權
GRANT SELECT ON demo TO PUBLIC; --將SELECT許可權賦給所有使用者
\z
或\dp
指令顯示使用者訪問許可權。\h GRANT
顯示所有可設定的訪問許可權
撤銷使用者訪問許可權
- 語法格式如下:
REVOKE permission_type ON table_name FROM user_name;
其中
permission_type
和table_name
含義與GRANT
指令中相同。
使用者組
在postgres中使用者實際上是role
,同時組也是role
。 包含其他role
的role
就是組。
- 建立組示例:
CREATE ROLE temporary_users;
GRANT temporary_users TO demo_role;
GRANT temporary_users TO test_user;
- 切換ROLE
SET ROLE role_name; --切換到role_name使用者
RESET ROLE; --切換回最初的role
INHERIT
許可權:該屬性使組成員擁有組的所有許可權
ALTER ROLE test_user INHERIT;
刪除使用者和組
刪除使用者和組很簡單:
DROP ROLE role_name;
DROP ROLE IF EXISTS role_name;
刪除組role只會刪除組的role本身,組的成員並不會被刪除。