Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 40 additions & 0 deletions test/unit/org/apache/cassandra/auth/GrantAndRevokeTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -577,6 +577,46 @@ public void testGrantOnVirtualKeyspaces() throws Throwable
executeNet(ProtocolVersion.CURRENT, format("REVOKE SELECT PERMISSION ON KEYSPACE system_views FROM %s", user));
}

@Test
public void testCheckPermissionsAfterAuthorize() throws Throwable
{
useSuperUser();

executeNet("CREATE KEYSPACE check_permissions WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '1'}");
executeNet("CREATE TABLE check_permissions.t1 (k int PRIMARY KEY)");
executeNet("INSERT INTO check_permissions.t1 (k) VALUES (1)");

executeNet(String.format("CREATE ROLE %s WITH LOGIN = TRUE AND password='%s'", user, pass));

final String simple_user = "simple_user";
executeNet(String.format("CREATE ROLE %s WITH LOGIN = TRUE AND password='%s'", simple_user, simple_user));
executeNet("GRANT AUTHORIZE ON check_permissions.t1 TO " + simple_user);

useUser(user, pass);
assertUnauthorizedQuery("User user has no SELECT permission on <table check_permissions.t1> or any of its parents",
"SELECT * FROM check_permissions.t1");

useUser(simple_user, simple_user);
assertUnauthorizedQuery("User simple_user has no SELECT permission on <table check_permissions.t1> or any of its parents",
"SELECT * FROM check_permissions.t1");
assertUnauthorizedQuery("User simple_user has no SELECT permission on <table check_permissions.t1> or any of its parents",
"GRANT SELECT ON check_permissions.t1 TO " + user);

useUser(user, pass);
assertUnauthorizedQuery("User user has no SELECT permission on <table check_permissions.t1> or any of its parents",
"SELECT * FROM check_permissions.t1");

useSuperUser();
executeNet("GRANT SELECT ON check_permissions.t1 TO " + simple_user);

useUser(simple_user, simple_user);
executeNet("SELECT * FROM check_permissions.t1");
executeNet("GRANT SELECT ON check_permissions.t1 TO " + user);

useUser(user, pass);
executeNet("SELECT * FROM check_permissions.t1");
}

private void maybeReadSystemTables(boolean superuser) throws Throwable
{
if (superuser)
Expand Down