2019年2月26日 星期二

GCP Cloud SQL: MySQL Create View ERROR 1227: Access denied; you need (at least one of) the SUPER privilege(s) for this operation

今日 User 要建立一個 MySQL 的View  Table,但卻出現錯誤訊息


ERROR 1227: Access denied; you need (at least one of) the SUPER privilege(s) for this operation

使用者說,是不是沒有給他足夠的權限,所以無法執行。

環境說明:
1.MySQL 是用 Google Cloud Platform (GCP) 的 Cloud SQL (MySQL 第 2 代 5.7)
2.Cloud SQL 沒有區分帳號可以讀寫哪一個Schema
3.Client 工具用的是 MySQL Workbench 6.2 CE
4.使用者是用 MySQL Workbench  連接到 Cloud SQL 讀取現有 View , 工具就會產出 Create Statement
5.再執行工具產生的Create Statement,就會出錯

處理方式:
當然要加大權限也不是不可以,但更應該確認需求,而不是盲目的加大權限
根據
http://jenyu316.pixnet.net/blog/post/223690152-mysql%E5%9B%9E%E6%87%89----%3A-%231227---access-denied%3B-you-need-%28at-least-o
的說明,只要將以下三行拿掉就可以了。

ALGORITHM = UNDEFINED
DEFINER = `xxxx`@`xx.xx.xx.xx`    << 最主要的原因
SQL SECURITY DEFINER

建立 MySQL 新帳號





建立 MySQL 新帳號, 以下例子會建立 "newuser" 帳號, 密碼是 "newpassword", 主機是 "localhost":

CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'newpassword';

如果希望該帳號可以從何地方登入,則localhost 可以換成 "%" 字符


給予新帳號 "newuser" 權限讀寫新資料庫 "newdatabase":

GRANT ALL PRIVILEGES ON newdatabase.* TO 'newuser'@'localhost';

更新資料庫狀態,讓帳號與權限生效

FLUSH PRIVILEGES;



登入資料庫

mysql -u newuser -p