Snowflake 用户的默认角色不存在
Snowflake User's Default Role Does Not Exist
我希望使用以下脚本创建一个可供单个用户访问的数据库:
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;
尝试使用新创建的用户登录或从
另一项服务,我看到以下错误:
User's configured default role 'new_role' does not exist or not
authorized. Contact your local system administrator, or attempt to
login using a CLI client with a connect string selecting another
将默认角色设置为 PUBLIC
允许我从 Snowflake 门户网站登录。然后我可以 select 所需的角色并按预期导航。第三方连接无法访问任何新创建的对象,大概是因为它没有尝试切换角色。
允许为我的新用户设置默认角色缺少什么?
假设您发布的命令是 copy/pasted,问题可能是因为您的
DEFAULT_ROLE='new_role'
角色名称不应包含在引号中:
DEFAULT_ROLE = NEW_ROLE
?
文档link中的示例如下:
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 命令确实在引号中包含了角色名称,但这可能是一个错误,或者该名称实际上也应该大写。
希望对你有帮助...丰富
您应该删除角色名称两边的引号: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';
但是以下内容与上面不同,因为 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
。
我希望使用以下脚本创建一个可供单个用户访问的数据库:
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;
尝试使用新创建的用户登录或从 另一项服务,我看到以下错误:
User's configured default role 'new_role' does not exist or not authorized. Contact your local system administrator, or attempt to login using a CLI client with a connect string selecting another
将默认角色设置为 PUBLIC
允许我从 Snowflake 门户网站登录。然后我可以 select 所需的角色并按预期导航。第三方连接无法访问任何新创建的对象,大概是因为它没有尝试切换角色。
允许为我的新用户设置默认角色缺少什么?
假设您发布的命令是 copy/pasted,问题可能是因为您的
DEFAULT_ROLE='new_role'
角色名称不应包含在引号中:
DEFAULT_ROLE = NEW_ROLE
?
文档link中的示例如下: 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 命令确实在引号中包含了角色名称,但这可能是一个错误,或者该名称实际上也应该大写。
希望对你有帮助...丰富
您应该删除角色名称两边的引号: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';
但是以下内容与上面不同,因为 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
。