我正在运行一些测试,尝试查看是否可以创建一个仅能访问数据库中1或2个表的用户。有人知道该如何实现吗?以下是我的代码,但它失败了:
GRANT SELECT ON testdb.fruits, testdb.sports TO joe@localhost IDENTIFIED BY 'pass';
错误提示我语法有误。
我正在运行一些测试,尝试查看是否可以创建一个仅能访问数据库中1或2个表的用户。有人知道该如何实现吗?以下是我的代码,但它失败了:
GRANT SELECT ON testdb.fruits, testdb.sports TO joe@localhost IDENTIFIED BY 'pass';
错误提示我语法有误。
将它们作为两个独立的GRANT
语句运行:
GRANT SELECT ON testdb.fruits TO joe@localhost IDENTIFIED BY 'pass';
GRANT SELECT ON testdb.sports TO joe@localhost IDENTIFIED BY 'pass';
MySQL的GRANT语法仅允许在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上似乎无法正常工作。 如何在MySQL中“减去”权限 解释了原因。
要授予所有表的SELECT
权限,然后有选择性地撤销,可以执行以下操作:
GRANT SELECT ON testdb.* TO joe@localhost IDENTIFIED BY 'pass';
REVOKE ALL PRIVILEGES ON testdb.tblname FROM joe@localhost;
尽管如此,我认为这似乎是一种奇怪的方法,我更倾向于逐个授予权限而不是逐个撤销权限。
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
时不需要)。
testdb.*
,然后只需删除我不希望他们访问的表的访问权限。 - enchance