Skip to content

Commit

Permalink
0003651: Log details about database permission failures
Browse files Browse the repository at this point in the history
  • Loading branch information
mmichalek committed Jul 31, 2018
1 parent 7b5f646 commit 0b2246c
Show file tree
Hide file tree
Showing 24 changed files with 100 additions and 61 deletions.
Expand Up @@ -117,25 +117,29 @@ protected Object parseInteger(String value) {

@Override
public PermissionResult getCreateSymTablePermission(Database database) {
PermissionResult result = new PermissionResult(PermissionType.CREATE_TABLE, Status.UNIMPLEMENTED);
PermissionResult result = new PermissionResult(PermissionType.CREATE_TABLE, "UNIMPLEMENTED");
result.setStatus(Status.UNIMPLEMENTED);
return result;
}

@Override
public PermissionResult getDropSymTablePermission() {
PermissionResult result = new PermissionResult(PermissionType.DROP_TABLE, Status.UNIMPLEMENTED);
PermissionResult result = new PermissionResult(PermissionType.DROP_TABLE, "UNIMPLEMENTED");
result.setStatus(Status.UNIMPLEMENTED);
return result;
}

@Override
public PermissionResult getAlterSymTablePermission(Database database) {
PermissionResult result = new PermissionResult(PermissionType.ALTER_TABLE, Status.UNIMPLEMENTED);
PermissionResult result = new PermissionResult(PermissionType.ALTER_TABLE, "UNIMPLEMENTED");
result.setStatus(Status.UNIMPLEMENTED);
return result;
}

@Override
public PermissionResult getDropSymTriggerPermission() {
PermissionResult result = new PermissionResult(PermissionType.DROP_TRIGGER, Status.UNIMPLEMENTED);
PermissionResult result = new PermissionResult(PermissionType.DROP_TRIGGER, "UNIMPLEMENTED");
result.setStatus(Status.UNIMPLEMENTED);
return result;
}
}
Expand Up @@ -952,9 +952,21 @@ public List<PermissionResult> checkSymTablePermissions(PermissionType... permiss
if (drop) {
results.add(dropPermission);
}

logFailedResults(results);

return results;
}

protected void logFailedResults(List<PermissionResult> results) {
for (PermissionResult result : results) {
if (Status.FAIL == result.getStatus()) {
log.info(String.format("Database permission check failed. Category: %s Permission Type: %s Details:\r\n%s", result.getCategory(), result.getPermissionType(),
result.getTestDetails()), result.getException());
}
}
}

protected Table getPermissionTableDefinition() {
Column idColumn = new Column("TEST_ID");
idColumn.setMappedType("INTEGER");
Expand All @@ -965,8 +977,10 @@ protected Table getPermissionTableDefinition() {

protected PermissionResult getCreateSymTablePermission(Database database) {
Table table = getPermissionTableDefinition();

String createSql = ddlBuilder.createTables(database, false);

PermissionResult result = new PermissionResult(PermissionType.CREATE_TABLE, Status.FAIL);
PermissionResult result = new PermissionResult(PermissionType.CREATE_TABLE, createSql);
getDropSymTablePermission();

try {
Expand All @@ -984,7 +998,7 @@ protected PermissionResult getCreateSymTablePermission(Database database) {
protected PermissionResult getDropSymTablePermission() {
Table table = getPermissionTableDefinition();

PermissionResult result = new PermissionResult(PermissionType.DROP_TABLE, Status.FAIL);
PermissionResult result = new PermissionResult(PermissionType.DROP_TABLE, "dropping table " + table.getName() + "...");

try {
if (getTableFromCache(table.getName(), true) != null) {
Expand Down Expand Up @@ -1014,7 +1028,7 @@ protected PermissionResult getAlterSymTablePermission(Database database) {
Table table = new Table(PERMISSION_TEST_TABLE_NAME, idColumn, valueColumn);
Table alterTable = new Table(PERMISSION_TEST_TABLE_NAME, idColumn, valueColumn, alterColumn);

PermissionResult result = new PermissionResult(PermissionType.ALTER_TABLE, Status.FAIL);
PermissionResult result = new PermissionResult(PermissionType.ALTER_TABLE, "altering table " + PERMISSION_TEST_TABLE_NAME + "...");

try {
database.removeAllTablesExcept();
Expand All @@ -1034,7 +1048,7 @@ protected PermissionResult getAlterSymTablePermission(Database database) {

protected PermissionResult getDropSymTriggerPermission() {
String dropTriggerSql = "DROP TRIGGER TEST_TRIGGER";
PermissionResult result = new PermissionResult(PermissionType.DROP_TRIGGER, Status.FAIL);
PermissionResult result = new PermissionResult(PermissionType.DROP_TRIGGER, dropTriggerSql);

try {
getSqlTemplate().update(dropTriggerSql);
Expand All @@ -1048,22 +1062,26 @@ protected PermissionResult getDropSymTriggerPermission() {
}

protected PermissionResult getCreateSymTriggerPermission() {
PermissionResult result = new PermissionResult(PermissionType.CREATE_TRIGGER, Status.UNIMPLEMENTED);
PermissionResult result = new PermissionResult(PermissionType.CREATE_TRIGGER, "UNIMPLEMENTED");
result.setStatus(Status.UNIMPLEMENTED);
return result;
}

protected PermissionResult getExecuteSymPermission() {
PermissionResult result = new PermissionResult(PermissionType.EXECUTE, Status.NOT_APPLICABLE);
PermissionResult result = new PermissionResult(PermissionType.EXECUTE, "NOT_APPLICABLE");
result.setStatus(Status.NOT_APPLICABLE);
return result;
}

protected PermissionResult getCreateSymRoutinePermission() {
PermissionResult result = new PermissionResult(PermissionType.CREATE_ROUTINE, Status.NOT_APPLICABLE);
PermissionResult result = new PermissionResult(PermissionType.CREATE_ROUTINE, "NOT_APPLICABLE");
result.setStatus(Status.NOT_APPLICABLE);
return result;
}

protected PermissionResult getCreateSymFunctionPermission() {
PermissionResult result = new PermissionResult(PermissionType.CREATE_FUNCTION, Status.NOT_APPLICABLE);
PermissionResult result = new PermissionResult(PermissionType.CREATE_FUNCTION, "NOT_APPLICABLE");
result.setStatus(Status.NOT_APPLICABLE);
return result;
}

Expand Down
Expand Up @@ -35,14 +35,16 @@ public enum PermissionCategory {

private PermissionType permissionType;

private Status status;
private Status status = Status.FAIL;

private Exception exception;

private String solution;

private PermissionCategory category;

private String testDetails; // e.g. description or statment(s) used on the test

private static Map<PermissionType, PermissionCategory> categories = new TreeMap<PermissionType, PermissionCategory>();

static {
Expand All @@ -55,19 +57,12 @@ public enum PermissionCategory {
categories.put(PermissionType.CREATE_ROUTINE, PermissionCategory.ADDITIONAL);
categories.put(PermissionType.EXECUTE, PermissionCategory.ADDITIONAL);
}

public PermissionResult(PermissionType permissionType, Status status, Exception exception, String solution) {
this.setPermissionType(permissionType);
this.setStatus(status);
this.setException(exception);
this.setSolution(solution);
this.category = categories.get(permissionType);
}

public PermissionResult(PermissionType permissionType, Status status) {
public PermissionResult(PermissionType permissionType, String testDetails) {
this.setPermissionType(permissionType);
this.setStatus(status);
this.category = categories.get(permissionType);
this.testDetails = testDetails;
}

public PermissionType getPermissionType() {
Expand Down Expand Up @@ -110,6 +105,15 @@ public void setCategory(PermissionCategory category) {
this.category = category;
}

public String getTestDetails() {
return testDetails;
}

public void setTestDetails(String testDetails) {
this.testDetails = testDetails;
}

@Override
public String toString() {
return "Permission Type: " + permissionType + ", Status: " + status;
}
Expand Down
Expand Up @@ -111,7 +111,7 @@ public PermissionResult getCreateSymTriggerPermission() {

String triggerSql = "create trigger TEST_TRIGGER on " + delimiter + PERMISSION_TEST_TABLE_NAME + delimiter + " for insert as begin select 1 end";

PermissionResult result = new PermissionResult(PermissionType.CREATE_TRIGGER, Status.FAIL);
PermissionResult result = new PermissionResult(PermissionType.CREATE_TRIGGER, triggerSql);

try {
getSqlTemplate().update(triggerSql);
Expand Down
Expand Up @@ -53,7 +53,7 @@ public String getDefaultCatalog() {
protected PermissionResult getCreateSymTablePermission(Database database) {
Table table = getPermissionTableDefinition();

PermissionResult result = new PermissionResult(PermissionType.CREATE_TABLE, Status.FAIL);
PermissionResult result = new PermissionResult(PermissionType.CREATE_TABLE, "creating table " + table.getName() + "...");
getDropSymTablePermission();

try {
Expand Down
Expand Up @@ -91,7 +91,7 @@ public PermissionResult getCreateSymTriggerPermission() {

String triggerSql = "CREATE TRIGGER TEST_TRIGGER AFTER UPDATE ON " + delimiter + PERMISSION_TEST_TABLE_NAME + delimiter + " FOR EACH ROW BEGIN ATOMIC END";

PermissionResult result = new PermissionResult(PermissionType.CREATE_TRIGGER, Status.FAIL);
PermissionResult result = new PermissionResult(PermissionType.CREATE_TRIGGER, triggerSql);

try {
getSqlTemplate().update(triggerSql);
Expand Down
Expand Up @@ -102,7 +102,7 @@ public PermissionResult getCreateSymTriggerPermission() {
String triggerSql = "CREATE TRIGGER TEST_TRIGGER AFTER UPDATE ON " + delimiter + PERMISSION_TEST_TABLE_NAME + delimiter
+ " FOR EACH ROW MODE DB2SQL INSERT INTO " + delimiter + PERMISSION_TEST_TABLE_NAME + delimiter + " VALUES(NULL,NULL)";

PermissionResult result = new PermissionResult(PermissionType.CREATE_TRIGGER, Status.FAIL);
PermissionResult result = new PermissionResult(PermissionType.CREATE_TRIGGER, triggerSql);

try {
getSqlTemplate().update(triggerSql);
Expand Down
Expand Up @@ -82,7 +82,7 @@ public PermissionResult getCreateSymTriggerPermission() {

String triggerSql = "CREATE TRIGGER TEST_TRIGGER FOR " + delimiter + PERMISSION_TEST_TABLE_NAME + delimiter + " AFTER UPDATE AS BEGIN END";

PermissionResult result = new PermissionResult(PermissionType.CREATE_TRIGGER, Status.FAIL);
PermissionResult result = new PermissionResult(PermissionType.CREATE_TRIGGER, triggerSql);

try {
getSqlTemplate().update(triggerSql);
Expand Down
Expand Up @@ -90,7 +90,7 @@ public PermissionResult getCreateSymTriggerPermission() {
String triggerSql = "CREATE TRIGGER TEST_TRIGGER AFTER UPDATE ON " + delimiter + PERMISSION_TEST_TABLE_NAME + delimiter
+ "FOR EACH ROW CALL " + delimiter + "org.jumpmind.db.platform.h2.H2TestTrigger" + delimiter;

PermissionResult result = new PermissionResult(PermissionType.CREATE_TRIGGER, Status.FAIL);
PermissionResult result = new PermissionResult(PermissionType.CREATE_TRIGGER, triggerSql);

try {
getSqlTemplate().update(triggerSql);
Expand Down
Expand Up @@ -82,7 +82,7 @@ public PermissionResult getCreateSymTriggerPermission() {
String triggerSql = "CREATE TRIGGER TEST_TRIGGER AFTER UPDATE ON " + delimiter + PERMISSION_TEST_TABLE_NAME + delimiter
+ " FOR EACH ROW INSERT INTO " + delimiter + PERMISSION_TEST_TABLE_NAME + delimiter + " VALUES(NULL,NULL)";

PermissionResult result = new PermissionResult(PermissionType.CREATE_TRIGGER, Status.FAIL);
PermissionResult result = new PermissionResult(PermissionType.CREATE_TRIGGER, triggerSql);

try {
getSqlTemplate().update(triggerSql);
Expand Down
Expand Up @@ -88,7 +88,7 @@ public PermissionResult getCreateSymTriggerPermission() {
String triggerSql = "CREATE TRIGGER TEST_TRIGGER AFTER UPDATE ON " + delimiter + PERMISSION_TEST_TABLE_NAME + delimiter
+ " FOR EACH ROW INSERT INTO " + delimiter + PERMISSION_TEST_TABLE_NAME + delimiter + " VALUES(NULL,NULL)";

PermissionResult result = new PermissionResult(PermissionType.CREATE_TRIGGER, Status.FAIL);
PermissionResult result = new PermissionResult(PermissionType.CREATE_TRIGGER, triggerSql);

try {
getSqlTemplate().update(triggerSql);
Expand Down
Expand Up @@ -105,7 +105,7 @@ public PermissionResult getCreateSymTriggerPermission() {
String triggerSql = "CREATE TRIGGER TEST_TRIGGER DELETE ON " + delimiter + PERMISSION_TEST_TABLE_NAME + delimiter
+ " FOR EACH ROW(DELETE FROM " + delimiter + PERMISSION_TEST_TABLE_NAME + delimiter + " WHERE TEST_ID IS NULL)";

PermissionResult result = new PermissionResult(PermissionType.CREATE_TRIGGER, Status.FAIL);
PermissionResult result = new PermissionResult(PermissionType.CREATE_TRIGGER, triggerSql);

try {
getSqlTemplate().update(triggerSql);
Expand Down
Expand Up @@ -81,7 +81,8 @@ protected ISqlTemplate createSqlTemplateDirty() {

@Override
public PermissionResult getDropSymTriggerPermission() {
PermissionResult result = new PermissionResult(PermissionType.DROP_TRIGGER, Status.UNIMPLEMENTED);
PermissionResult result = new PermissionResult(PermissionType.DROP_TRIGGER, "UNIMPLEMENTED");
result.setStatus(Status.UNIMPLEMENTED);
return result;
}

Expand Down
Expand Up @@ -109,7 +109,7 @@ public PermissionResult getCreateSymTriggerPermission() {
String triggerSql = "CREATE TRIGGER TEST_TRIGGER ON " + delimiter + PERMISSION_TEST_TABLE_NAME + delimiter
+ " AFTER UPDATE AS SELECT 1 GO";

PermissionResult result = new PermissionResult(PermissionType.CREATE_TRIGGER, Status.FAIL);
PermissionResult result = new PermissionResult(PermissionType.CREATE_TRIGGER, triggerSql);

try {
getSqlTemplate().update(triggerSql);
Expand All @@ -127,13 +127,14 @@ public PermissionResult getCreateSymFunctionPermission() {
String routineSql = "CREATE FUNCTION TEST_FUNC() RETURNS INTEGER BEGIN RETURN 1; END";
String dropSql = "IF OBJECT_ID('TEST_FUNC') IS NOT NULL DROP FUNCTION TEST_FUNC";

PermissionResult result = new PermissionResult(PermissionType.CREATE_FUNCTION, Status.FAIL);
PermissionResult result = new PermissionResult(PermissionType.CREATE_FUNCTION,
dropSql + "\r\n" + routineSql + "\r\n" + dropSql);

try {
getSqlTemplate().update(dropSql);
getSqlTemplate().update(routineSql);
result.setStatus(Status.PASS);
getSqlTemplate().update(dropSql);
result.setStatus(Status.PASS);
} catch (SqlException e) {
result.setException(e);
if (result.getSolution() != null) {
Expand Down
Expand Up @@ -107,7 +107,7 @@ public PermissionResult getCreateSymTriggerPermission() {
String triggerSql = "CREATE TRIGGER TEST_TRIGGER AFTER UPDATE ON " + delimiter + PERMISSION_TEST_TABLE_NAME + delimiter
+ " FOR EACH ROW INSERT INTO " + delimiter + PERMISSION_TEST_TABLE_NAME + delimiter + " VALUES(NULL,NULL)";

PermissionResult result = new PermissionResult(PermissionType.CREATE_TRIGGER, Status.FAIL);
PermissionResult result = new PermissionResult(PermissionType.CREATE_TRIGGER, triggerSql);

try {
getSqlTemplate().update(triggerSql);
Expand All @@ -125,13 +125,14 @@ public PermissionResult getCreateSymRoutinePermission() {
String routineSql = "CREATE PROCEDURE TEST_PROC() BEGIN SELECT 1; END";
String dropSql = "DROP PROCEDURE IF EXISTS TEST_PROC";

PermissionResult result = new PermissionResult(PermissionType.CREATE_ROUTINE, Status.FAIL);
PermissionResult result = new PermissionResult(PermissionType.CREATE_ROUTINE,
dropSql + "\r\n" + routineSql + "\r\n" + dropSql);

try {
getSqlTemplate().update(dropSql);
getSqlTemplate().update(routineSql);
result.setStatus(Status.PASS);
getSqlTemplate().update(dropSql);
result.setStatus(Status.PASS);
} catch (SqlException e) {
result.setException(e);
result.setSolution("Grant CREATE ROUTINE Privilege");
Expand Down
Expand Up @@ -92,13 +92,14 @@ public PermissionResult getCreateSymTriggerPermission() {

String dropTriggerSql = "DROP TRIGGER IF EXISTS TEST_TRIGGER";

PermissionResult result = new PermissionResult(PermissionType.CREATE_TRIGGER, Status.FAIL);
PermissionResult result = new PermissionResult(PermissionType.CREATE_TRIGGER,
dropTriggerSql + "\r\n" + triggerSql + "\r\n" + dropTriggerSql);

try {
getSqlTemplate().update(dropTriggerSql);
getSqlTemplate().update(triggerSql);
result.setStatus(Status.PASS);
getSqlTemplate().update(dropTriggerSql);
result.setStatus(Status.PASS);
} catch (SqlException e) {
result.setException(e);
result.setSolution("Grant CREATE TRIGGER permission or TRIGGER permission");
Expand All @@ -112,13 +113,14 @@ public PermissionResult getCreateSymRoutinePermission() {
String routineSql = "CREATE PROCEDURE TEST_PROC() AS VAR myVar = 1; END_PROCEDURE";
String dropSql = "DROP PROCEDURE IF EXISTS TEST_PROC";

PermissionResult result = new PermissionResult(PermissionType.CREATE_ROUTINE, Status.FAIL);
PermissionResult result = new PermissionResult(PermissionType.CREATE_ROUTINE,
dropSql + "\r\n" + routineSql + "\r\n" + dropSql);

try {
getSqlTemplate().update(dropSql);
getSqlTemplate().update(routineSql);
result.setStatus(Status.PASS);
getSqlTemplate().update(dropSql);
result.setStatus(Status.PASS);
} catch (SqlException e) {
result.setException(e);
result.setSolution("Grant CREATE ROUTINE Privilege");
Expand All @@ -129,7 +131,7 @@ public PermissionResult getCreateSymRoutinePermission() {
@Override
protected PermissionResult getDropSymTriggerPermission() {
String dropTriggerSql = "DROP TRIGGER IF EXISTS TEST_TRIGGER";
PermissionResult result = new PermissionResult(PermissionType.DROP_TRIGGER, Status.FAIL);
PermissionResult result = new PermissionResult(PermissionType.DROP_TRIGGER, dropTriggerSql);

try {
getSqlTemplate().update(dropTriggerSql);
Expand Down
Expand Up @@ -108,7 +108,7 @@ public PermissionResult getCreateSymTriggerPermission() {

String triggerSql = "CREATE OR REPLACE TRIGGER TEST_TRIGGER AFTER UPDATE ON " + delimiter + PERMISSION_TEST_TABLE_NAME + delimiter + " BEGIN END";

PermissionResult result = new PermissionResult(PermissionType.CREATE_TRIGGER, Status.FAIL);
PermissionResult result = new PermissionResult(PermissionType.CREATE_TRIGGER, triggerSql);

try {
getSqlTemplate().update(triggerSql);
Expand All @@ -128,7 +128,7 @@ public PermissionResult getExecuteSymPermission() {

String executeSql = "SELECT DBMS_LOB.GETLENGTH('TEST'), UTL_RAW.CAST_TO_RAW('TEST') FROM DUAL";

PermissionResult result = new PermissionResult(PermissionType.EXECUTE, Status.FAIL);
PermissionResult result = new PermissionResult(PermissionType.EXECUTE, executeSql);

try {
getSqlTemplate().update(executeSql);
Expand Down

0 comments on commit 0b2246c

Please sign in to comment.