Permissions

MySQL:授予 CREATE VIEW 的權限

  • September 27, 2016

我創建了一個新的數據庫模式作為“company_security”,並使用非常流行的 Company-Employee 表的表結構填充數據庫,其中包含 DEPARTMENT、DEPENDENT、DEPT_LOCATIONS、EMPLOYEE、PROJECT 和 WORKS_ON 表。然後我在根使用者會話中創建了一個新使用者,

CREATE USER 'user1'@'localhost' IDENTIFIED BY 'password1'

我想做的是在 EMPLOYEE 和 user1 的 WORKS_ON 上創建一個視圖 WORKS_ON1(Fname,Lname,Pno)。為此,首先我以 root 身份向 user1 授予了必要的權限,如下所示。

GRANT SELECT ON company_security.WORKS_ON TO 'user1'@'localhost'
GRANT SELECT company_security.EMPLOYEE TO 'user1'@'localhost' 
GRANT CREATE VIEW ON company_security.* TO 'user1'@'localhost' 

然後我刷新了權限,這是輸出SHOW GRANTS for 'user1'@'localhost'

SHOW GRANTS 的輸出

然後我嘗試從 user1 創建視圖,

CREATE VIEW WORKS_ON1 AS select Fname,Lname,Pno from EMPLOYEE,WORKS_ON;

但我遇到了這樣的錯誤,

ERROR 1142 (42000): CREATE VIEW command denied to user 'user1'@'localhost' for table 'WORKS_ON1'

我在 MySQL 論壇中發現了類似的問題,但他在解決方案中提到的 MySQL DOC 參考連結似乎已刪除。

所以我的問題是如何解決這個問題?甚至我試圖通過授予 user1 在全域級別創建視圖的權限來解決這個問題,但這也失敗了。要麼我們不能授予 WORKS_ON1 視圖的權限,因為錯誤說因為它在數據庫中不存在。

我正在使用的 MySQL 版本:mysql Ver 14.14 Distrib 5.6.28,用於使用 EditLine 包裝器的 debian-linux-gnu (x86_64)

這在 MySQL 文件中的權限更改生效時詳細說明。

授權表重新載入會影響每個現有客戶端連接的權限,如下所示:

表和列權限更改在客戶端的下一個請求時生效。

下次客戶端執行 USE db_name 語句時,數據庫權限更改將生效。

注意 客戶端應用程序可能會記憶體數據庫名稱;因此,如果沒有實際更改到不同的數據庫或刷新權限,他們可能看不到這種效果。

已連接客戶端的全域權限和密碼不受影響。這些更改僅對後續連接生效。

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