雪花用户的默认角色不存在

时间:2019-11-14 00:50:30

标签: snowflake-data-warehouse

我正在寻找使用以下脚本创建具有单个用户访问权限的数据库:

USE ROLE ACCOUNTADMIN;
CREATE DATABASE db;
USE DATABASE db;
CREATE WAREHOUSE wh
    WAREHOUSE_SIZE = SMALL
    ;
CREATE ROLE new_role;
GRANT USAGE ON DATABASE db TO ROLE new_role;
GRANT CREATE SCHEMA ON DATABASE db TO ROLE new_role;
GRANT ALL ON SCHEMA db.PUBLIC TO ROLE new_role;
CREATE or replace USER new_user PASSWORD='' DEFAULT_ROLE = 'new_role' DEFAULT_WAREHOUSE='wh';
GRANT ROLE new_role TO USER new_user;
GRANT ALL ON WAREHOUSE wh TO new_role;

尝试使用新创建的用户登录或从以下位置连接时 另一项服务,我看到以下错误:

  

用户配置的默认角色'new_role'不存在   授权。请与您的本地系统管理员联系,或尝试   使用CLI客户端登录,并使用连接字符串选择另一个

将默认角色设置为PUBLIC,使我可以从Snowflake Web门户登录。然后,我可以选择所需的角色并按预期进行导航。第三方连接无法访问任何新创建的对象,大概是因为它没有尝试切换角色。

缺少什么可以为新用户设置默认角色?

2 个答案:

答案 0 :(得分:3)

假设您发布的命令已复制/粘贴,则可能是因为您的

DEFAULT_ROLE='new_role'

角色名称不能用引号引起来:

DEFAULT_ROLE = NEW_ROLE

docs链接中的示例如下: https://docs.snowflake.net/manuals/user-guide/admin-user-management.html#using-sql

create user janesmith password = 'abc123' default_role = myrole must_change_password = true;

该文档中的ALTER命令的角色名称确实用引号引起来,但这可能是错误的,或者该名称实际上也应该在CAPS中。

我希望这对您有帮助...丰富

答案 1 :(得分:3)

您应该删除角色名称周围的引号:DEFAULT_ROLE = new_role

ROLE名称​​区分大小写,语法类似于列名:
COL_NAMEcol_name"COL_NAME"相同,但是"col_name"不同,即小写。

我建议您引用此类标识符,并让系统将任何大小写形式的引用隐式转换为大写。大多数人就是这样做的。

所有这些设置DEFAULT_ROLE的方式都是有效的并且相等:

ALTER USER u SET DEFAULT_ROLE = NEW_ROLE;
ALTER USER u SET DEFAULT_ROLE = new_role;
ALTER USER u SET DEFAULT_ROLE = "NEW_ROLE";
ALTER USER u SET DEFAULT_ROLE = 'NEW_ROLE';

以下内容与上面的有所不同,因为ROLE名称区分大小写:

ALTER USER u SET DEFAULT_ROLE = 'new_role';
ALTER USER u SET DEFAULT_ROLE = "new_role";

DEFAULT_ROLE只是一个文本属性,可以设置为任何内容,例如。不存在的角色或未授予用户的角色。两者都会在登录时产生错误。

使用以下命令查看有效的DEFAULT_ROLE设置的确切名称:

DESC USER u;

注意:DEFAULT_ROLE设置不是角色授予!
您还需要使用GRANT ROLE r TO USER u