Hi @iamnithesh thank you for your feedback. I have updated the code and could you please provide your feedback on the rule code for account creation block?
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Types;
import java.util.List;
import sailpoint.api.SailPointContext;
import sailpoint.connector.JDBCConnector;
import sailpoint.object.Application;
import sailpoint.object.ProvisioningPlan;
import sailpoint.object.ProvisioningPlan.AccountRequest;
import sailpoint.object.ProvisioningPlan.AttributeRequest;
import sailpoint.object.ProvisioningPlan.PermissionRequest;
import sailpoint.object.ProvisioningResult;
import sailpoint.object.Schema;
import java.util.Random;
log.debug(“entering EBSDBJDBCProvision Rule”);
ProvisioningResult result = new ProvisioningResult();
if ( plan != null ) {
List accounts = plan.getAccountRequests();
if ( ( accounts != null ) && ( accounts.size() > 0 ) ) {
for ( AccountRequest account : accounts ) {
try {
String nativeIdentity = (String) account.getNativeIdentity();
if ( AccountRequest.Operation.Modify.equals( account.getOperation() ) ) {
// String nativeIdentity = (String) account.getNativeIdentity();
log.debug("nativeIdentity is " + nativeIdentity);
AttributeRequest attrReq = account.getAttributeRequest("PRIV");
log.debug("attrReq is " + attrReq);
if ( account != null ) {
if ( attrReq != null && ProvisioningPlan.Operation.Remove.equals(attrReq.getOperation()) ) {
List entitlemetsToBeRemoved = new ArrayList();
if (attrReq.getValue()!=null && attrReq.getValue() instanceof String) {
String attrValue = (String) attrReq.getValue();
entitlemetsToBeRemoved .add(attrValue);
} else if (attrReq.getValue()!=null && attrReq.getValue() instanceof List) {
List attrValueList = (List) attrReq.getValue();
entitlemetsToBeRemoved .addAll(attrValueList);
}
for (String attval:entitlemetsToBeRemoved){
String queryStatement = "revoke "+attval+" from "+nativeIdentity;
log.debug("queryStatement is " + queryStatement);
PreparedStatement statement = connection.prepareStatement(queryStatement);
statement.executeUpdate();
statement.close();
}
}
}
result.setStatus( ProvisioningResult.STATUS_COMMITTED );
} else if ( AccountRequest.Operation.Disable.equals( account.getOperation() ) ) {
String accountlock =" alter user " + nativeIdentity + " account lock password expire";
PreparedStatement DisableStatement = connection.prepareStatement( accountlock );
DisableStatement.executeUpdate();
DisableStatement.close();
result.setStatus(ProvisioningResult.STATUS_COMMITTED);
} else if ( AccountRequest.Operation.Create.equals( account.getOperation() ) ) {
String charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890!@#$%^&\*()\_+-={}\[\]:;<>?,./";
int len = charset.length();
Random rnd = new Random();
StringBuilder newPassword = new StringBuilder();
// Generate one capital letter
char capitalLetter = charset.charAt(rnd.nextInt(26));
newPassword.append(capitalLetter);
// Generate one small letter
char smallLetter = charset.charAt(26 + rnd.nextInt(26));
newPassword.append(smallLetter);
// Generate one symbol
char symbol = charset.charAt(52 + rnd.nextInt(14));
newPassword.append(symbol);
// Generate one number
char number = charset.charAt(66 + rnd.nextInt(10));
newPassword.append(number);
// Generate the remaining characters
for (int count = 0; count < 8; count++) {
char randomChar = charset.charAt(rnd.nextInt(len));
newPassword.append(randomChar);
}
String createUser = "CREATE USER \\"" + nativeIdentity + "\\" "
+ "IDENTIFIED BY \\"" + newPassword + "\\" "
+ "TEMPORARY TABLESPACE TEMP2 "
+ "PROFILE testing";
PreparedStatement createUserPst = connection.prepareStatement( createUser );
createUserPst.executeUpdate();
String createSession = "GRANT CREATE SESSION TO \\"" + nativeIdentity + "\\"";
String selectAnyTable = "GRANT SELECT ANY TABLE TO \\"" + nativeIdentity + "\\"";
String selectAnyDictionary = "GRANT SELECT ANY DICTIONARY TO \\"" + nativeIdentity + "\\"";
PreparedStatement createSessionPst = connection.prepareStatement( createSession );
createSessionPst.executeUpdate();
PreparedStatement selectAnyTablePst = connection.prepareStatement( selectAnyTable );
selectAnyTablePst.executeUpdate();
PreparedStatement selectAnyDictionaryPst = connection.prepareStatement( selectAnyDictionary );
selectAnyDictionaryPst.executeUpdate();
createUserPst.close();
createSessionPst.close();
selectAnyTablePst.close();
selectAnyDictionaryPst.close();
result.setStatus( ProvisioningResult.STATUS_COMMITTED );
}
} catch( SQLException e ) {
result.setStatus( ProvisioningResult.STATUS_FAILED );
result.addError( e );
}
}
}
}
log.debug(“leaving EBSDBJDBCProvision Rule”);
return result;