Snowflake cloud data platform 雪花用户的默认角色不存在

Snowflake cloud data platform 雪花用户的默认角色不存在,snowflake-cloud-data-platform,Snowflake Cloud Data Platform,我希望使用以下脚本为单个用户创建一个具有访问权限的数据库: 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 RO

我希望使用以下脚本为单个用户创建一个具有访问权限的数据库:

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;
尝试使用新创建的用户登录时,或从 另一个服务,我看到以下错误:

用户配置的默认角色“新角色”不存在或不存在 经授权的。请与本地系统管理员联系,或尝试 使用带有连接字符串的CLI客户端登录,然后选择另一个客户端

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


允许为我的新用户设置默认角色缺少什么?

假设您发布的命令是复制/粘贴的,那么问题可能是因为您的

默认角色=“新角色”

不应在引号中包含角色名称:

默认角色=新角色

?

文档链接中的示例如下所示:

该文档中的ALTER命令的角色名确实在引号中,但这可能是一个错误,或者该名称实际上也应该在大写字母中


我希望这会有所帮助…Rich

您应该删除角色名称周围的引号:DEFAULT\u role=new\u role

角色名称区分大小写,语法与列名类似: COL_NAME、COL_NAME和COL_NAME相同,但COL_NAME不同,即小写

我建议您不要引用这样的标识符,让系统隐式地将任何大小写中的引用转换为大写。大多数人都是这样做的

所有这些设置默认_角色的方法都有效且相同:

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';
但是,以下内容与上述内容不同,因为角色名称区分大小写:

ALTER USER u SET DEFAULT_ROLE = 'new_role';
ALTER USER u SET DEFAULT_ROLE = "new_role";
默认的_角色只是一个文本属性,可以设置为任何内容,例如不存在的角色或未授予用户的角色。两者都将在登录时生成错误

使用以下命令查看生效的默认_角色设置的确切名称:

DESC USER u;
注意:默认的_角色设置不是角色授予!
您还需要将角色r授予用户u。

这很奇怪,因为雪花将字符串从用户输入更改为所有大写。因此,您可以成功地创建一个名为lower的名称,它需要被引用为UPPER。我不确定您的意思。不带引号的引用被转换为大写,但这并不是什么新鲜事,这是大多数SQL实体对大多数数据库的工作方式。列名称和列名称相同。然而,如果你真的想离开堪萨斯州,你可以使用引用的\u IDENTIFIERS\u IGNORE\u CASE参数…中的详细信息
DESC USER u;