2017-07-24 46 views
2

我目前收到最新版本的MySQL(版本8.0.2),我正在嘗試創建一個read-only查看是否有可能創建只讀在MySQL選項查看?

這是我的查詢看起來像:

CREATE VIEW Emp_Salary3 AS 
SELECT Empid, Ename, Date_Joined, Salary, Dcode 
FROM Employees 
WHERE Salary < 35000 
WITH READ ONLY; 

但後來我得到的迴應是:

錯誤代碼:1064您的SQL語法錯誤;檢查對應於你的MySQL服務器版本正確的語法 第5行

因此,我檢查了manual以及使用近「只讀」的 手冊,它沒有一個只讀選擇任何責任。有沒有解決這個問題的方法?

任何幫助,不勝感激。

回答

4

MySQL不支持WITH READ ONLYCREATE VIEW

它可以創建以間接的方式只讀視圖:創建具有對所有表和CREATE VIEW特權SELECT權限的用戶,然後用這個用戶創建視圖和CREATE VIEW語句中指定SQL SECURITY DEFINER

CREATE 
    DEFINER = CURRENT_USER 
    SQL SECURITY DEFINER 
VIEW Emp_Salary3 AS 
SELECT Empid, Ename, Date_Joined, Salary, Dcode 
FROM Employees 
WHERE Salary < 35000 

如果您使用受限用戶創建視圖,則不需要該行DEFINER = CURRENT_USER

或者你可以使用管理員用戶創建的視圖,並在這種情況下,行DEFINER =必須包含將擁有視圖的用戶的名稱。

的文檔解釋:

MySQL的檢查,查看權限是這樣的:

在視圖定義時,視圖創建者必須使用由視圖訪問的頂級對象所需要的權限。例如,如果視圖定義是指表列,創建者必須具有一些特權在定義的選擇列表中的每一列,並且SELECT特權在定義其它地方使用的每一列。如果定義指的是存儲功能,只調用函數所需的權限,可以進行檢查。對於不同的調用,在函數內不同的執行路徑可能採取的:在函數調用時所需的權限,只能在執行時進行檢查。

誰引用視圖,必須具有相應的訪問權限的用戶(SELECT從中選擇,INSERT插入到它,等等。)

當視圖已經被引用的對象權限訪問由視圖是針對由視圖DEFINER帳戶或調用,這取決於SQL SECURITY特性是否是分別DEFINERINVOKER,保持的特權檢查。

這意味着視圖的用戶必須至少具有SELECT視圖的權限。然後,如果SQL SECURITYDEFINER,那麼DEFINER用戶的權限將應用於視圖定義中使用的表和視圖。

相關問題