我正在運行一些測試,並試圖查看是否可以創建一個只能訪問我的數據庫中的1或2個表的用戶。有誰知道這是如何完成的?我的代碼如下失敗:授予用戶訪問MySQL中有限數量的表的權限
GRANT SELECT ON testdb.fruits, testdb.sports TO [email protected] IDENTIFIED BY 'pass';
錯誤說我在我的語法錯誤。
我正在運行一些測試,並試圖查看是否可以創建一個只能訪問我的數據庫中的1或2個表的用戶。有誰知道這是如何完成的?我的代碼如下失敗:授予用戶訪問MySQL中有限數量的表的權限
GRANT SELECT ON testdb.fruits, testdb.sports TO [email protected] IDENTIFIED BY 'pass';
錯誤說我在我的語法錯誤。
運行它們作爲兩個單獨的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.5。 How 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。
可以使用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
時)
有趣。 MySQL可以刪除對特定表的訪問嗎?這樣我可以分配'testdb。*',然後刪除我不想訪問的表的訪問權限。 – enchance
@enchance是的,請參閱上面的內容。 –
謝謝,邁克爾。這解決了它。 – enchance