MarkLogic 8 用户名和角色中允许使用哪些字符?
Which characters are allowed in MarkLogic 8 usernames and roles?
我尝试在 MarkLogic 中设置一个用户,用户名等于电子邮件地址 ("demo@wildspaces.com"),似乎我可以创建用户但不能创建相应的角色。
我创建了用户,但是当我想为它添加一个角色时:
sec.userAddRoles(user,role)
这会产生如下错误:
2016-03-11 20:00:48.820 Notice: api-cluey-app: in /v1/projects.sjs, at 182:26, in projPost() [javascript]
2016-03-11 20:00:48.820 Notice: api-cluey-app: in [anonymous], at 1:67,
2016-03-11 20:00:48.820 Notice: api-cluey-app: in xdmp:eval("declareUpdate(); var sec = require('/MarkLogic/security.xqy'); s...", {role:"scc-proj-8327360-owner", user:"bill@wildspaces.com"}, {isolation:"different-transaction", userId:"11821709629759202109", database:"17312114676051821586"}) [javascript]
2016-03-11 20:00:48.820 Notice: api-cluey-app: in /v1/projects.sjs [javascript]
2016-03-11 20:00:48.820 Notice: api-cluey-app: in /v1/projects.sjs [javascript]
2016-03-11 20:00:49.416 Info: api-cluey-app: Status 500: XDMP-LEXVAL: sec:role-name("bill@wildspaces.com") -- Invalid lexical value "demo@wildspaces.com"
如果我尝试查看管理安全数据库,情况会变得更糟:
You've encountered an error in the server. If you have a maintenance contract, you can open a support ticket by copying the text below and emailing support@marklogic.com. Otherwise, please see our community Q & A resources for help with this issue:
500: Internal Server Error
XDMP-LEXVAL: sec:role-name("demo@wildspaces.com") -- Invalid lexical value "demo@wildspaces.com"
In /MarkLogic/Admin/lib/session.xqy on line 595
In get-session-role()
$role = ()
$u = fn:doc("http://marklogic.com/xdmp/roles/6750406636815962640")/sec:role
In /MarkLogic/Admin/lib/nav-format.xqy on line 2486
In role-nav("security", "summary", "role", "")
$section = "security"
$panel = "summary"
$param = "role"
$icon = ""
$t = "section=security"
$npan = "summary"
$u = fn:doc("http://marklogic.com/xdmp/roles/6966198486234205304")/sec:role
$uid = fn:doc("http://marklogic.com/xdmp/roles/6966198486234205304")/sec:role/sec:role-id
$args = "section=security&role=6966198486234205304"
$uname = sec:role-name("davida")
In /MarkLogic/Admin/lib/nav-format.xqy on line 2392
In security-nav("security", "summary", "role", "")
$section = "security"
$panel = "summary"
$param = "role"
$icon = ""
$panel = "summary"
In /MarkLogic/Admin/lib/nav-format.xqy on line 2358
In printNav("security", "summary", "role", "")
$section = "security"
$panel = "summary"
$param = "role"
$icon = ""
$sec = "security"
$start-time = xs:dayTimeDuration("PT0.001403S")
In /MarkLogic/Admin/lib/role-summary-form.xqy on line 87
In roleSummaryPage()
In /role-summary.xqy on line 16
所以我的问题是:有效的 MarkLogic 用户名和角色中允许使用哪些字符?似乎找不到任何相关文档?
您可以在 MarkLogic 附带的模式中找到类型定义。在 Mac 上,他们在 ~/Library/MarkLogic/Config
;在 Linux、/opt/MarkLogic/Config/
上。有问题的模式是 security.xsd
,它具有以下 role-name
的类型定义:
<xs:simpleType name="role-name">
<xs:annotation>
<xs:documentation>
</xs:documentation>
<xs:appinfo>
</xs:appinfo>
</xs:annotation>
<xs:restriction base="xs:NMTOKEN">
<xs:minLength value="1"/>
</xs:restriction>
</xs:simpleType>
xs:NMTOKEN
在这里定义:https://www.w3.org/TR/xml11/#NT-Nmtoken. It's a valid NameStartChar
followed by any number of NameChar
。 换句话说,它是一个有效的 XML 本地名称。(更新:这是不正确的;一个 XML 本地-名称比 NMTOKEN 更严格。)
在 XQuery 中,您可以像这样检查有效名称:
"demo@wildspaces.com" castable as xs:NMTOKEN
其中 returns false
.
更新:
对不起,我错过了后续问题。
所有 XML 模式类型都有内置的 constructor/conversion 函数,这些函数通过对其参数应用类型转换来工作。这些类型构造函数在服务器端 JS 中可用,在全局 xs
对象下:
var isValid
try {
isValid = !!xs.NMTOKEN("test%")
} catch(err) {
isValid = false
}
我尝试在 MarkLogic 中设置一个用户,用户名等于电子邮件地址 ("demo@wildspaces.com"),似乎我可以创建用户但不能创建相应的角色。
我创建了用户,但是当我想为它添加一个角色时:
sec.userAddRoles(user,role)
这会产生如下错误:
2016-03-11 20:00:48.820 Notice: api-cluey-app: in /v1/projects.sjs, at 182:26, in projPost() [javascript]
2016-03-11 20:00:48.820 Notice: api-cluey-app: in [anonymous], at 1:67,
2016-03-11 20:00:48.820 Notice: api-cluey-app: in xdmp:eval("declareUpdate(); var sec = require('/MarkLogic/security.xqy'); s...", {role:"scc-proj-8327360-owner", user:"bill@wildspaces.com"}, {isolation:"different-transaction", userId:"11821709629759202109", database:"17312114676051821586"}) [javascript]
2016-03-11 20:00:48.820 Notice: api-cluey-app: in /v1/projects.sjs [javascript]
2016-03-11 20:00:48.820 Notice: api-cluey-app: in /v1/projects.sjs [javascript]
2016-03-11 20:00:49.416 Info: api-cluey-app: Status 500: XDMP-LEXVAL: sec:role-name("bill@wildspaces.com") -- Invalid lexical value "demo@wildspaces.com"
如果我尝试查看管理安全数据库,情况会变得更糟:
You've encountered an error in the server. If you have a maintenance contract, you can open a support ticket by copying the text below and emailing support@marklogic.com. Otherwise, please see our community Q & A resources for help with this issue:
500: Internal Server Error
XDMP-LEXVAL: sec:role-name("demo@wildspaces.com") -- Invalid lexical value "demo@wildspaces.com"
In /MarkLogic/Admin/lib/session.xqy on line 595
In get-session-role()
$role = ()
$u = fn:doc("http://marklogic.com/xdmp/roles/6750406636815962640")/sec:role
In /MarkLogic/Admin/lib/nav-format.xqy on line 2486
In role-nav("security", "summary", "role", "")
$section = "security"
$panel = "summary"
$param = "role"
$icon = ""
$t = "section=security"
$npan = "summary"
$u = fn:doc("http://marklogic.com/xdmp/roles/6966198486234205304")/sec:role
$uid = fn:doc("http://marklogic.com/xdmp/roles/6966198486234205304")/sec:role/sec:role-id
$args = "section=security&role=6966198486234205304"
$uname = sec:role-name("davida")
In /MarkLogic/Admin/lib/nav-format.xqy on line 2392
In security-nav("security", "summary", "role", "")
$section = "security"
$panel = "summary"
$param = "role"
$icon = ""
$panel = "summary"
In /MarkLogic/Admin/lib/nav-format.xqy on line 2358
In printNav("security", "summary", "role", "")
$section = "security"
$panel = "summary"
$param = "role"
$icon = ""
$sec = "security"
$start-time = xs:dayTimeDuration("PT0.001403S")
In /MarkLogic/Admin/lib/role-summary-form.xqy on line 87
In roleSummaryPage()
In /role-summary.xqy on line 16
所以我的问题是:有效的 MarkLogic 用户名和角色中允许使用哪些字符?似乎找不到任何相关文档?
您可以在 MarkLogic 附带的模式中找到类型定义。在 Mac 上,他们在 ~/Library/MarkLogic/Config
;在 Linux、/opt/MarkLogic/Config/
上。有问题的模式是 security.xsd
,它具有以下 role-name
的类型定义:
<xs:simpleType name="role-name">
<xs:annotation>
<xs:documentation>
</xs:documentation>
<xs:appinfo>
</xs:appinfo>
</xs:annotation>
<xs:restriction base="xs:NMTOKEN">
<xs:minLength value="1"/>
</xs:restriction>
</xs:simpleType>
xs:NMTOKEN
在这里定义:https://www.w3.org/TR/xml11/#NT-Nmtoken. It's a valid NameStartChar
followed by any number of NameChar
。 换句话说,它是一个有效的 XML 本地名称。(更新:这是不正确的;一个 XML 本地-名称比 NMTOKEN 更严格。)
在 XQuery 中,您可以像这样检查有效名称:
"demo@wildspaces.com" castable as xs:NMTOKEN
其中 returns false
.
更新:
对不起,我错过了后续问题。
所有 XML 模式类型都有内置的 constructor/conversion 函数,这些函数通过对其参数应用类型转换来工作。这些类型构造函数在服务器端 JS 中可用,在全局 xs
对象下:
var isValid
try {
isValid = !!xs.NMTOKEN("test%")
} catch(err) {
isValid = false
}