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

问题还原

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

有一个比较大的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 [email protected].% |

+------------------------------------------------------------------------------------------------------------------+

| 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)

  • 可以看出该用户拥有SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, LOCK TABLES等权限对于dbname库

敲黑板!

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

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 [email protected].% |

+--------------------------------------------------------------------------------------------------+

| 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


分享到:


相關文章: