關於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


分享到:


相關文章: