1.问题描述
需要在一个测试库中创建一个新的mysql数据库,目前已知的用户没有创建数据库权限,从主机侧获取到了主机权限;
2.解决方法
2.1 重置root用户密码
第一步:vim /etc/my.cnf,添加一行skip-grant-tables,然后保存并退出
第二步:关闭启动数据库
```
service mysql stop; --关闭mysql服务
service mysql status;--查看mysql服务状态
service mysql start; --启动mysql服务
```
第三步:不用密码直接登录 mysql -u root
第四步:更新root用户密码
```
UPDATE mysql.user SET Password='password' where USER='root'; --password 是你新用户密码
flush privileges; --刷新权限表
```
因为该测试环境上存在多个数据库,还有其他部门在使用,修改root用户的密码的影响不好评估,该方案被舍弃;
2.2 创建新用户赋于其root用户一样的权限
第一、二、三步骤于前面一致;
第四步:创建用户
```
create user 'user'@'%' identified by "pwd"; --user 是新用户的用户名,pwd为用户密码
flush privileges;
```
第五步:修改新用户权限
在mysql.user表中
![](https://img2020.cnblogs.com/blog/2371038/202105/2371038-20210514142331182-1172800869.png)
刷新权限
2.3 使用新用户创建用户库,将新建数据库的所有权限赋给老用户
![](https://img2020.cnblogs.com/blog/2371038/202105/2371038-20210514142621206-1849931338.png)
2.4 mysql的用户权限表
在mysql的数据库下面,存在几个权限相关的表
User表:存放用户账户信息以及全局级别(所有数据库)权限,决定了来自哪些主机的哪些用户可以访问数据库实例,如果有全局权限则意味着对所有数据库都有此权限
Db表:存放数据库级别的权限,决定了来自哪些主机的哪些用户可以访问此数据库
Tables_priv表:存放表级别的权限,决定了来自哪些主机的哪些用户可以访问数据库的这个表
Columns_priv表:存放列级别的权限,决定了来自哪些主机的哪些用户可以访问数据库表的这个字段
Procs_priv表:存放存储过程和函数级别的权限