将SELECT授予MySQL RDS实例上数据库中除视图以外的所有现有和未来表
我有一个MySQL数据库测试,有10个表和5个视图。 我希望能够访问所有当前的10个表以及将来添加的任何表。我不想访问数据库中的5个视图中的任何一个。 如果我这样做:将SELECT授予MySQL RDS实例上数据库中除视图以外的所有现有和未来表,mysql,view,amazon-rds,database-administration,user-permissions,Mysql,View,Amazon Rds,Database Administration,User Permissions,我有一个MySQL数据库测试,有10个表和5个视图。 我希望能够访问所有当前的10个表以及将来添加的任何表。我不想访问数据库中的5个视图中的任何一个。 如果我这样做: GRANT SELECT ON test.* TO 'myuser'@'%'; 这样做的诀窍,但它也提供了访问我不想要的视图 我还可以做: SELECT CONCAT("GRANT SELECT ON test.", table_name, " TO 'view_test'@'%';"
GRANT SELECT
ON test.*
TO 'myuser'@'%';
这样做的诀窍,但它也提供了访问我不想要的视图
我还可以做:
SELECT CONCAT("GRANT SELECT ON test.", table_name, " TO 'view_test'@'%';")
FROM information_schema.TABLES
WHERE table_schema = "test" AND table_type <> "VIEW"
SELECT CONCAT(“授予SELECT ON test.”,table_name,“查看_test”@“;”)
来自信息\u schema.TABLES
其中table_schema=“test”和table_type“VIEW”
但这将只为现有表生成授权。但通过这种方式,我必须显式地授予我不想要的任何未来表的select访问权
因此,我的最终目标是在所有现有和将来的表上授予Select,但不授予对视图的访问权。
有没有办法在MySQL中实现这一点?这是个好问题。我想,如果您使用第一条GRANT语句,然后使用definer=user和sql安全调用程序| definer语法创建视图表,这是可能的。因为在文档中,它说这些可以限制用户对视图表的访问权限。但我还没有弄明白如何在我自己的测试中让它工作。你有没有尝试过对整个数据库授予权限,然后撤销对视图的权限。将
YOURDATABASE
*上的SELECT授予“用户”@“%”,将YOURDATABASE
*上的SHOW视图授予“用户”@“%”