MySQL:授予 CREATE VIEW 的權限
我創建了一個新的數據庫模式作為“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'
然後我嘗試從 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 語句時,數據庫權限更改將生效。
注意 客戶端應用程序可能會記憶體數據庫名稱;因此,如果沒有實際更改到不同的數據庫或刷新權限,他們可能看不到這種效果。
已連接客戶端的全域權限和密碼不受影響。這些更改僅對後續連接生效。