問題還原
我們的甲方爸爸遇到了一點技術的問題,具體如下
有一個比較大的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
閱讀更多 IT小明 的文章