《PostgreSQL数据库内核分析》之数据安全(八)
【摘要】 本篇主要对《PostgreSQL数据库内核分析》一书中数据安全章节做简单介绍,包括PostgreSQL安全简介、用户标识和认证、基于角色的权限管理和对象访问控制四个方面做了介绍,并介绍了其他安全方面内容。
数据安全指保护数据库以防止未授权用户窃取、篡改和破坏数据库中数据信息的技术。通过用户标识和认证来验证访问数据库的用户身份,判断其是否为合法用户及是否有权限访问数据库资源,然后通过基于角色的访问控制,并使用存取控制列表方法控制访问请求和保护信息。
8.1PostgreSQL安全简介
PostgreSQL安全包括用户标识和认证、用户角色管理、数据库对象的访问控制等。
1.用户标识和认证
最外层的保护,防止非法用户连接数据库。
2.用户角色管理
简化权限管理过程,提高了权限管理的有效性和安全性。
3.数据库对象的访问控制
表、序列、数据库、函数、预言、模式和表空间等,用户对象的权限发生变更时,需要对用户在对象上的操作权限进行维护和更新。
数据安全大体分为一下几类:A级别:验证保护;B级:强制控制;C级:受控访问保护;D级:最小保护。C2是目前一般使用的安全级别。B1、B2一般是商用系统Oracle使用,B3是研究级别。PostgreSQL安全级别是C1(任意安全保护)。
PostgreSQL安全机制体系如下图所示:
图1 PostgreSQL安全机制体系
8.2用户标识和认证
客户端连接认证过程描述如下:
1)客户端和服务端的Postmaster进程建立连接
2)客户端发送请求到守护进程Postmaster
3)Postmaster根据请求信息检查配置文件pg_hba.conf是否允许该客户端连接,并把认证方式和必要信息发送给客户端
4)客户端根据收到的不同认证方式,发送相应的认证信息给Postmaster
5)Postmaster通用认证对客户端送来的认证信息进行认证。如果认证通过,初始化一个Postgres进程与客户端进行通信;否则拒绝继续会话,关闭连接。
客户端连接认证过程如下图所示:
图2 客户端连接认证过程
8.2.1客户端配置文件
pg_hba.conf文件,记录连接类型、客户端IP地址范围、数据库名、用户名、匹配参数的连接所使用的认证方法。
8.2.2认证方法
1.信任(Trust)认证:在服务器网络端有足够保护措施的环境里,PostgreSQL无条件允许连接。服务端完全信任该连接而无需用户名和密码,如:gsql -dpostgres -p25308 -r
2.口令认证:明文密码口令认证(Password)和加密口令(MD5)认证
3.Kerberos认证:适用于公共网络上进行分布计算的工业标准的安全认证系统。只提供安全认证,不加密在网络上传输的查询和数据。PostgreSQL支持Kerberos5
4.GSSAPI及SSPI认证:支持工业级安全API Windows平台下的SSPI和Unix、Linux平台下的GSSAPI,其中GSSAPI只有在TCI/IP连接时运行,SSPI认证也只有当服务器与客户端均在Windows上时运行。
5.基于身份(Ident)认证:获取客户端的操作系统用户名,并通过映射文件来判断操作系统用户名是否可以作为允许的数据库用户名来连接数据库。
6.LDAP认证:只用于用户名/口令对。
7.PAM认证:类似password。
8.cert认证:通过SSL客户认证记性认证,仅应用于SSL连接。
基于以上认证方法可归纳为集中认证模式:
1.基于主机的认证:服务端根据客户端IP地址、用户名及要访问的数据库来查看配置文件从而判断用户的认证方式。如果是trust认证,则直接通过认证。
2.口令认证:包括加密和非加密认证。
3.操作系统认证:与操作系统集成完成用户认证。
4.第三方认证:包括Kerberos认证和ident认证。
5.SSL加密:利用OpenSSL提供前后端进行安全连接的环境。
8.2.3客户端认证
PostgreSQL客户端认证通过 调用ClientAuthentication函数完成,该函数只有一个类型为Port的参数,该参数包括客户端主机名、端口、用户名、数据库等。
8.3基于角色的权限管理
PostgreSQL实现基于角色的访问控制机制,大大简化了对权限的授权管理。
8.3.1用户和角色
PostgreSQL来说用户和角色是完全相同的两个对象,唯一不同的是创建时角色的缺省值中没有LOGIN权限。也就是说拥有LOGIN权限的角色就是一个用户。
PostgreSQL系统中的权限分为两种:系统权限和对象权限。
系统权限:系统规定用户使用数据库的权限,如连接数据库、创建数据库、创建用户等。
对象权限:在表、序列、函数等数据库对象上执行特殊动作的权限。如select、insert、update、delete、等
8.3.2角色相关的系统表
角色属性在pg_authid系统表中,系统表pg_auth_members存储了角色之间的成员关系。
8.3.3角色管理
角色的创建、修改、删除、授权、回收等。
8.4对象访问控制
对象权限检查:用户对数据库对象进行操作前,必须检查用户在该对象上的操作权限,仅当用户对此对象拥有进行合法操作的权限时,才允许对此对象执行响应操作。
8.4.1访问控制列表(Access Control List,ACL)
PostgreSQL通过操作ACL实现对象的访问控制管理。在PostgreSQL中,每个数据库对象都具有ACL,每个对象的ACL存储了此对象的所有授权信息。当用户访问对象时,只有它在对象的ACL中并且具有所需的权限时才能访问该对象,当用户要更新对象的权限时,只需更新ACL上的权限信息即可。ACL是存储控制项(Access Control Entruy,ACE)的集合。
8.4.2对象权限管理
对象权限管理主要通过使用SQL命令GRANT/REVOKE授予或回收有一个或读个角色在对象上的权限。
8.4.3对象权限检查
检查数据库对象上权限,只有拥有权限才可才对象进行操作。
8.5其他
1.数据库database、schema、table/view各个对象包含的权限如下图所示:
图3 权限定义
2.PostgreSQL使用RFC5802口令方案。
3.创建用户时会同步创建一个同名schema,但也可以通过create role eldu login password 'Gauss_234';创建用户不会创建同名schema,并且和create user语法创建用户使用方法一致;基于角色的用户管理(Role-Based Access Control,简称RBAC)是通过为角色赋予权限,用户通过成为 适当的角色而得到这些角色的权限。
4.其他GaussDB安全相关内容:
小结:本篇通过PostgreSQL安全简介、用户标识和认证、基于角色的权限管理和对象访问控制四个方面做了介绍,GaussDB(DWS)安全方面与PostgreSQL类似,通常在实际使用中为了更加安全往往使用三权分立(系统管理员、安全管理员和审计管理员,三权分立参见GaussDB(DWS) 数据库安全设置之三权分立。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
评论(0)