你应该知道的数仓安全——安全认证

举报
zhangkunhn 发表于 2021/03/19 20:52:37 2021/03/19
【摘要】 安全认证是识别用户身份并允许用户登录的过程,是用户使用数据库的第一步。用户可以通过口令认证、LDAP认证、IAM认证等方式实现身份认证并登录数据库。介绍了与口令认证有关的一些知识,包括口令的存储方式、口令的有效期和实现口令强制修改的方法。

你应该知道的数仓安全——安全认证

从两个英语单词开始

AuthenticationAuthorization两个英语单词看起来相似,含义却不同。Authentication指的是认证,用来证明你是你。Authorization指的是授权,可以让你有权限做哪些操作。通常对用户的检查分为两步:第一步检查用户是否是他自己,即认证过程;第二步,检验用户是否有权限访问数据库对象,即授权和权限检查过程。在你应该知道的数仓安全——默认权限实现共享schema一文中,我们介绍了权限。本次我们讨论的主题是安全认证。


安全认证是什么

安全认证指定了用户进入数据库的方式,即需要提供哪种凭证。在生活中,我们需要有钥匙才能打开家门,进入家中;使用手机时需要提供密码、指纹、人脸才能进入手机系统。在数据库系统中,用户也需要提供相应的凭证才能进入。用户在认证成功之前不允许执行任何数据库操作。常见的认证方式有口令认证,LDAP认证,IAM认证等。

  • 口令认证

口令认证指的是用户输入password,日常交流中常称为密码,严格来说应该为口令。口令通过加密方式存储在数据库系统表pg_authid中。当用户输入口令时,对用户输入的口令加密后与pg_authid中存储的口令密文比较,比较成功后允许用户登录;否则报错,禁止用户登录。

  • LDAP认证

LDAP认证类似于password,不过是将用户输入的用户名和口令传给指定的AD服务器,AD服务器验证用户名和口令,验证通过后告知数据库系统,数据库系统允许用户登录;否则报错,禁止用户登录。也就是说将用户名和口令的验证过程放在AD服务器上进行。

  • IAM认证

当使用JDBBC连接集群时,可以使用IAM认证。在JDBC连接中配置IAM用户名和用户凭据,用户通过自动生成的临时凭据连接到数据库。详见使用IAM认证方式连接集群

image.png


口令认证详解

由于用户名/口令认证使用的广泛性,接下来详解介绍用户名/口令认证的使用。

  • 用户口令的存储方式

使用show password_encryption_type可以查看密码的加密方式。当password_encryption_type=1是表示采用sha256方式对密码加密,兼容postgres客户端的MD5用户认证方式。password_encryption_type=2表示采用sha256方式对密码加密,此时不兼容postgres开源驱动和开源客户端。使用postgres开源生态工具连接会出现报错,连接GaussDB(DWS)出现如下报错:

The authentication type 10 is not supported.

Invalid or unsupported by client SCRAM mechanisms。

报错后请参见连接GaussDB(DWS)报错authentication或mechanisms不支持如何处理?

  • 用户口令的有效期

使用show password_effect_time可以查看用户口令的有效天数,默认是60天。在用户口令设置后,60天后用户需要修改口令。在password_notify_time(默认是7天)的时候,会提醒用户修改口令。如果用户修改口令,提醒会消失;否则会一直提醒到用户修改口令为止。

[]$ gsql -d testdb -U test_user -r
Password for user test_user: 
NOTICE : 6.6 days left before password deadline, please change the password. 
testdb=> 

可以看出password_effect_time是建议口令修改的时间,不强制用户口令修改。如果用户不修改口令,使用当前口令仍然可以登录。那么有没有办法强制用户修改口令,如果用户口令到期不修改不让其登录呢?

  • 用户口令强制修改

在创建用户时可以通过CREATE USER PASSWORD EXPIRATOIN period来指定用户口令的过期天数,在口令过期之前用户必须及时修改口令。口令过期之后,用户将无法登录,需要请管理员设置新的口令后登录。

--创建一个用户,口令有效期是7天。 
testdb=# CREATE user test_user2 PASSWORD '*******' PASSWORD EXPIRATION 7; 

在用户登录时,在password_notify_time时间以内,会警告用户修改口令。

[]$ gsql -d testdb -U test_user2 -r
Password for user test_user2: 
WARNING: 7.0 days before the login is forbidden, please change the password. 
testdb=> 

如果用户不修改口令,当口令过期后会出现登录失败。

[]$ gsql -d testdb -U test_user2 -r
Password for user test_user2: 
gsql: FATAL:  The password of user "test_user2" has expired.

总结

安全认证是识别用户身份并允许用户登录的过程,是用户使用数据库的第一步。用户可以通过口令认证、LDAP认证、IAM认证等方式实现身份认证并登录数据库。介绍了与口令认证有关的一些知识,包括口令的存储方式、口令的有效期和实现口令强制修改的方法。
image.png

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。