Каталог статей
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) Создайте пользователя с правами только для чтения
- Создайте пользователя с именем 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, чтобы перезагрузить файл конфигурации.