简介
名词解释
名称 | 解释 |
---|---|
TCSEC | 可信计算机安全评估标准 |
TDI | 可信计算机安全评估标准在数据库管理系统中的解释 |
TCSEC
从四个方面将计算机安全分为七个级别
D(低)、C1、C2、B1、B2、B3、A1(高)
PostgreSQL 数据库安全体系
avatar- 首先通过用户标识和认证验证访问数据库用户的身份,判断其是否为合法用户及有权限访问数据库资源;
- 基于角色的访问控制(Role Based Access Control,RBAC),并使用存取控制列表(ACL)方法控制访问请求和保护信息;
PostgreSQL安全认证流程
- 客户端和服务器端Postmaster建立连接;
- 客户端发送请求信息到守护进程Postmaster;
- Postmaster 进程根据pg_hba.conf 文件的配置检查客户端是否可以连接,并把认证方式和必要信息发送到客户端;
- 客户端根据接收到的认证方式,发送相应的认证信息到Postmaster;
- 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)来认证。
认证模式
- 基于主机的认证,根据客户端的IP地址、用户名及要访问的数据库来查看配置文件从而判断用户的认证方式;
- 口令认证,包括加密和非加密认证;
- 操作系统认证,与操作系统集成完成用户认证,数据库允许操作系统用户不输入用户名和密码直接与数据库连接;
- 第三方认证,包括kerberos、ident认证。利用第三方服务器进行认证;
- 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;
网友评论