【问题标题】:Unable to setup Simple Authentication on Gremlin无法在 Gremlin 上设置简单身份验证
【发布时间】:2021-03-09 12:44:07
【问题描述】:

我们正在尝试启用简单的身份验证,并使用 JanusGraphSimpleAuthenticator 和 HttpBasicAuthenticationHandler 以及存储在 Cassandra 密钥空间中的凭据在 Gremlin 服务器上添加用户。

Gremlin 服务器 yaml:

authentication: {
   authenticator: org.janusgraph.graphdb.tinkerpop.gremlin.server.auth.JanusGraphSimpleAuthenticator,
   #authenticationHandler: org.apache.tinkerpop.gremlin.server.handler.HttpBasicAuthenticationHandler,
   authenticationHandler: org.apache.tinkerpop.gremlin.server.handler.SaslAuthenticationHandler,
   config: {
     defaultUsername: "atul",
     defaultPassword: "password123",
     credentialsDb: conf/janusgraph-credentials-server.properties
    }
 }


janusgraph-credentials-server.properties
gremlin.graph=org.janusgraph.core.JanusGraphFactory
storage.backend=cql
storage.host=127.0.0.1
storage.cql.keyspace=userslist1

GremlinServer 正常启动,但无法继续创建凭据数据库

但在创建用户时在控制台上出现此异常

-----oOOo-(3)-oOOo-----
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/janusgraph-0.5.3/lib/slf4j-log4j12-1.7.12.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/janusgraph-0.5.3/lib/logback-classic-1.1.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
plugin activated: janusgraph.imports
plugin activated: tinkerpop.server
plugin activated: tinkerpop.utilities
plugin activated: tinkerpop.credentials
18:01:50 WARN  org.apache.hadoop.util.NativeCodeLoader  - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
plugin activated: tinkerpop.hadoop
plugin activated: tinkerpop.spark
plugin activated: tinkerpop.tinkergraph
gremlin> :remote connect tinkerpop.server conf/remote.yaml session
==>Configured localhost/127.0.0.1:8182-[67de01d1-2340-4d0d-81fc-df549884cbb5]
gremlin> :remote console
==>All scripts will now be sent to Gremlin Server - [localhost/127.0.0.1:8182]-[67de01d1-2340-4d0d-81fc-df549884cbb5] - type ':remote console' to return to local mode
gremlin> graph=JanusGraphFactory.open("conf/janusgraph-credentials-server.properties")
==>standardjanusgraph[cql:[127.0.0.1]]
gremlin> credential=credentials(graph)
No signature of method: org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine.credentials() is applicable for argument types: (org.janusgraph.graphdb.database.StandardJanusGraph) values: [standardjanusgraph[cql:[127.0.0.1]]]
Type ':help' or ':h' for help.
Display stack trace? [yN]

Also observed following error on gremlin-server:

360359 [metrics-csv-reporter-thread-1] WARN  com.codahale.metrics.CsvReporter  - Error writing to org.apache.tinkerpop.gremlin.server.GremlinServer.op.eval
java.io.IOException: Permission denied
    at java.io.UnixFileSystem.createFileExclusively(Native Method)
    at java.io.File.createNewFile(File.java:1014)
    at com.codahale.metrics.CsvReporter.report(CsvReporter.java:241)
    at com.codahale.metrics.CsvReporter.reportTimer(CsvReporter.java:173)
    at com.codahale.metrics.CsvReporter.report(CsvReporter.java:166)
    at com.codahale.metrics.ScheduledReporter.report(ScheduledReporter.java:116)
    at com.codahale.metrics.ScheduledReporter$1.run(ScheduledReporter.java:87)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)

如果有人帮助突出显示使用 gremlin-server 3.4.6 和 cassandra 启用简单身份验证可能需要的任何其他步骤,请不胜感激。

谢谢, 阿图尔

【问题讨论】:

  • 确保还使用storage.usernamestorage.password 定义您的Cassandra 凭据。
  • 另外,credential=credentials(graph) 是有效的 Gremlin 命令吗?如果您正在尝试构建本地 credential 图表,我想您应该运行这个:credential = graph.traversal()
  • 嗨 Aaron,我尝试在我的凭据服务器属性中设置用户名和密码,但仍然遇到同样的错误。实际上我认为我需要使用 credential = credentials(graph) 因为我正在尝试创建凭据图,我希望我可以在其中为特定图配置用户。但是在开始创建凭证图时仍然遇到上述错误。

标签: cassandra gremlin janusgraph gremlin-server


【解决方案1】:

从上面的 cmets 来看,我认为 Aaron 是正确的。这个语法:

gremlin> credential=credentials(graph)

long been removed 回到 3.3.3。请在 3.4.6 here 的参考文档中找到最新的语法,但基本上如 Aaron 所述:

gremlin> credentials = graph.traversal(CredentialTraversalSource.class)
==>credentialtraversalsource[tinkergraph[vertices:0 edges:0], standard]
gremlin> credentials.user("stephen","password")
==>v[0]
gremlin> credentials.user("daniel","better-password")
==>v[3]
gremlin> credentials.user("marko","rainbow-dash")
==>v[6]

最近,在 3.4.9 中,首选如下:

gremlin> credentials = traversal(CredentialTraversalSource.class).withEmbedded(graph)
==>credentialtraversalsource[tinkergraph[vertices:0 edges:0], standard]

【讨论】:

  • 谢谢你的解释,斯蒂芬!我知道那里看起来不太对劲。
猜你喜欢
  • 2020-08-28
  • 1970-01-01
  • 1970-01-01
  • 2021-04-15
  • 2022-11-18
  • 1970-01-01
  • 2012-08-06
  • 2017-11-12
  • 1970-01-01
相关资源
最近更新 更多