postgre 用戶權限管理


PostgreSQL 用戶和權限管理

創建
CREATE ROLE rolename;
CREATE USER username;
CREATE USER和CREATE ROLE的區別在於,CREATE USER指令創建的用戶默認是有登錄權限的,而CREATE ROLE沒有。

創建用戶時設定用戶屬性

基本語法格式
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;

 

應用

create user zabbix ;
create database zabbix owner zabbix;
alter user zabbix password zabbix;
grant all on DATABASE zabbix to zabbix;

COMMENT ON DATABASE zabbix is 'used for  zabbix data store'

 

參考:https://www.cnblogs.com/zhangeamon/p/8990232.html

https://www.cnblogs.com/lottu/p/12916046.html

 

目錄:

  一、在默認配置條件下,本機訪問PostgreSQL

  二、創建新用戶來訪問PostgreSQL

  三、最簡單的做法

  四、開啟遠程訪問

 

一、在默認配置條件下,本機訪問PostgreSQL

切換到Linux用戶postgres,然后執行psql:

$ su - postgres

Last login: Wed Mar 1 13:16:48 CST 2017 on pts/1
-bash-4.2$ psql

psql (9.2.18)
Type "help" for help.

postgres=#

此時就在數據庫postgres中了。

使用 psql -d [databasename] 可登錄其他數據庫。

注意:執行psql命令時,必須確認已配置postgresql的環境變量。

 

二、創建新用戶來訪問PostgreSQL

1、如上所述,先切換到Linux用戶postgres,並執行psql:

$ su - postgres

-bash-4.2$ psql

postgres=#

現在位於數據庫提示符下。

2、創建數據庫新用戶,如 dbuser:

postgres=# CREATE USER dbuser WITH PASSWORD '*****';

注意:

  1. 語句要以分號結尾。
  2. 密碼要用單引號括起來。

3、創建用戶數據庫,如exampledb:

postgres=# CREATE DATABASE exampledb OWNER dbuser;

4、將exampledb數據庫的所有權限都賦予dbuser:

postgres=# GRANT ALL PRIVILEGES ON DATABASE exampledb TO dbuser;

5、使用命令 \q 退出psql:

postgres=# \q

6、創建Linux普通用戶,與剛才新建的數據庫用戶同名,如 dbuser:

$ sudo adduser dbuser

$ sudo passwd dbuser

7、以dbuser的身份連接數據庫exampledb:

$ su - dbuser

Password: 
Last login: Wed Mar 1 11:52:07 CST 2017 on pts/

[dbuser@master ~]$ psql -d exampledb

 

 三、最簡單的做法

以你的普通Linux用戶名,在數據庫中創建同名的用戶和數據庫,如xxf,然后就可以本機直接連接到數據庫xxf了。

~> su - postgres
Password: 
Last login: Wed Mar 1 13:19:02 CST 2017 on pts/1
-bash-4.2$ psql
psql (9.2.18)
Type "help" for help.

postgres=# create user xxf with password '******';
CREATE ROLE
postgres=# create database xxf owner xxf;
CREATE DATABASE
postgres=# grant all privileges on database xxf to xxf;
GRANT
postgres=# \q
-bash-4.2$ exit
logout
~> psql
psql (9.2.18)
Type "help" for help.

xxf=>

至此,就在數據庫xxf中了。 

 

四、開啟遠程訪問

1、編輯配置文件

文件:postgresql.conf

位置:/var/lib/pgsql/data/postgresql.conf

添加/修改:在所有IP地址上監聽,從而允許遠程連接到數據庫服務器:

listening_address: '*'

 

文件:pg_hba.conf

位置:/var/lib/pgsql/data/pg_hba.conf

添加/修改:允許任意用戶從任意機器上以密碼方式訪問數據庫,把下行添加為第一條規則:

host    all             all             0.0.0.0/0               md5

 

2、重啟數據庫服務:

$ sudo systemctl restart postgresql

 

3、此后即可從其它機器上登錄,例如用Navicat for PostgreSQL:

主機名或IP: 172.*.*.*

端口:          5432

初始數據庫: xxf

用戶:          xxf

密碼:          ******  (數據庫用戶xxf的密碼,不是Linux用戶xxf的密碼)

 

https://www.cnblogs.com/zhangeamon/p/8990232.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM