Aar*_*nin 3 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 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;
Run Code Online (Sandbox Code Playgroud)
尝试使用新创建的用户登录或从其他服务连接时,我看到以下错误:
用户配置的默认角色“new_role”不存在或未经授权。联系您的本地系统管理员,或尝试使用带有连接字符串的 CLI 客户端登录,并选择另一个
将默认角色设置为PUBLIC允许我从 Snowflake Web 门户登录。然后,我可以选择所需的角色并按预期进行导航。第三方连接无法访问任何新创建的对象,大概是因为它没有尝试切换角色。
允许为我的新用户设置默认角色缺少什么?
您应该删除角色名称周围的引号: DEFAULT_ROLE = new_role
ROLE名称是区分大小写的,而语法就像是列名:
COL_NAME,col_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';
Run Code Online (Sandbox Code Playgroud)
但是,以下内容与上述不同,因为ROLE名称区分大小写:
ALTER USER u SET DEFAULT_ROLE = 'new_role';
ALTER USER u SET DEFAULT_ROLE = "new_role";
Run Code Online (Sandbox Code Playgroud)
这DEFAULT_ROLE只是一个文本属性,可以设置为任何内容,例如。不存在的角色或未授予用户的角色。两者都会在登录时产生错误。
使用以下命令查看DEFAULT_ROLE有效设置的确切名称:
DESC USER u;
Run Code Online (Sandbox Code Playgroud)
注意:该DEFAULT_ROLE设置不是角色授予!
你也需要使用GRANT ROLE r TO USER u。
| 归档时间: |
|
| 查看次数: |
2948 次 |
| 最近记录: |