Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将SELECT授予MySQL RDS实例上数据库中除视图以外的所有现有和未来表_Mysql_View_Amazon Rds_Database Administration_User Permissions - Fatal编程技术网

将SELECT授予MySQL RDS实例上数据库中除视图以外的所有现有和未来表

将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'@'%';"

我有一个MySQL数据库测试,有10个表和5个视图。 我希望能够访问所有当前的10个表以及将来添加的任何表。我不想访问数据库中的5个视图中的任何一个。 如果我这样做:

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视图授予“用户”@“%”