# Named graph security: 'Invalid resource name'

**URL:** <https://community.stardog.com/t/named-graph-security-invalid-resource-name/1567>\
**Category:** Support\
**Created:** [April 4, 2019, 2:11am UTC](https://community.stardog.com/t/named-graph-security-invalid-resource-name/1567 "2019-04-04T02:11:03Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![conradL](https://yyz2.discourse-cdn.com/flex030/user_avatar/community.stardog.com/conradl/32/170_2.png) [@conradL](https://community.stardog.com/u/conradL)\
**Post date:** [April 4, 2019, 2:11am UTC](https://community.stardog.com/t/named-graph-security-invalid-resource-name/1567/1 "2019-04-04T02:11:03Z")

</div>

Using version 5.3.4 in production.

I've enabled `security.named.graphs=true` for a database `ng-test`, and am trying to assign some user permissions, but when the named graph IRI has a hash symbol in it I get the following:

```auto
stardog-admin --server https://myHost user grant -u stardog-admin -a read -o named-graph:ng-test\\http://purl.org/net/grafli#tbox -- grafli-r-conradL

Invalid resource name

```

The command works fine when the graph IRI does not contain a hash.

I'm pretty sure this used to work in version 4.x

---

<div class="post-metadata">

**Author:** ![jess](https://yyz2.discourse-cdn.com/flex030/user_avatar/community.stardog.com/jess/32/10_2.png) [@jess](https://community.stardog.com/u/jess)\
**Post date:** [April 4, 2019, 11:14am UTC](https://community.stardog.com/t/named-graph-security-invalid-resource-name/1567/2 "2019-04-04T11:14:17Z")

</div>

You should escape it or add quotes so the shell doesn't interpret it as a comment.

Jess

---

<div class="post-metadata">

**Author:** ![conradL](https://yyz2.discourse-cdn.com/flex030/user_avatar/community.stardog.com/conradl/32/170_2.png) [@conradL](https://community.stardog.com/u/conradL)\
**Post date:** [April 4, 2019, 11:56am UTC](https://community.stardog.com/t/named-graph-security-invalid-resource-name/1567/3 "2019-04-04T11:56:15Z")

</div>

nope; neither escaping, nor single nor double quotes work. I would expect the shell would only interpret a space followed by hash as a comment anyhow.

---

<div class="post-metadata">

**Author:** ![conradL](https://yyz2.discourse-cdn.com/flex030/user_avatar/community.stardog.com/conradl/32/170_2.png) [@conradL](https://community.stardog.com/u/conradL)\
**Post date:** [April 5, 2019, 12:42am UTC](https://community.stardog.com/t/named-graph-security-invalid-resource-name/1567/4 "2019-04-05T00:42:25Z")

</div>

I've tried using the HTTP API directly, same result:

```auto
curl \
    -H "Content-Type: application/json" \
    -X "PUT" \
    --user stardog-admin: **** \
    --data '{"action":"READ","resource_type":"named-graph","resource":["grafli-gqa-test\\http://purl.org/net/grafli#tbox"]}' \ 
    https://myHost:5820/admin/permissions/role/grafliGqaTestWriter

{ "message" : "invalid resource: 'grafli-gqa-test\http://purl.org/net/grafli#tbox'."}

```

---

<div class="post-metadata">

**Author:** ![conradL](https://yyz2.discourse-cdn.com/flex030/user_avatar/community.stardog.com/conradl/32/170_2.png) [@conradL](https://community.stardog.com/u/conradL)\
**Post date:** [April 5, 2019, 1:58am UTC](https://community.stardog.com/t/named-graph-security-invalid-resource-name/1567/5 "2019-04-05T01:58:59Z")

</div>

And also using the Java API, same result:

```auto
import com.typesafe.config.ConfigFactory
import com.typesafe.config.ConfigValueFactory
  
import com.complexible.common.rdf.model.Values
import com.complexible.stardog.security.NamedGraphPermissions
  
import au.edu.qimr.stardog.ConnectionFactory

val adminConfig = ConfigFactory
    .load(getClass.getClassLoader)
    .getConfig("stardog.adminConnection")
    .withValue("hostname", ConfigValueFactory.fromAnyRef(" ****"))
    .withValue("username", ConfigValueFactory.fromAnyRef("stardog-admin"))
val conn = ConnectionFactory.getAdminConnection(adminConfig)
val perms = NamedGraphPermissions
    .on(conn.get.getPermissionManager, "grafli-gqa-test")
    .read(Values.iri("http://purl.org/net/grafli#tbox"))
    .grantRole("grafliGqaTestWriter")

```

run it:

```auto
com.complexible.stardog.protocols.http.client.BaseHttpClient$HttpClientException: invalid resource: 'http://purl.org/net/grafli#tbox'.
	at com.complexible.stardog.protocols.http.client.BaseHttpClient.checkResponseCode(BaseHttpClient.java:537)
	at com.complexible.stardog.protocols.http.client.BaseHttpClient.execute(BaseHttpClient.java:363)
	at com.complexible.stardog.protocols.http.client.BaseHttpClient.executeHttpPut(BaseHttpClient.java:635)
	at com.complexible.stardog.protocols.http.client.HttpAdminClientImpl.addRolePerm(HttpAdminClientImpl.java:160)
	at com.complexible.stardog.security.NamedGraphPermissions.modifyPermissions(NamedGraphPermissions.java:125)
	at com.complexible.stardog.security.NamedGraphPermissions.grantRole(NamedGraphPermissions.java:83)
	at Main$$anon$1.<init>(setNgPerms.scala:18)
	at Main$.main(setNgPerms.scala:1)
	at Main.main(setNgPerms.scala)

```

reading the stack trace, this is in the response from the client after it's executed the command, so it's server-side issue.

---

<div class="post-metadata">

**Author:** ![system](https://canada1.discourse-cdn.com/flex030/uploads/stardog/original/2X/e/ed66b48a616f505106a4acde3c9cee7e6da9bc67.svg) [@system](https://community.stardog.com/u/system)\
**Post date:** [April 19, 2019, 1:59am UTC](https://community.stardog.com/t/named-graph-security-invalid-resource-name/1567/6 "2019-04-19T01:59:02Z")

</div>

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.
