postgres用户权限管理

一、用户权限管理

1.1 创建用户并授权

postgre中主要有create role和create user两个语法来创建角色或者用户,两者从功能上来讲基本一致,create user是create role的变种,唯一的区别是 create user 中默认为login,而create role默认为nologin。

1、create user语法

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权限之外的权限,如创建DB

alter user sansi_rw with  CREATEDB;

1.2 postgres用户登录验证

1、pg_hba.conf文件

pg_hba.conf文件为pg的认证配置文件,无论是我们用户登录还是主从复制,都需要在该文件下填写相关的认证配置,保证可正常联通数据库。pg_hba.conf主要由5个参数组成:Type(主机类型)、Database(数据库名)、User(用户名)、Address(IP地址和掩码)、 Method(加密方法)

1)Type:指定允许的连接方式

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

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

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

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

2)Database : 指定允许访问数据库信息

可以为 “all”, “sameuser”, “samerole”, “replication”,或者业务数据库名称。“all"并不包括"replication”,若需要方通replication需要单独编写放通规则;多个数据库使用逗号分隔

3)User : 指定允许用户

表示认证配置的数据库用户信息,可以为"all"也可以指定某个数据库用户,多个用户授权可使用逗号分隔;可引用外部文件中配置信息信息认证配置,@${filename}

4)Address : 指定允许主机IP信息

表示认证配置的主机IP信息,可以是一个主机名,也可以是IP+掩码;0.0.0.0/0表示所有主机

5)Method : 指定认证策略

表示认证策略,可以设置为"trust", “reject”, “md5”, “password”, “scram-sha-256”, “gss”, “sspi”, “ident”, “peer”, “pam”, “ldap”, “radius” or “cert”;password表示以明文方式发送密码;

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
今日推荐