我正在运行一些测试,并试图查看是否可以创建一个只能访问我的数据库中的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