在 MySQL 中是否可以在数据库中的一组表上对用户执行 GRANT,例如允许 CREATE AND DROP 某些表名而不是其他表名?
这些似乎都不起作用:
GRANT SELECT ON `testdb`.`%_testing` TO 'wildcardtest'@'localhost';
GRANT SELECT ON `testdb`.`testing%` TO 'wildcardtest'@'localhost';
并且 MySQL 手册似乎并没有给出任何答案。
GRANT 语句中唯一有效的通配符是 *
GRANT SELECT ON `testdb`.* TO 'user'@'localhost';
GRANT SELECT ON *.* TO 'privilegeduser'@'localhost';
全部或一个;没有将表名动态匹配到授予权限的工具。
没有。您可以用逗号分隔表名,但不能在 GRANT 中使用通配符。
创建一个新的空数据库。在这个新数据库 CREATE VIEW 测试中授予它对原始数据库的访问权限(使用已经有权访问原始数据库的用户)作为 SELECT * from originaldatabase.tablename WHERE 条件...
然后在 NewDatabase.* 上通过 GRANT select 授予测试用户对 NewDatabase 的访问权限到 'testuser'@'localhost'
然后只为您希望 testuser 访问的表创建视图。
另请记住,您可以在视图的 WHERE 部分执行 USER() :
示例:将视图测试创建为 select * from original.customer where mysql_user = USER()
在 original.customer 中,您必须有一个列“mysql_user”,并且允许测试用户查看的每一行都必须有 testuser@localhost 作为条目
testuser 会将所有创建的视图视为数据库“test”中的表