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"
    }
}

项目标签

虽然项目名称不区分大小写,但项目标签区分大小写。值为 mytag 的标签与 MyTag 不同,并且这两个值都可以存储在同一个项目中。

角色

角色名称不区分大小写。例如,当 keystone 引导默认角色时,它会创建“admin”、“member”和“reader”。如果创建了另一个角色“Member”(注意大写字母‘M’),keystone 将返回 409 冲突,因为它认为名称“Member”与“member”相同。请注意,在这种情况下,大小写将被保留。

注意

从 Rocky 版本开始,当运行 keystone-manage bootstrap 时,keystone 将创建三个默认角色:(adminmemberreader)。对于现有部署,如果现有角色与这些角色中的一个匹配,则可能会导致问题。即使大小写不完全匹配(memberMember),它也会报告错误,因为角色被认为是不区分大小写的。

后端

对于这些示例中的每一个,我们将参考名称为“mYpRoJeCt”的现有项目和名称为“mYuSeR”的用户。这里的示例被夸大,以帮助显示每个后端的大小写处理方式。

MySQL & SQLite

默认情况下,MySQL/SQLite 对于 varchar 是不区分大小写但保留大小写的。这意味着设置项目名称为“mYpRoJeCt”会导致尝试创建名称为“myproject”的新项目失败,keystone 返回 409 冲突。但是,原始值“mYpRoJeCt”仍将被返回,因为保留了大小写。

用户将受到相同的对待,如果添加了另一个名称为“myuser”的用户,keystone 将响应 409 冲突,因为另一个具有(相同)名称的用户存在(“mYuSeR”)。

PostgreSQL

PostgreSQL 默认情况下区分大小写,因此如果使用现有的“mYpRoJeCt”创建了名称为“myproject”的项目,则将成功创建。

LDAP

默认情况下,LDAP DN 不区分大小写,因此 MySQL 中的示例也适用于此处。