【TiDB 4.0 PCTA 学习笔记】- 3.8.1 TiDB 的授权与认证@2班+欧阳

课程名称:3.8.1 TiDB 的授权与认证

学习时长:16min

课程收获:用户登陆验证的过程,权限的原理和使用

课程内容:

  • 认证

    • 当TiDB收到一个新连接时发生了什么

      • Server发送Handshake Packet,包含

        • server能力信息
        • 密码验证的seed
      • Client用Handshake Response回复

        • 协商协议细节
        • 可能会升级为SSL连接
      • Client返回给Server的响应还包含认证信息

        • 用户名和主机
        • 加密的密码
    • 账户信息存在那儿

        • 存储在mysql.user表中
        • server使用这些信息进行授权
        • 数据也会缓存到内存以提升性能
        • 手工编辑该表,需要执行flush privileges来刷新缓存
        • username + host来标识一个用户连接
    • 密码如何加密

        • 密码以非明文形式保存
        • 密码以非明文形式传输
      • 从概念上,authentication_string和raw password类似于公钥和私钥

        • TiDB使用mysql_native_password,默认使用MySQL5.7的鉴权方法

          • Server发送随机值到Client
          • Cilent用私钥(即raw password)加密这个随机值
          • Server使用公钥(即authentication_string)验证结果
      • 严格讲,mysql_native_password并未真正使用公钥和私钥非对称加密

        • authentication_string只是简单的对raw password进行哈希

        • 真正流程如下:

  • 授权

    • TiDB提供的权限

      • 大部分和MySQL相同

      • 权限存储在:mysql.user/mysql.db/mysql.tables_priv中

        • mysql.user:grant xxx on . to yyy@zzz;
        • mysql.db:grant xxx on db.* to yyy@zzz;
        • mysql.tables_priv:grant xxx on db.table to yyy@zzz;
      • TiDB不支持列级权限

    • 请求校验过程

      • 搜索全局权限
      • 搜索数据库级权限
      • 搜索表级权限
    • RBAC(role based access control)

      • TiDB4.0开始支持

      • 实现:

        • 创建角色

          • create role ‘app_developer’;
        • 为角色分配权限

          • grant all on db.* to ‘app_developer’;
        • 创建用户

          • create ‘dev1’@‘localhost’ identified by ‘dev1pass’;
        • 将角色授予用户

          • grant ‘app_developer’ to ‘dev1’@‘localhost’;
        • 激活角色

          • set default role all to ‘dev1’@‘localhost’;
        • 查看用户的角色

          • show grants for ‘dev1’@‘localhost’ usgin ‘app_developer’;

同学你好,感谢参与 TiDB 4.0 课程的学习!

本篇笔记逻辑清晰、内容丰富,被评选为优质笔记,将额外获得 20 积分,并在 「TiDB 培训」分类下获得“置顶”权益,积分兑换规则将于近期开放,敬请关注!

期待您继续产出优质内容!

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。