PostgreSQL数据库安全

简介

名词解释

名称 解释
TCSEC 可信计算机安全评估标准
TDI 可信计算机安全评估标准在数据库管理系统中的解释

TCSEC

从四个方面将计算机安全分为七个级别
D(低)、C1、C2、B1、B2、B3、A1(高)

PostgreSQL 数据库安全体系

PostgreSQL数据库安全_第1张图片
avatar
  • 首先通过用户标识和认证验证访问数据库用户的身份,判断其是否为合法用户及有权限访问数据库资源;
  • 基于角色的访问控制(Role Based Access Control,RBAC),并使用存取控制列表(ACL)方法控制访问请求和保护信息;

PostgreSQL安全认证流程

  1. 客户端和服务器端Postmaster建立连接;
  2. 客户端发送请求信息到守护进程Postmaster;
  3. Postmaster 进程根据pg_hba.conf 文件的配置检查客户端是否可以连接,并把认证方式和必要信息发送到客户端;
  4. 客户端根据接收到的认证方式,发送相应的认证信息到Postmaster;
  5. Postmaster 调用认证模块对客户端发送的认证信息进行认证,如果认证通过,初始化一个Postgres进程与客户端进行通信,否则拒绝继续会话,关闭连接。

认证方式

  • trust:无条件的允许连接;
  • reject:无条件的拒绝连接;
  • md5:要求客户端提供一个MD5加密的口令进行认证,服务端需要发送一个随机数给客户端,客户端用该随机数对密码进行MD5单向加密;
  • password:要求客户端提供一个未加密的口令进行认证;
  • gss:通过GSSAPI认证用户,只有在进行TCP/IP连接的时候才能使用;
  • sspi:通过SSPI认证用户,只有在windows下才能使用;
  • krb5:用Kerberos V5认证用户,只有在进行TCP/IP连接时才能使用;
  • ident:获取客户端的操作系统用户名,通过映射文件pg_ident.conf(记录操作系统用户和数据库用户的映射关系)来判断操作系统用户是否可以访问数据库。
  • ldap:使用LDAP进行认证;
  • cert:通过SSL客户端进行认证;
  • pam:使用操作系统的可插入认证模块服务(PAM)来认证。

认证模式

  1. 基于主机的认证,根据客户端的IP地址、用户名及要访问的数据库来查看配置文件从而判断用户的认证方式;
  2. 口令认证,包括加密和非加密认证;
  3. 操作系统认证,与操作系统集成完成用户认证,数据库允许操作系统用户不输入用户名和密码直接与数据库连接;
  4. 第三方认证,包括kerberos、ident认证。利用第三方服务器进行认证;
  5. SSL加密

pg_authid

PostgreSQL将用户认证信息存放与该系统表中。通过以下SQL语句创建或则修改

    CREATE USER XXX WITH PASSWORD 'passwd'
    ALTER USER XXX WITH PASSWORD 'passwd'

基于角色的权限管理

将权限授予某个角色,再将角色赋予用户

PostgreSQL中角色和用户使用相同的结构,差别是角色无LOGIN权限。

角色可以拥有不同的对象。

权限

  • 系统权限,系统规定用户使用数据库的权限
    • 连接数据库
    • 创建数据库
    • 创建用户
    • ...
  • 对象权限,在数据库对象(数据库、表、序列等)上执行特殊动作的权限
    • SELECT
    • INSERT
    • UPDATE
    • DELETE
    • ...

可以通过:GRANT UPDATE ON table TO user 语句来授予某用户在某对象上的权限

角色属性

属性名称 说明
LOGIN 具有LOGIN属性的角色才能作为可以连接数据库的用户
SUPERUSER 具有该属性的角色拥有系统最高权限
CREATEDB 是否可以创建数据库
CREATEROLE 是否可以创建新角色
PASSWORD 设置角色的口令
INHERIT 是否集成它所属角色的权限
CONNECTION LIMIT 该角色可以使用的并发连接数量

使用SQL命令创建角色:CREATE ROLE xxx WITH CREATEROLE CREATEDB,或则通过ALTER ROLE 修改该角色

数据库集创建时默认有一个超级用户,超级用户名为创建该数据库集出的操作系统用户

角色相关系统表

pg_authid:

  • rolname, name,
  • rolsuper, bool
  • rolinherit, bool,自动集成其所属组角色的权限
  • rolcreaterole, bool
  • rolcreatedb, bool
  • rolcatupdate, bool,是否可以直接更新系统表
  • rolcanlogin, 是否可以登录,可以登陆既是用户
  • rolconnlimit,int4
  • rolpassword,text,
  • rolvaliduntil, timestamptz,口令的失效时间
  • rolconfig,text

pg_role: 为pg_authid 可读部分的视图

pg_auth_members

存储角色之间的成员关系。使用GRANT/REVOKE添加删除角色成员

  • roleid,oid,父角色的oid
  • member,oid,子角色的oid
  • grantor,oid,建立此关系的角色oid
  • admin_option, bool, member是否可以把roleid的成员关系赋予其它角色

对象访问控制

ACL 访问控制列表

typedef struct AclItem{
    Oid ai_grantee;
    Oid ai_grantor;
    AclMode ai_privs; //ai_grantee 所拥有的权限
}AclItem;

你可能感兴趣的:(PostgreSQL数据库安全)