2014-12-23 34 views
1

我創建了一個用戶,該用戶擁有選擇列用戶名和列IP的權限。他也擁有針對列IP的INSERT和UPDATE的權限。MySQL允許用戶使用WHERE但拒絕SELECT

我的問題是,他應該能夠做到以下幾點:

[1] UPDATE table SET ip='localhost' WHERE key = 「XXXXXXXX」

但應該拒絕這樣做:

[2] SELECT key from table

如果我給他選擇權列鍵嘿可以做[2],如果我撤銷我得到的權利:

SELECT command denied to user 'username'@'localhost' for column 'key' in table 'table' 

我能做些什麼來解決這個問題嗎?

+0

就算你能,你不能阻止'SELECT鍵FROM表WHERE關鍵LIKE「%」'... – glglgl

+1

您可以創建一個存儲過程,用戶有權執行,沒有其他明確的'UPDATE ''或'SELECT'權限。 –

+0

如果您明確限制對存儲過程中定義的查詢的限制,或者是否需要允許任意查詢修改「ip」列,可以嗎? –

回答

0

@MichaelBerowski你的提示與存儲過程很好。
我創建了以下程序,效果很好。
我只需要授予他執行此過程的權利,但他不需要再選擇,更新和插入權限。

CREATE PROCEDURE update_ip( 
IN p_ip varchar(15), 
IN p_key varchar(50)) 
BEGIN 
UPDATE table SET ip = p_ip WHERE key = p_key; 
END 
+0

'View'可能是更好的選擇 – briansol