Search code examples
hiveamazon-emrprestotrino

Access denied - EMR Presto - File Based Authorization


I have a strange issue while querying from Presto (AWS EMR). I was using Presto 0.194 and everything was ok, after I upgraded to 0.224, I cannot run my queries. I'm using LDAP authentication for presto and also file base authorization for Hive using a authorization.json file. I'm using the same json file which was working fine in the old version. Any help would highly appreciated.

Error: Query 20191005_104119_00006_3snge failed: Access Denied: View owner 'username' cannot create view that selects from ...

config.propertis:

coordinator=true
node-scheduler.include-coordinator=false
discovery.uri=http://IP.ap-southeast-1.compute.internal:8889
http-server.threads.max=500
discovery-server.enabled=true
sink.max-buffer-size=1GB
query.max-memory=30GB
query.max-memory-per-node=6532645258B
query.max-total-memory-per-node=7839174309B
query.max-history=40
query.min-expire-age=30m
http-server.http.port=8889
http-server.log.path=/var/log/presto/http-request.log
http-server.log.max-size=67108864B
http-server.log.max-history=5
log.max-size=268435456B
log.max-history=5
query.execution-policy=phased
optimizer.dictionary-aggregation=true
optimizer.optimize-metadata-queries=true
colocated-joins-enabled=true
http-server.authentication.type=PASSWORD
http-server.https.enabled=true
http-server.https.port=9443
http-server.https.keystore.path=/etc/presto/presto_keystore.jks
http-server.https.keystore.key=passw0rd
node-scheduler.max-splits-per-node=125
optimizer.use-mark-distinct=false 

hive.properties:

hive.metastore-refresh-interval=1m
connector.name=hive-hadoop2
hive.metastore.uri=thrift://ip-10-0-2-141.ap-southeast- 
1.compute.internal:9083
hive.metastore-cache-ttl=20m
hive.config.resources=/etc/hadoop/conf/core- 
site.xml,/etc/hadoop/conf/hdfs-site.xml
hive.non-managed-table-writes-enabled = true
hive.s3-file-system-type = EMRFS
hive.hdfs.authentication.type = NONE
hive.hdfs.impersonation.enabled = true
hive.orc.bloom-filters.enabled=true
hive.recursive-directories=true
hive.s3select-pushdown.enabled=true
hive.security=file
security.config-file=/etc/presto/conf.dist/authorization.json

authorization.json:

{
"schemas": [
{
  "user": "prestoSA",
  "owner": true
},
{
  "user": "marketing_jack",
  "owner": true
},
{
  "user": "system-apiquery",
  "owner": true
},
{
  "user": "redash",
  "owner": true
},
{
  "user": "system_.*",
  "schema": "prestosync_.*",
  "owner": true
},
{
  "user": "system_.*",
  "schema": "views_.*",
  "owner": true
},
{
  "user": "system_.*",
  "schema": "raw_.*",
  "owner": true
}
],
"tables": [
{
  "user": "prestoSA",
  "privileges": [
    "SELECT",
    "INSERT",
    "DELETE",
    "OWNERSHIP"
  ]
},
{
  "user": "redash",
  "privileges": [
    "SELECT"
  ]
},
{
  "schema": "raw_.*",
  "user": "system_.*",
  "privileges": [
    "SELECT",
    "INSERT",
    "DELETE",
    "OWNERSHIP"
  ]
},
{
  "schema": "production_.*",
  "user": "system_.*",
  "privileges": [
    "SELECT",
    "INSERT",
    "DELETE",
    "OWNERSHIP"
  ]
},
{
  "schema": "prestosync_.*",
  "user": "system_.*",
  "privileges": [
    "SELECT",
    "INSERT",
    "DELETE",
    "OWNERSHIP"
  ]
},
{
  "schema": "views_.*",
  "user": "system_.*",
  "privileges": [
    "SELECT",
    "INSERT",
    "DELETE",
    "OWNERSHIP"
  ]
},
{
  "schema": ".*dev",
  "user": "developer_.*",
  "privileges": [
    "SELECT"
  ]
},
{
  "schema": "raw_rin",
  "user": "developer_.*",
  "privileges": [
    "SELECT"
  ]
},
{
  "schema": ".*prod",
  "user": "developer_.*",
  "privileges": [
    "SELECT"
  ]
},
{
  "schema": "views_development_.*",
  "user": "marketing_.*",
  "privileges": [
    "SELECT"
  ]
},
{
  "schema": "views_prod",
  "user": "marketing_.*",
  "privileges": [
    "SELECT"
  ]
},
{
  "schema": "views_dev",
  "user": "sales_.*",
  "privileges": [
    "SELECT"
  ]
},
{
  "schema": "views_prod",
  "user": "sales_.*",
  "privileges": [
    "SELECT"
  ]
},
{
  "schema": "emr59_prod",
  "user": "marketing_.*",
  "privileges": [
    "SELECT"
  ]
},
{
  "schema": "views_dev",
  "user": "management_.*",
  "privileges": [
    "SELECT"
  ]
},
{
  "schema": "views_prod",
  "user": "management_.*",
  "privileges": [
    "SELECT"
  ]
},
{
  "schema": "views_dev",
  "user": "management_.*",
  "privileges": [
    "SELECT"
  ]
},
{
  "schema": "views_prod",
  "user": "management_.*",
  "privileges": [
    "SELECT"
  ]
}
]
}

acceess-control.properties:

access-control.name=file
security.config-file=/etc/presto/conf.dist/rules.json

rules.json:

{
"catalogs": [
 {
  "user": "system_.*",
  "catalog": "(mysql|system)",
  "allow": true
},
{
  "user": "prestoSA",
  "catalog": "(mysql|system)",
  "allow": true
},
{
  "user": "redash",
  "catalog": "(mysql|system)",
  "allow": true
},
{
  "user": "developer_.*",
  "catalog": "(mysql|hive)",
  "allow": true
},
{
  "catalog": "hive",
  "allow": true
},
{
  "catalog": "system",
  "allow": false
}
]
}

Solution

  • Error: Query 20191005_104119_00006_3snge failed: Access Denied: View owner 'username' cannot create view that selects from ...

    This means that username does not have GRANT_SELECT privilege on a particular table or tables.

    The particular change that affects you went in in 0.199 release: https://github.com/prestosql/presto/commit/6ed1ed88083baef1d29171364297631962adf05d This was a bug fix (creating view should require different privileges), so it is intentional (although inconvenient) that the change did not maintain backward compatibility.

    BTW For one-time troubleshooting-style questions which are unlikely to be beneficial for SO community I recommend using #troubleshooting channel on Presto Community Slack