Skip to content

Commit 99856ff

Browse files
committed
Improve messages for column access error in FileBasedAccessControl
1 parent 3848661 commit 99856ff

File tree

4 files changed

+12
-11
lines changed

4 files changed

+12
-11
lines changed

lib/trino-plugin-toolkit/src/main/java/io/trino/plugin/base/security/FileBasedAccessControl.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@
8585
import static io.trino.spi.security.AccessDeniedException.denyRevokeRoles;
8686
import static io.trino.spi.security.AccessDeniedException.denyRevokeSchemaPrivilege;
8787
import static io.trino.spi.security.AccessDeniedException.denyRevokeTablePrivilege;
88-
import static io.trino.spi.security.AccessDeniedException.denySelectTable;
88+
import static io.trino.spi.security.AccessDeniedException.denySelectColumns;
8989
import static io.trino.spi.security.AccessDeniedException.denySetCatalogSessionProperty;
9090
import static io.trino.spi.security.AccessDeniedException.denySetMaterializedViewProperties;
9191
import static io.trino.spi.security.AccessDeniedException.denySetRole;
@@ -389,7 +389,7 @@ public void checkCanSelectFromColumns(ConnectorSecurityContext context, SchemaTa
389389
.findFirst()
390390
.orElse(false);
391391
if (!allowed) {
392-
denySelectTable(tableName.toString());
392+
denySelectColumns(tableName.toString(), columnNames);
393393
}
394394
}
395395

@@ -475,7 +475,7 @@ public void checkCanCreateViewWithSelectFromColumns(ConnectorSecurityContext con
475475
.findFirst()
476476
.orElse(null);
477477
if (rule == null || !rule.canSelectColumns(columnNames)) {
478-
denySelectTable(tableName.toString());
478+
denySelectColumns(tableName.toString(), columnNames);
479479
}
480480
if (!rule.getPrivileges().contains(GRANT_SELECT)) {
481481
denyCreateViewWithSelect(tableName.toString(), context.getIdentity());

lib/trino-plugin-toolkit/src/main/java/io/trino/plugin/base/security/FileBasedSystemAccessControl.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@
105105
import static io.trino.spi.security.AccessDeniedException.denyRevokeRoles;
106106
import static io.trino.spi.security.AccessDeniedException.denyRevokeSchemaPrivilege;
107107
import static io.trino.spi.security.AccessDeniedException.denyRevokeTablePrivilege;
108+
import static io.trino.spi.security.AccessDeniedException.denySelectColumns;
108109
import static io.trino.spi.security.AccessDeniedException.denySelectTable;
109110
import static io.trino.spi.security.AccessDeniedException.denySetCatalogSessionProperty;
110111
import static io.trino.spi.security.AccessDeniedException.denySetMaterializedViewProperties;
@@ -683,7 +684,7 @@ public void checkCanSelectFromColumns(SystemSecurityContext context, CatalogSche
683684
.findFirst()
684685
.orElse(false);
685686
if (!allowed) {
686-
denySelectTable(table.toString());
687+
denySelectColumns(table.toString(), columns);
687688
}
688689
}
689690

@@ -765,7 +766,7 @@ public void checkCanCreateViewWithSelectFromColumns(SystemSecurityContext contex
765766
.findFirst()
766767
.orElse(null);
767768
if (rule == null || !rule.canSelectColumns(columns)) {
768-
denySelectTable(table.toString());
769+
denySelectColumns(table.toString(), columns);
769770
}
770771
if (!rule.getPrivileges().contains(GRANT_SELECT)) {
771772
denyCreateViewWithSelect(table.toString(), context.getIdentity());

lib/trino-plugin-toolkit/src/test/java/io/trino/plugin/base/security/BaseFileBasedSystemAccessControlTest.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ public abstract class BaseFileBasedSystemAccessControlTest
103103
private static final String REVOKE_SCHEMA_ACCESS_DENIED_MESSAGE = "Cannot revoke privilege %s on schema %s%s";
104104

105105
private static final String SHOWN_TABLES_ACCESS_DENIED_MESSAGE = "Cannot show tables of .*";
106-
private static final String SELECT_TABLE_ACCESS_DENIED_MESSAGE = "Cannot select from table .*";
106+
private static final String SELECT_COLUMN_ACCESS_DENIED_MESSAGE = "Cannot select from columns .*";
107107
private static final String SHOW_COLUMNS_ACCESS_DENIED_MESSAGE = "Cannot show columns of table .*";
108108
private static final String ADD_COLUMNS_ACCESS_DENIED_MESSAGE = "Cannot add a column to table .*";
109109
private static final String DROP_COLUMNS_ACCESS_DENIED_MESSAGE = "Cannot drop a column from table .*";
@@ -450,21 +450,21 @@ public void testTableRulesForCheckCanSelectFromColumns()
450450
CHARLIE,
451451
new CatalogSchemaTableName("some-catalog", "bobschema", "bobcolumns"),
452452
ImmutableSet.of("bobcolumn", "private")),
453-
SELECT_TABLE_ACCESS_DENIED_MESSAGE);
453+
SELECT_COLUMN_ACCESS_DENIED_MESSAGE);
454454
accessControl.checkCanSelectFromColumns(JOE, new CatalogSchemaTableName("some-catalog", "bobschema", "bobcolumns"), ImmutableSet.of());
455455

456456
assertAccessDenied(
457457
() -> accessControl.checkCanSelectFromColumns(
458458
ADMIN,
459459
new CatalogSchemaTableName("secret", "secret", "secret"),
460460
ImmutableSet.of()),
461-
SELECT_TABLE_ACCESS_DENIED_MESSAGE);
461+
SELECT_COLUMN_ACCESS_DENIED_MESSAGE);
462462
assertAccessDenied(
463463
() -> accessControl.checkCanSelectFromColumns(
464464
JOE,
465465
new CatalogSchemaTableName("secret", "secret", "secret"),
466466
ImmutableSet.of()),
467-
SELECT_TABLE_ACCESS_DENIED_MESSAGE);
467+
SELECT_COLUMN_ACCESS_DENIED_MESSAGE);
468468
}
469469

470470
@Test
@@ -494,7 +494,7 @@ public void testTableRulesForCheckCanCreateViewWithSelectFromColumns()
494494
CHARLIE,
495495
new CatalogSchemaTableName("some-catalog", "bobschema", "bobcolumns_with_grant"),
496496
ImmutableSet.of("bobcolumn", "private")),
497-
SELECT_TABLE_ACCESS_DENIED_MESSAGE);
497+
SELECT_COLUMN_ACCESS_DENIED_MESSAGE);
498498
}
499499

500500
@Test

plugin/trino-hive/src/test/java/io/trino/plugin/hive/TestHiveFileBasedSecurity.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ public void testNonAdminCannotRead()
7474
Session bob = getSession("bob");
7575
assertThatThrownBy(() -> queryRunner.execute(bob, "SELECT * FROM nation"))
7676
.isInstanceOf(RuntimeException.class)
77-
.hasMessageMatching(".*Access Denied: Cannot select from table tpch.nation.*");
77+
.hasMessageMatching(".*Access Denied: Cannot select from columns \\[nationkey, regionkey, name, comment\\] in table or view tpch\\.nation");
7878
}
7979

8080
@Test

0 commit comments

Comments
 (0)