绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
设置安全策略-设置密码安全策略
2020-01-14 11:45:43

操作步骤

用户密码存储在系统表pg_authid中,为防止用户密码泄露,GaussDB 200对用户密码进行加密存储,所采用的加密算法由配置参数password_encryption_type决定。

  • 当参数password_encryption_type设置为1时,表示采用sha256方式对密码加密。
  • 当参数password_encryption_type设置为0时,表示采用md5方式对密码加密。md5为不安全的加密算法,不建议使用。
  1. 以操作系统用户omm登录CN所在主机,执行source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile命令启动环境变量。
  2. 使用如下命令连接数据库。
    gsql -d postgres -p 25308
    postgres为需要连接的数据库名称,25308为CN的端口号。

    连接成功后,系统显示类似如下信息:

    gsql ((GaussDB Kernel V300R002C00 build 50dc16a6) compiled at 2019-01-29 05:49:21 commit 1071 last mr 1373)
    Non-SSL connection (SSL connection is recommended when requiring high-security)
    Type "help" for help.
    postgres=#

  3. 查看已配置的加密算法。
    SHOW password_encryption_type;
    password_encryption_type
    --------------------------
    1
    (1 row)

    如果显示结果为0,执行“\q”命令退出数据库。

  4. 执行如下命令将其设置为安全的加密算法。
    gs_guc reload -Z coordinator -D ${BIGDATA_DATA_HOME}/mppdb/data1/coordinator -c "password_encryption_type=1"
     注意:

    为防止用户密码泄露,在执行CREATE USER/ROLE命令创建数据库用户时,不能指定UNENCRYPTED属性,即新创建的用户的密码只能是加密存储的。

  5. 配置密码安全参数。

    • 密码复杂度

      初始化数据库、创建用户、修改用户时需要指定密码。密码必须要符合复杂度(password_policy)的要求,否则会提示用户重新输入密码。

      • 参数password_policy设置为1时表示采用密码复杂度校验,默认值。
      • 参数password_policy设置为0时表示不采用任何密码复杂度校验,设置为0会存在安全风险,不建议设置为0,即使需要设置也要将所有集群节点中的password_policy都设置为0才能生效。

      配置password_policy参数。

      1. 使用如下命令连接数据库。
        gsql -d postgres -p 25308
        postgres为需要连接的数据库名称,25308为CN的端口号。

        连接成功后,系统显示类似如下信息:

        gsql ((GaussDB Kernel V300R002C00 build 50dc16a6) compiled at 2019-01-29 05:49:21 commit 1071 last mr 1373)
        Non-SSL connection (SSL connection is recommended when requiring high-security)
        Type "help" for help.
        postgres=#
      2. 查看已配置的参数。
        SHOW password_policy;
        password_policy
        ---------------------
        1
        (1 row)

        如果显示结果不为1,执行“\q”命令退出数据库。

      3. 执行如下命令设置成默认值1。
        gs_guc reload -Z coordinator -D ${BIGDATA_DATA_HOME}/mppdb/data1/coordinator -c "password_policy=1"
        帐户密码的复杂度要求如下:
      • 包含大写字母(A-Z)的少个数(password_min_uppercase)
      • 包含小写字母(a-z)的少个数(password_min_lowercase)
      • 包含数字(0-9)的少个数(password_min_digital)
      • 包含特殊字符的少个数(password_min_special)(特殊字符的列表请参见表1
      • 密码的小长度(password_min_length)
      • 密码的大长度(password_max_length)
      • 至少包含上述四类字符中的三类。
      • 不能和用户名、用户名倒写相同,本要求为非大小写敏感。
      • 不能和当前密码、当前密码的倒写相同。
    • 密码重用

      用户修改密码时,只有超过不可重用天数(password_reuse_time)或不可重用次数(password_reuse_max)的密码才可以使用。参数配置说明如表2所示。

       说明:

      不可重用天数默认值为60天,不可重用次数默认值是0。这两个参数值越大越安全,但是在使用过程中会带来不便,其默认值符合安全标准,用户可以根据需要重新设置参数,提高安全等级。

      配置password_reuse_time参数。

      1. 使用如下命令连接数据库。
        gsql -d postgres -p 25308
        postgres为需要连接的数据库名称,25308为CN的端口号。

        连接成功后,系统显示类似如下信息:

        gsql ((GaussDB Kernel V300R002C00 build 50dc16a6) compiled at 2019-01-29 05:49:21 commit 1071 last mr 1373)
        Non-SSL connection (SSL connection is recommended when requiring high-security)
        Type "help" for help.
        postgres=#
      2. 查看已配置的参数。
        SHOW password_reuse_time;
        password_reuse_time
        ---------------------
        60
        (1 row)

        如果显示结果不为60,执行“\q”命令退出数据库。

      3. 执行如下命令设置成默认值60。
         说明:

        不建议设置为0,即使需要设置也要将所有集群节点中的password_reuse_time都设置为0才能生效。

        gs_guc reload -Z coordinator -Z datanode -N all -I all -c "password_reuse_time=60"
        配置password_reuse_max参数。
      1. 使用如下命令连接数据库。
        gsql -d postgres -p 25308
        postgres为需要连接的数据库名称,25308为CN的端口号。

        连接成功后,系统显示类似如下信息:

        gsql ((GaussDB Kernel V300R002C00 build 50dc16a6) compiled at 2019-01-29 05:49:21 commit 1071 last mr 1373)
        Non-SSL connection (SSL connection is recommended when requiring high-security)
        Type "help" for help.
        postgres=#
      2. 查看已配置的参数。
        SHOW password_reuse_max;
        password_reuse_max
        --------------------
        0
        (1 row)

        如果显示结果不为0,执行“\q”命令退出数据库。

      3. 执行如下命令设置成默认值0。
        gs_guc reload -Z coordinator -Z datanode -N all -I all -c "password_reuse_max = 0"
        密码有效期限
    • 数据库用户的密码都有密码有效期(password_effect_time),当达到密码到期提醒天数(password_notify_time)时,系统会在用户登录数据库时提示用户修改密码。

       说明:

      考虑到数据库使用特殊性及业务连续性,密码过期后用户还可以登录数据库,但是每次登录都会提示修改密码,直至修改为止。

      配置password_effect_time参数。

      1. 使用如下命令连接数据库。
        gsql -d postgres -p 25308
        postgres为需要连接的数据库名称,25308为CN的端口号。

        连接成功后,系统显示类似如下信息:

        gsql ((GaussDB Kernel V300R002C00 build 50dc16a6) compiled at 2019-01-29 05:49:21 commit 1071 last mr 1373)
        Non-SSL connection (SSL connection is recommended when requiring high-security)
        Type "help" for help.
        postgres=#
      2. 查看已配置的参数。
        SHOW password_effect_time;
        password_effect_time
        ----------------------
        90
        (1 row)

        如果显示结果不为90,执行“\q”命令退出数据库。

      3. 执行如下命令设置成默认值90(不建议设置为0)。
        gs_guc reload -Z coordinator -Z datanode -N all -I all -c "password_effect_time = 90"
        配置password_notify_time参数。
      1. 使用如下命令连接数据库。
        gsql -d postgres -p 25308
        postgres为需要连接的数据库名称,25308为CN的端口号。

        连接成功后,系统显示类似如下信息:

        gsql ((GaussDB Kernel V300R002C00 build 50dc16a6) compiled at 2019-01-29 05:49:21 commit 1071 last mr 1373)
        Non-SSL connection (SSL connection is recommended when requiring high-security)
        Type "help" for help.
        postgres=#
      2. 查看已配置的参数。
        SHOW password_notify_time;
        password_notify_time
        ----------------------
        7
        (1 row)
      3. 如果显示结果不为7,执行如下命令设置成默认值7(不建议设置为0)。
        gs_guc reload -Z coordinator -Z datanode -N all -I all -c "password_notify_time  = 7"
        密码修改
      • 在安装数据库时,会新建一个和初始化用户重名的操作系统用户,为了保证帐户安全,请定期修改操作系统用户的密码。
        以修改用户user1密码为例,命令格式如下:
        passwd user1
        根据提示信息完成修改密码操作。
      • 建议系统管理员和普通用户都要定期修改自己的帐户密码,避免帐户密码被非法窃取。

        以修改用户user1密码为例,以系统管理员用户连接数据库并执行如下命令:

        ALTER USER user1 IDENTIFIED BY "1234@abc" REPLACE "5678@def";
        ALTER ROLE
         说明:

        1234@abc、5678@def分别代表用户user1的新密码和原始密码,这些密码要符合规则,否则会执行失败。

      • 管理员可以修改自己的或者其他帐户的密码。通过修改其他帐户的密码,解决用户密码遗失所造成无法登录的问题。

        以修改用户joe帐户密码为例,命令格式如下:

        ALTER USER joe IDENTIFIED BY "abc@1234";
        ALTER ROLE
       说明:
      • 系统管理员之间不允许互相修改对方密码。
      • 系统管理员可以修改普通用户密码且不需要用户原密码。
      • 系统管理员修改自己密码但需要管理员原密码。
    • 密码验证

      设置当前会话的用户和角色时,需要验证密码。如果输入密码与用户的存储密码不一致,则会报错。

      以设置用户joe为例,命令格式如下:

      SET ROLE joe PASSWORD "abc@1234";
      ERROR: Invalid username/password,set role denied.
    表1 特殊字符

    编号

    字符

    编号

    字符

    编号

    字符

    编号

    字符

    1

    ~

    9

    *

    17

    |

    25

    <

    2

    10

    (

    18

    [

    26

    .

    3

    @

    11

    )

    19

    {

    27

    >

    4

    #

    12

    -

    20

    }

    28

    /

    5

    $

    13

    _

    21

    ]

    29

    6

    %

    14

    =

    22

    -

    -

    7

    ^

    15

    +

    23

    -

    -

    8

    &

    16

    \

    24

    -

    -

    表2 不可重用天数和不可重用次数参数说明

    参数

    取值范围

    配置说明

    不可重用天数(password_reuse_time)

    正数或0,其中整数部分表示天数,小数部分可以换算成时,分,秒。

    默认值为60。

    • 如果参数变小,则后续修改密码按新的参数进行检查。
    • 如果参数变大(比如由a变大为b),因为b天之前的历史密码可能已经删除,所以b天之前的密码仍有可能被重用。则后续修改密码按新的参数进行检查。
      说明:

      时间以时间为准,历史密码记录的都是当时的时间,不识别时间的修改。

    不可重用次数(password_reuse_max)

    正整数或0。

    默认值为0,表示不检查重用次数。

    • 如果参数变小,则后续修改密码按新的参数进行检查。
    • 如果参数变大(比如由a变大为b),因为b次之前的历史密码可能已经删除,所以b次之前的密码仍有可能被重用。则后续修改密码按新的参数进行检查。
分享好友

分享这个小栈给你的朋友们,一起进步吧。

GaussDB_数据库
创建时间:2020-01-06 16:21:44
华为GaussDB数据库小栈
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • GaussDB_数据库
    专家
戳我,来吐槽~