2011-12-03 51 views

回答

40

運行它們作爲兩個單獨的GRANT聲明:

GRANT SELECT ON testdb.fruits TO [email protected] IDENTIFIED BY 'pass'; 
GRANT SELECT ON testdb.sports TO [email protected] IDENTIFIED BY 'pass'; 

The MySQL GRANT syntax只允許在priv_level位置:,雖然它可以使用*作爲通配符一個對象:

GRANT 
    priv_type [(column_list)] 
     [, priv_type [(column_list)]] ... 
    ON [object_type] priv_level 
    TO user_specification [, user_specification] ... 
    [REQUIRE {NONE | ssl_option [[AND] ssl_option] ...}] 
    [WITH with_option ...] 

object_type: 
    TABLE 
    | FUNCTION 
    | PROCEDURE 

priv_level: 
    * 
    | *.* 
    | db_name.* 
    | db_name.tbl_name 
    | tbl_name 
    | db_name.routine_name 

的一部分下面看起來不適用於MySQL 5.5How to "subtract" privileges in MySQL解決了原因。

授予對所有表 SELECT然後選擇撤銷,你可以這樣做:

GRANT SELECT ON testdb.* TO [email protected] IDENTIFIED BY 'pass'; 
REVOKE ALL PRIVILEGES ON testdb.tblname FROM [email protected]; 

這似乎是一個奇怪的方法,雖然,我想我會分別授予而不是單獨REVOKE。

+0

有趣。 MySQL可以刪除對特定表的訪問嗎?這樣我可以分配'testdb。*',然後刪除我不想訪問的表的訪問權限。 – enchance

+0

@enchance是的,請參閱上面的內容。 –

+0

謝謝,邁克爾。這解決了它。 – enchance

0

可以使用mysql.tables_priv table直接:

INSERT INTO mysql.tables_priv (`Host`, `Db`, `User`, `Table_name`, `Grantor`, `Table_priv`) 
VALUES 
('%', DATABASE(), 'someuser', 'mytable1', CURRENT_USER, 'Select,Insert,Update,Delete'), 
('%', DATABASE(), 'someuser', 'mytable2', CURRENT_USER, 'Select,Insert,Update,Delete') 

手動更新這些表格後,您將需要顯式運行FLUSH PRIVILEGES查詢告訴MySQL來更新其權限緩存(不需要使用GRANT時)