为了在模式中创建表,角色需要的完整权限列表是啥?

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 模式中。我不得不假设我犯了一些基本错误...... 感谢您的确认,埃里克。我们可能会将其视为奇怪的一次性或像您所说的用户错误。很高兴它现在可以工作了。

以上是关于为了在模式中创建表,角色需要的完整权限列表是啥?的主要内容,如果未能解决你的问题,请参考以下文章

授予权限以在 oracle sql 过程中创建表

达梦数据库的角色管理

无法在 Hive 中创建表

MySQL 数据库,如何分角色权限建表?

在数据库'master'中创建表权限被拒绝

各位高手,请问,在oracle中创建的用户都分配哪些权限?一般分配哪些权限?