Управление правами пользователей Postgres

1. Управление полномочиями пользователей

1.1 Создайте пользователя и авторизуйтесь

Postgre в основном имеет два синтаксиса: создать роль и создать пользователя для создания ролей или пользователей. Оба в основном одинаковы с точки зрения функций. Создание пользователя - это вариант создания роли. Единственная разница в том, что по умолчанию для создания пользователя используется логин, и значение по умолчанию для создания роли для nologin.

1. Создайте пользовательский синтаксис

CREATE USER name [ [ WITH ] option [ ... ] ]

这里 option 可以是:
    | SUPERUSER | NOSUPERUSER							//是否为“超级账号”的权限,默认NOSUPERUSER
    | CREATEDB | NOCREATEDB								//是否可以创建数据库的权限,默认NOCREATEDB
    | CREATEROLE | NOCREATEROLE						//是否可以创建新用户的权限,默认NOCREATEROLE
    | INHERIT | NOINHERIT											//当该用户是其他用户的角色是,其他用户是否可以继承该用户的权限,默认INHERIT
    | LOGIN | NOLOGIN												//是否允许登录数据库,默认NOLOGIN
    | REPLICATION | NOREPLICATION						//是否具有复制相关权限,默认NOREPLICATION
    | BYPASSRLS | NOBYPASSRLS							//是否可以绕过安全策略,默认NOBYPASSRLS
    | CONNECTION LIMIT connlimit								//用户并发连接限制,默认-1表示无限制
    | [ ENCRYPTED ] PASSWORD 'password' | PASSWORD NULL	//用户密码设置
    | VALID UNTIL 'timestamp'										//密码失效日期
    | IN ROLE role_name [, ...]										//
    | IN GROUP role_name [, ...]									//是in role的一种已经废弃的写法
    | ROLE role_name [, ...]											//
    | ADMIN role_name [, ...]
    | USER role_name [, ...]
    | SYSID uid

2. Некоторые распространенные сценарии авторизации.

1) Создайте пароль учетной записи базы данных, учетная запись имеет разрешения на чтение и запись по умолчанию.

--创建用户并授权该用户
db1=# create user sansi_rw password '123';
CREATE ROLE

2) Создайте пользователя с правами только для чтения

  1. Создайте пользователя с именем sansi_ro и пароль 123
-- 创建只读数据库账号
CREATE USER sansi_ro WITH ENCRYPTED PASSWORD '123';
ALTER USER sansi_ro SET default_transaction_read_only=on;
-- 对只读数据库账号授予所有库把的usage权限
GRANT USAGE ON SCHEMA public to sansi_ro;
-- 进入到指定数据库,对只读账号授予该数据库下的查询权限
\c dbname
GRANT SELECT ON ALL TABLES IN SCHEMA public TO sansi_ro;

3) Предоставьте некоторые разрешения, отличные от разрешений DML, существующим пользователям, например, создание БД.

alter user sansi_rw with  CREATEDB;

1.2 проверка входа пользователя в postgres

1. файл pg_hba.conf

Файл pg_hba.conf - это файл конфигурации аутентификации для pg. Независимо от того, является ли это нашим логином пользователя или репликацией главный-подчиненный, нам необходимо заполнить соответствующую конфигурацию аутентификации в этом файле, чтобы обеспечить нормальное подключение к базе данных. pg_hba.conf в основном состоит из 5 параметров: Тип (тип хоста), База данных (имя базы данных), Пользователь (имя пользователя), Адрес (IP-адрес и маска), Метод (метод шифрования).

1) Тип: укажите разрешенный способ подключения

"local"表示使用 Unix-domain socket 进行连接;

"host" 表示可以使用 ssl或者非ssl加密的 TCP/IP socket 进行连接;

"hostssl" 表示必须通过ssl加密的 TCP/IP socket 进行连接;

"hostnossl" 表示通过使用非ssl的 TCP/IP socket 进行连接。

2) База данных: укажите разрешение на доступ к информации базы данных.

Это может быть «все», «тот же пользователь», «та же роль», «репликация» или имя бизнес-базы данных. «Все» не включает «репликацию». Если вам нужно пройти репликацию, вам нужно написать отдельное правило выпуска, несколько баз данных разделяются запятыми.

3) Пользователь: укажите разрешенных пользователей.

Представляет информацию о пользователе базы данных для конфигурации аутентификации. Это может быть "все" или может быть указан определенный пользователь базы данных. Множественные авторизации пользователей могут быть разделены запятыми; вы можете ссылаться на конфигурационную информацию о конфигурации аутентификации во внешнем файле, @ $ {имя_файла}

4) Адрес: укажите допустимую информацию об IP-адресе хоста.

Указывает IP-информацию хоста конфигурации аутентификации, которая может быть именем хоста или IP + маска; 0.0.0.0/0 означает все хосты

5) Метод: укажите стратегию аутентификации.

Указывает политику аутентификации, которая может быть установлена ​​на «trust», «reject», «md5», «password», «scram-sha-256», «gss», «sspi», «ident», «peer», «pam», «Ldap», «radius» или «cert»; пароль означает отправку пароля в виде обычного текста;

2. Справочник по написанию общих файлов конфигурации

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all				postgres					           	trust
local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
host    all             all             0.0.0.0/0               md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     trust
host    replication     all             127.0.0.1/32            trust
host    replication     all             ::1/128                 trust

[Local all postgres trust] Следует отметить, что эта запись имеет определенную степень опасности. Когда мы забываем пароль суперпользователя, мы можем добавить эту запись, войти в базу данных на сервере базы данных без пароля и изменить пароль от аккаунта. После изменения файла конфигурации не забудьте использовать pg_ctl -reload, чтобы перезагрузить файл конфигурации.

рекомендация

отblog.csdn.net/weixin_37692493/article/details/115017547