我们先来解释一下这个题目:
在MySQL里面,如果我们运行如下权限语句,那么这个database/schema database1中,未来创建的表,默认也是会赋予select权限给user1的:
grant select on database1.* to 'user1'@'%';
但是对于AWS Redshift来说,即便运行了:
grant select on all tables in schema schema1 to user1;
对于schema1后续创建的future table,也不会默认赋予user1 select权限,需要每次创建了新的table以后手动grant权限。
Redshift这样设置的原因是,Redshift底层是与PostgreSQL 8版本兼容的,根据PostgreSQL官网,这个设置本身就是PostgreSQL对于权限的管理,而不是Redshift这个服务对于权限的特定设置。
那么如果我们希望像mysql一样,在Redshift内省去把新创建的table进行再次grant的步骤,我们可以用如下query来赋予权限:
grant usage on schema schematest1 to user1;
alter DEFAULT PRIVILEGES in schema schematest1 grant select on tables to user1;
grant select on all tables in schema schematest1 to user1;
这样schematest1里面新创建的table就也默认对user1有select权限了。
这个权限也并不是Redshift本身的语法,而是PostgreSQL原生语法,详情如下:
PostgreSQL: Documentation: 17: ALTER DEFAULT PRIVILEGES
Redshift文档中也对这个alter default privleges进行了解释,文档列举如下: