TIDB 的认证与权限的赋予, TIDB 的认证如同对数据库的登录的设置,如果没有通过认证,则用户是不能登录到数据库中的,授权的主要作用是对用户访问数据库的对象进行控制的操作。
主要TIDB 服务器主机的对于MYSQL的客户端的连接,通过连接层来进行接入,在通过connection layer 来对TIDB的服务器的process进行访问。
远程访问连接与MYSQL 一样,也是需要PORT , IP 地址等进行访问,可以说TIDB 在访问与MYSQL 没有任何区别。
建立账号与MYSQL也没有区别,使用了MYSQL 8 的方式 ,创建用户使用CREATE 命令,另外也有少许的不同
例如 create user 'test' 的意思是创建一个用户名 test的用户,可以通过远程来访问,类似于 create user 'test'@'%' 并且没有密码。
与mysql一样,可以在mysql.user中查询当前数据库的账号信息,
TIDB 同时也提供的角色的概念, 相关的信息也是存储在 mysql.users表中,角色和用户是一样的,用户和角色之间的定义不同在于,角色和赋予权限给用户。另外角色在创建后,也是不能进行数据库连接的,也就是被lock住。用户名大小写也是敏感的,如果通过角色来进行用户的权限的赋予是要使用 set role all 命令来启动赋予的角色的权限。其他的命令与MYSQL没有不同
如
1 授予用户权限
2 赋予所有用户权限和授权
3 收回用户权限
4 查看用户权限
5 删除用户
下面通过建立角色,使用角色对用户进行权限的赋值
1 我们建立一个叫 dba_admin的角色,并且将所有的权限都赋予这个角色.
建立的ROLE 在ACCOUNT_LOCK 是Y ,这点是用户和角色的区别
在使用角色给test用户赋值后, 通过test用户登陆到系统后需要使用 set role all 来激活角色, 否则用户不具有相关角色赋予的权限.
这里有一点有点意思,在赋予权限的账号中,删除角色是可以实现的,在删除角色后,马上test 就没有相关的权限.
改变用户的密码也和MYSQL是一致的,如果要改变密码就需要具有MYSQL.USER 和 MYSQL 数据库的写入的权限。
也继承了MYSQL 5.X 中关于忘记密码后的操作方式,skip-grant-table = true的方式。
我们对ROOT 设置密码, 然后通过 skip-grant-table =true 的方式来接触root账号的密码
这里我们需要更改tidb的配置信息, 具体按照你安装tidb 的具体位置,这里假设配置文件的位置为/tidb-deploy/tidb-4000/conf/tidb.toml
添加如上信息
[security]
skip-grant-table = true
保存后,重启TIDB 数据库
再次尝试不通过密码使用root账号来登陆数据库,实验通过.
上面的实验虽然在课上提到过,但如果之前在听配置的时候没有认真,并且不自己查找修改配置的方法,则上面的实验初学者做起来比较困难.