你应该知道的数仓安全——安全认证
你应该知道的数仓安全——安全认证
从两个英语单词开始
Authentication和Authorization两个英语单词看起来相似,含义却不同。Authentication指的是认证,用来证明你是你。Authorization指的是授权,可以让你有权限做哪些操作。通常对用户的检查分为两步:第一步检查用户是否是他自己,即认证过程;第二步,检验用户是否有权限访问数据库对象,即授权和权限检查过程。在你应该知道的数仓安全——默认权限实现共享schema一文中,我们介绍了权限。本次我们讨论的主题是安全认证。
安全认证是什么
安全认证指定了用户进入数据库的方式,即需要提供哪种凭证。在生活中,我们需要有钥匙才能打开家门,进入家中;使用手机时需要提供密码、指纹、人脸才能进入手机系统。在数据库系统中,用户也需要提供相应的凭证才能进入。用户在认证成功之前不允许执行任何数据库操作。常见的认证方式有口令认证,LDAP认证,IAM认证等。
- 口令认证
口令认证指的是用户输入password,日常交流中常称为密码,严格来说应该为口令。口令通过加密方式存储在数据库系统表pg_authid中。当用户输入口令时,对用户输入的口令加密后与pg_authid中存储的口令密文比较,比较成功后允许用户登录;否则报错,禁止用户登录。
- LDAP认证
LDAP认证类似于password,不过是将用户输入的用户名和口令传给指定的AD服务器,AD服务器验证用户名和口令,验证通过后告知数据库系统,数据库系统允许用户登录;否则报错,禁止用户登录。也就是说将用户名和口令的验证过程放在AD服务器上进行。
- IAM认证
当使用JDBBC连接集群时,可以使用IAM认证。在JDBC连接中配置IAM用户名和用户凭据,用户通过自动生成的临时凭据连接到数据库。详见使用IAM认证方式连接集群。
口令认证详解
由于用户名/口令认证使用的广泛性,接下来详解介绍用户名/口令认证的使用。
- 用户口令的存储方式
使用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认证等方式实现身份认证并登录数据库。介绍了与口令认证有关的一些知识,包括口令的存储方式、口令的有效期和实现口令强制修改的方法。
- 点赞
- 收藏
- 关注作者
评论(0)