关于MySQL数据库导入的一些问题

/ Database / 没有评论 / 1382浏览

问题还原

我们的甲方爸爸遇到了一点技术的问题,具体如下

有一个比较大的sql文件,sql文件是逻辑备份出来的。 导入的过程中出现了

 ERROR 1044(42000):Access denied for user ‘username’@‘%’ to database ‘dbname’

应该是权限有问题?

甲方说的是,他们的普通用户只有select,create,insert,update,delete,alter,drop ,这些权限。还要求我们也给相同的权限测试,会不会出现这种情况?

当然是会出现的,因为谁知道是哪位普通用户导出来之前拥有什么权限,需要的权限肯定不止这些,后面的测试也证明绝非不止这些权限。

我的思考

我想,既然谁也不知道这个普通用户生前有什么什么权限才会导出这个SQL文件,不妨我们先给这个普通用户所有的权限,等导入完成之后再 取消不想给的权限。 或者直接用root导入,假若有权限的话。 要是不知道普通用户生前有什么权限,还控制普通用户的权限,还要把数据丝毫不差的导入进去,那不是巧妇难为无米之炊吗。

该怎么知道普通用户之前拥有什么权限

看下面

查看普通用户有什么权限

先查看普通用户分配了什么网段?

mysql> select user,host from mysql.user;
+------------------+-------------+
| user             | host        |
+------------------+-------------+
| back             | %           |
| root             | %           |
| shop             | %           |
| slave            | %           |
| tatata           | %           |
| zyd1             | %           |
| jumpserver       | 127.0.0.1   |
| deployop         | 192.168.1.% |
| debian-sys-maint | localhost   |

再看该网段的某个普通用户具体拥有什么权限

mysql> show grants for deployop@'192.168.1.%' ;
+------------------------------------------------------------------------------------------------------------------+
| Grants for deployop@192.168.1.%                                                                                  |
+------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'deployop'@'192.168.1.%'                                                                   |
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, LOCK TABLES ON `dbname`.* TO 'deployop'@'192.168.1.%' |
+------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

敲黑板!

用户在不同的区段可以拥有不同的密码及所授予的权限

MYSQL导入方式

我所了解的导入有两种方式,不确定有什么稀奇古怪的导入方式 导入方式1:

进入mysql,
        mysql -u user -p 
        use dbname;
        source /path/***.sql ;   

导入方式2:

命令行执行 
        mysql -u user -p dbname < /path/***.sql 

取消权限?

mysql>  REVOKE INSERT ,UPDATE ON dbname.* FROM deployop@'192.168.1.%';
Query OK, 0 rows affected (0.01 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

再看现在是什么权限?

mysql> show grants for deployop@'192.168.1.%' ;
+--------------------------------------------------------------------------------------------------+
| Grants for deployop@192.168.1.%                                                                  |
+--------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'deployop'@'192.168.1.%'                                                   |
| GRANT SELECT, DELETE, CREATE, DROP, ALTER, LOCK TABLES ON `dbname`.* TO 'deployop'@'192.168.1.%' |
+--------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

insert 和 update 就没了

依此类推

总结

SQL文件在导入时使用的用户,也应该具有和当时导出这些SQL文件用户所具有的权限,缺一不可。

End