2011-05-31 37 views
0

出於安全原因,我不喜歡審計員有權修改表格的所有行。所以,我想:授予特定用戶修改特定表格行

GRANT UPDATE audit_comment ON cgis TO auditor IDENTIFIED BY '[email protected]'; 

但未能

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'audit_comment ON cgis TO auditor IDENTIFIED BY '[email protected]'' at line 1 

我GOOGLE了很多,但我無法找到答案,也許MySQL不允許我們這樣做呢?

回答

0

您不能在行上指定權限,只能在列上指定權限。檢查語法here
你需要像
GRANT UPDATE (audit_comment) ON db_name.cgis TO 'auditor'@'host_name'

0

另外,可以考慮使用stored procedure。讓程序更新行,並將其設置爲使用SQL SECURITY DEFINER。在存儲過程中,您可以包含任何需要的驗證,並撤消訪問權限以修改要限制的人員或人員的行。這有點複雜,但它是我知道的限制你所需要的訪問的唯一方式。

+0

呦你的鏈接不再顯示工作 – puk 2012-04-25 09:57:27

+0

顯然他們已經從他們的網站刪除文章。爲什麼,我不知道,但谷歌無法再找到它的當前副本。這是來自Internet Archive的鏈接。 http://bit.ly/IE9dHW這裏還有一面鏡子:http://mirror.neu.edu.cn/mysql/tech-resources/articles/mysql-storedproc.html – 2012-05-07 03:36:07

2

您也可以嘗試使用視圖而不是表格,這些表格可用於限制只訪問特定類型的行。這裏是一個非常簡單的例子

PICTURES表:

CREATE TABLE IF NOT EXISTS pictures_t 
(
    id  INT NOT NULL auto_increment, 
    public BOOL NOT NULL DEFAULT TRUE, 
    PRIMARY KEY(id) 
) 

圖片查看:

CREATE VIEW pictures_v 
AS 
SELECT 
    P.* 
FROM pictures_t AS P 
WHERE 
    P.public = TRUE 
ORDER BY id; 

創建用戶:

GRANT SELECT, INSERT, UPDATE ON db.pictures_t TO 'god'@'localhost' IDENTIFIED BY 'heaven'; 
GRANT SELECT, INSERT, UPDATE ON db.pictures_v TO 'satan'@'localhost' IDENTIFIED BY 'hell';