keystone 中的大小写敏感性¶
Keystone 当前对每种资源的命名处理大小写敏感性略有不同,具体取决于资源本身以及使用的后端。例如,根据用户是基于本地 SQL 还是 LDAP,大小写敏感性可能会有所不同。当不区分大小写时,大小写将被保留。例如,名称为“myProject”的项目不会最终更改为全部小写或大写。
keystone 中的资源¶
以下是 keystone 中用户、项目和角色的不区分大小写示例。
用户¶
如果已存在名称为“MyUser”的用户,则以下创建名称为“myuser”的新用户的调用将返回 409 冲突
POST /v3/users
{
"user": {
"name": "myuser"
}
}
项目¶
如果已存在名称为“Foobar”的项目,则以下创建名称为“foobar”的新项目的调用将返回 409 冲突
POST /v3/projects
{
"project": {
"name": "foobar"
}
}
角色¶
角色名称不区分大小写。例如,当 keystone 引导默认角色时,它会创建“admin”、“member”和“reader”。如果创建了另一个角色“Member”(注意大写字母‘M’),keystone 将返回 409 冲突,因为它认为名称“Member”与“member”相同。请注意,在这种情况下,大小写将被保留。
注意
从 Rocky 版本开始,当运行 keystone-manage bootstrap 时,keystone 将创建三个默认角色:(admin、member、reader)。对于现有部署,如果现有角色与这些角色中的一个匹配,则可能会导致问题。即使大小写不完全匹配(member 与 Member),它也会报告错误,因为角色被认为是不区分大小写的。
后端¶
对于这些示例中的每一个,我们将参考名称为“mYpRoJeCt”的现有项目和名称为“mYuSeR”的用户。这里的示例被夸大,以帮助显示每个后端的大小写处理方式。
MySQL & SQLite¶
默认情况下,MySQL/SQLite 对于 varchar 是不区分大小写但保留大小写的。这意味着设置项目名称为“mYpRoJeCt”会导致尝试创建名称为“myproject”的新项目失败,keystone 返回 409 冲突。但是,原始值“mYpRoJeCt”仍将被返回,因为保留了大小写。
用户将受到相同的对待,如果添加了另一个名称为“myuser”的用户,keystone 将响应 409 冲突,因为另一个具有(相同)名称的用户存在(“mYuSeR”)。
PostgreSQL¶
PostgreSQL 默认情况下区分大小写,因此如果使用现有的“mYpRoJeCt”创建了名称为“myproject”的项目,则将成功创建。
LDAP¶
默认情况下,LDAP DN 不区分大小写,因此 MySQL 中的示例也适用于此处。