美文网首页
PostgreSQL数据库安全

PostgreSQL数据库安全

作者: 川人1588 | 来源:发表于2017-07-09 10:04 被阅读0次

    简介

    名词解释

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

    TCSEC

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

    PostgreSQL 数据库安全体系

    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数据库安全

          本文链接:https://www.haomeiwen.com/subject/akjshxtx.html