1. 程式人生 > >PostgreSQL 使用者和許可權管理

PostgreSQL 使用者和許可權管理

預設使用者

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 USERCREATE 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_typetable_name含義與GRANT指令中相同。

使用者組

在postgres中使用者實際上是role,同時組也是role。 包含其他rolerole就是組。

  • 建立組示例:
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本身,組的成員並不會被刪除。