课程名称:3.8.1 Authentication and Authorization(TiDB 的授权与认证)
学习时长:
20分钟
课程收获:
理解用户登陆验证的过程,掌握权限的原理和使用。
课程内容:
一、Authentication
1.What happen when a client connect to TiDB
- Server发送握手消息包,包含:
- 服务器的Capability
- 密码验证的值
- Client接收消息包后,包含:
- 通过使用双方的Capability交集来决定协议的细节
- 可能会升级成SSL协议
- Client返回消息,包含:
- 登录认证信息
- Where is the account information stored
- mysql.user表用于存放用户信息
- 登陆时服务器会匹配登陆信息
- 认证失败会拒绝连接
- 认证包含用户名+Host
- Host表示登陆IP,%代表任意位置
- authentication_string字段存储的并非密码
- 密码不会以明文存储或传输
- How is the password encrypted
authentication_string和password类似于公钥和私钥
- 服务器发送随机种子字符串给客户端
- 客户端用私钥将原始密码加密
- 服务端用公钥authentication_string去解码
- mysql_native_password并不是真正意义使用公钥和私钥,authentication_string是经过hash之后的形式
二、Authorization
1.Privileges provided by TiDB
- TiDB大部分权限与MySQL相同
- 用户权限决定了他可以访问的数据库和表
- 权限的记录存储在mysql.user、mysql.db、mysql.tables_priv表中
- GRANT select ON . TO ‘user’@‘host’(*.*为全局级别授权,数据存储在mysql.user表)
- GRANT insert ON db.* TO ‘user’@‘host’(db.*为数据库级别授权,数据存储在mysql.db表)
- GRANT update ON db.table TO ‘user’@‘host’(db.table为表级别授权,数据存储在mysql.tables_priv表)
2.Request Verification
- 如果用户没有相应授权,执行操作就会失败
- 检查权限过程
- 检查全局权限
- 检查数据库权限
- 检查表权限
- RBAC(TiDB4.0后开始支持role based access control)
- 创建角色
- 为角色赋权
- 创建用户
- 将角色授予给用户
- 激活角色
- 用户便拥有相关的权限