为了在模式中创建表,角色需要的完整权限列表是啥?
Posted
技术标签:
【中文标题】为了在模式中创建表,角色需要的完整权限列表是啥?【英文标题】:What is the complete list of privileges a role needs in order to create a table in a schema?为了在模式中创建表,角色需要的完整权限列表是什么? 【发布时间】:2021-08-24 17:07:55 【问题描述】:我已授予架构和数据库的 USAGE 权限。 我已授予对所有表的选择权限。
使用该角色,我可以从任何架构中的所有表中读取数据。
然后我授予在该数据库内的所有模式中创建表的权限
GRANT CREATE TABLE ON ALL SCHEMAS IN DATABASE TEST1_CONTROL TO DEVELOPERS;
然而,当我发出这个命令时(使用 DEVELOPERS 角色),我得到一个错误
CREATE TABLE PDS.ERIC_TEST_TABLE(COUCOU STRING NULL);
我错过了什么?
【问题讨论】:
发出GRANT CREATE TABLE ON ALL SCHEMAS IN DATABASE TEST1_CONTROL TO DEVELOPERS;
时是否存在架构PDS?
有可能后来创建了模式 PDS。 SHOW GRANTS TO ROLE DEVELOPERS
是的,该架构之前确实存在。事实上,我似乎已经通过在模式 PDS 上向 DEVELOPERS 发出 grant create table 来解决这个特定问题;奇怪...
【参考方案1】:
对我来说很好用(下面的脚本)。同意 Lukasz 评论的内容,并且您的架构是稍后创建的。
use role accountadmin;
create database TEST1_CONTROL;
create schema PDS;
create role DEVELOPERS;
grant role DEVELOPERS to user <your_username>;
GRANT USAGE ON DATABASE TEST1_CONTROL TO DEVELOPERS;
GRANT USAGE ON ALL SCHEMAS IN DATABASE TEST1_CONTROL TO DEVELOPERS;
GRANT CREATE TABLE ON ALL SCHEMAS IN DATABASE TEST1_CONTROL TO DEVELOPERS;
use role DEVELOPERS;
CREATE TABLE PDS.ERIC_TEST_TABLE(COUCOU STRING NULL);
如果您希望某个角色能够访问将来创建的任何新架构,Snowflake 确实会提供 future 授权。
【讨论】:
我不知道该说什么...在我的“GRANT CREATE TABLE ON DATABASE TEST1_CONTROL TO DEVELOPERS;”之前,该架构确实存在然而,当我(后来)针对该特定架构颁发授权时,它才开始起作用...... 我刚刚使用存储过程权限进行了类似的测试,这次它按预期工作......“将数据库 TEST1_CONTROL 中所有模式的创建过程授予开发人员;”我可以立即创建我的存储过程,仍然在 PDS 模式中。我不得不假设我犯了一些基本错误...... 感谢您的确认,埃里克。我们可能会将其视为奇怪的一次性或像您所说的用户错误。很高兴它现在可以工作了。以上是关于为了在模式中创建表,角色需要的完整权限列表是啥?的主要内容,如果未能解决你的问题,请参考以下文章