Mysql

mysqldump 和視圖的問題

  • June 15, 2018

用於mysqldump備份 MySQL 時,出現以下錯誤。

mysqldump --all-databases --routines >> all.sql
mysqldump: Couldn't execute 'show table status like 'hdkien'': SELECT command denied to user 'tungbt'@'192.168.12.197' for column 'id' in table 'hdcn_hd' (1143)

hdkien是一個視圖

CREATE ALGORITHM=UNDEFINED DEFINER=`tungbt`@`192.168.12.197` SQL SECURITY DEFINER VIEW `hdcn`.`hdkien` AS (...striped...)

使用者tungbt@192.168.12.197已經有權在表上進行選擇,我可以毫無問題hdcn_hd地從視圖中進行選擇。hdkien

mysql> select * from hdkien limit 1;
+------+-----------+
| id   | shd       |
+------+-----------+
|  876 | ADFADFA1  |
+------+-----------+

更多資訊:

  • MySQL版本:mysql-community-server-5.5.37-4.el6.x86_64
  • 作業系統:CentOS 6.5

為什麼我在執行時遇到錯誤,我該mysqldump如何解決?

更新 1 (2014/04/17)

mysqldump與使用者一起執行'root'@'localhost'

mysql> show grants for 'root'@'localhost';
+----------------------------------------------------------------------------------------------------------------------------------------+
| Grants for root@localhost                                                                                                              |
+----------------------------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '...striped...' WITH GRANT OPTION                             |
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION                                                                           |
+----------------------------------------------------------------------------------------------------------------------------------------+

使用者'tungbt'@'192.168.12.197'是視圖的定義者hdcn.hdkien(並且SQL SECURITYDEFINER.

+------------------------------------------------------------------------------------------------------------------+
| Grants for tungbt@192.168.12.197                                                                                   |
+------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'tungbt'@'192.168.12.197' IDENTIFIED BY PASSWORD '...striped...'                             |
| GRANT ALL PRIVILEGES ON `hdcn`.* TO 'tungbt'@'192.168.12.197'                                                      |
+------------------------------------------------------------------------------------------------------------------+

更新 2

$ mysql -ANe"SELECT USER(),CURRENT_USER()"
+----------------+----------------+
| root@localhost | root@localhost |
+----------------+----------------+

更新 3

mysql> SELECT COUNT(1) MySQLGrantsCount,VERSION() MySQLVersion FROM information_schema.columns WHERE table_schema='mysql' AND table_name='user';
+------------------+--------------+
| MySQLGrantsCount | MySQLVersion |
+------------------+--------------+
|               42 | 5.5.37-log   |
+------------------+--------------+

您需要擁有SHOW VIEW 權限。我在 2013 年 12 月寫過這篇文章:獲取 MySQL 數據庫模式備份所需的最低權限是什麼?

在那篇文章中,我展示了 mysqldump 的這些最低權限

你應該執行這個命令:

SHOW GRANTS FOR tungbt@192.168.12.197;

如果SHOW VIEW不存在,這就是原因。

更新 2014-04-16 23:06 EDT

當你這樣做時

mysqldump --all-databases --routines >> all.sql

我看到你沒有指定使用者和密碼。在這種情況下,您沒有以root@localhost. 您必須明確指定 root 使用者

mysqldump -uroot -p --all-databases --routines >> all.sql

您將看到密碼提示。輸入 root@localhost 密碼,您就可以關閉並執行了。

您也可以指定密碼

mysqldump -uroot -ppassword --all-databases --routines >> all.sql

試一試 !!!

瘋狂的建議

如果您正在使用.~/my.cnf但仍然出現錯誤,您可能會在錯誤 #70907 mysqldump 中遇到這種情況:無法執行 ‘show table status’: SELECT command denied to user ‘

如果配置文件是.~/my.cnf真的/root/.my.cnf,可能你沒有以 Linux root 身份登錄。您可能必須執行 sudo。

請執行此命令

mysql -ANe"SELECT USER(),CURRENT_USER()"

如果您沒有看到root@localhost兩次,那麼您的身份驗證不正確。

.my.cnf您需要確保使用者和密碼在該[client]部分下

[client]
user=root
password=rootpassword

不在本[mysql]節下。

更新 2014-04-17 13:53 EDT

我不禁查看該錯誤報告並想知道以下內容:既然您有 DEFINER= tungbt@ 192.168.12.197,那麼 root@localhost 的行為可能類似於tungbt@192.168.12.197嗎?我這樣說是因為根據CREATE VIEW 上的 MySQL 文件At view definition time, the view creator must have the privileges needed to use the top-level objects accessed by the view. For example, if the view definition refers to table columns, the creator must have some privilege for each column in the select list of the definition, and the SELECT privilege for each column used elsewhere in the definition.

您可以將視圖的定義器更改為 root@localhost 並再次嘗試 mysqldump

引用自:https://dba.stackexchange.com/questions/63320