Skip to content

Commit 7c3dea9

Browse files
committed
Avoid permission checks for masked columns when the table doesn't have any
patch by Francisco Guerrero; reviewed by Shailaja Koppu, Caleb Rackliffe, Dmitry Konstantinov for CASSANDRA-21299
1 parent 4134d72 commit 7c3dea9

File tree

3 files changed

+11
-7
lines changed

3 files changed

+11
-7
lines changed

CHANGES.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
6.0-alpha2
2+
* Avoid permission checks for masked columns when the table doesn't have any (CASSANDRA-21299)
23
* Reduce allocations and array copies due to buffer resizing in LocalDataResponse during row serialization (CASSANDRA-21285)
34
* Implement a guardrail for client driver versions (CASSANDRA-21146)
45
* Enable IAuthenticator to declare supported and alterable role options (CASSANDRA-20834)

src/java/org/apache/cassandra/cql3/statements/SelectStatement.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -321,7 +321,8 @@ public void authorize(ClientState state) throws InvalidRequestException, Unautho
321321
for (Function function : getFunctions())
322322
state.ensurePermission(Permission.EXECUTE, function);
323323

324-
if (!state.hasTablePermission(table, Permission.UNMASK) &&
324+
if (table.hasMaskedColumns() &&
325+
!state.hasTablePermission(table, Permission.UNMASK) &&
325326
!state.hasTablePermission(table, Permission.SELECT_MASKED))
326327
{
327328
List<ColumnMetadata> queriedMaskedColumns = table.columns()

src/java/org/apache/cassandra/schema/TableMetadata.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,9 @@ public enum Kind
223223
public final List<ColumnMetadata> columnsWithConstraints;
224224
public final List<ColumnMetadata> notNullColumns;
225225

226+
// remember whether there are masked columns or not
227+
private final boolean hasMaskedColumns;
228+
226229
protected TableMetadata(Builder builder)
227230
{
228231
flags = Sets.immutableEnumSet(builder.flags);
@@ -285,6 +288,7 @@ else if (isIndex())
285288

286289
List<ColumnMetadata> columnsWithConstraints = new ArrayList<>();
287290
List<ColumnMetadata> notNullColumns = new ArrayList<>();
291+
boolean hasMaskedColumns = false;
288292

289293
for (ColumnMetadata column : this.columns())
290294
{
@@ -295,7 +299,10 @@ else if (isIndex())
295299
notNullColumns.add(column);
296300

297301
}
302+
if (column.isMasked())
303+
hasMaskedColumns = true;
298304
}
305+
this.hasMaskedColumns = hasMaskedColumns;
299306
this.columnsWithConstraints = columnsWithConstraints;
300307
this.notNullColumns = notNullColumns;
301308
}
@@ -584,12 +591,7 @@ public boolean hasStaticColumns()
584591
*/
585592
public boolean hasMaskedColumns()
586593
{
587-
for (ColumnMetadata column : columns.values())
588-
{
589-
if (column.isMasked())
590-
return true;
591-
}
592-
return false;
594+
return hasMaskedColumns;
593595
}
594596

595597
/**

0 commit comments

Comments
 (0)