2011-10-05 37 views
5

使用標準的SQL之後 - 都已經在PosgresQL和Oracle這樣反覆做 - 我希望授予SELECT來schema1 所有表,除了secret的user1在MySQL中,撤銷的權限,賦予普通特權

grant select on schema1.* to user1; 
revoke select on schema1.users from user1; 

收到的錯誤:

ERROR 1147 (42000): There is no such grant defined for user 'user1' on host '%' on table 'secret' 

我在做什麼錯?


很明顯這是標準的MySQL行爲!

更容易理解使用MySQL的應用程序缺乏安全性 - 在MySQL中設置正確的用戶安全性非常困難。

+1

您應該爲每個表格按表格授予SELECT權限。 – Devart

+0

你確定嗎? ANSI標準說明我所做的是正確的。 –

回答

5

沒什麼。 MySQL不會將schema1.*通配符擴展爲單個表,也不會存儲「異常」。權限表存儲授予的權限。因此,由於您實際上沒有在schema1.users上授予任何內容,因此MySQL不會撤銷任何操作。它只是涉及到MySQL如何處理權限。

+0

因此,MySQL中的GRANT/REVOKE是不是ANSI標準? –

+1

@ccyoung也許吧。我對標準並不熟悉。我知道MySQL還有其他幾個地方存在偏差,所以它不會讓我感到驚訝。我建議在MySQL團隊中開一個錯誤(這可能已經存在),但也建議在解決之前不要拖延重要的人生決定。我們談論的核心MySQL已經存在多年(互聯網時代已有數個世紀)。有史以來改變的機會是微不足道的。 – Mac