Skip to content
Open
Show file tree
Hide file tree
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
Original file line number Diff line number Diff line change
Expand Up @@ -258,6 +258,24 @@
"accessTypeRestrictions": [
"entity-add-classification", "entity-update-classification", "entity-remove-classification"
]
},
{
"itemId": 17,
"name": "notification-topic",
"parent": "",
"level": 10,
"type": "string",
"mandatory": true,
"isValidLeaf": true,
"lookupSupported": true,
"excludesSupported": true,
"matcher": "org.apache.ranger.plugin.resourcematcher.RangerDefaultResourceMatcher",
"matcherOptions": { "wildCard": "true", "ignoreCase": "false" },
"label": "Notification Topic",
"description": "Notification Topic",
"accessTypeRestrictions": [
"post-notification"
]
}
],
"accessTypes": [
Expand All @@ -281,7 +299,8 @@
{ "itemId": 18, "name": "entity-remove-label", "label": "Remove Label", "category": "UPDATE" },
{ "itemId": 19, "name": "entity-update-business-metadata", "label": "Update Business Metadata", "category": "UPDATE" },
{ "itemId": 20, "name": "type-read", "label": "Read Type", "category": "READ" },
{ "itemId": 21, "name": "admin-audits", "label": "Admin Audits", "category": "MANAGE" }
{ "itemId": 21, "name": "admin-audits", "label": "Admin Audits", "category": "MANAGE" },
{ "itemId": 22, "name": "post-notification", "label": "Post Notification", "category": "UPDATE" }
],
"configs": [
{ "itemId": 1, "name": "username", "type": "string", "mandatory": true, "label": "Username" },
Expand Down
1 change: 1 addition & 0 deletions dev-support/checkstyle-suppressions.xml
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@
<suppress files="PatchSetAccessTypeCategory_J10061" checks="TypeName"/>
<suppress files="PatchTagModulePermission_J10005" checks="TypeName"/>
<suppress files="PatchForAtlasPolicyUpdateForEntityRead_J10064" checks="TypeName"/>
<suppress files="PatchForAtlasNotificationTopic_J10067" checks="TypeName"/>
<suppress files="PatchForOzoneServiceDefPolicyConditionUpdate_J10066" checks="TypeName"/>
<suppress files="PatchForOzoneServiceDefAssumeRoleUpdate_J10065" checks="TypeName"/>
</suppressions>
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import org.apache.atlas.authorize.AtlasAdminAccessRequest;
import org.apache.atlas.authorize.AtlasAuthorizer;
import org.apache.atlas.authorize.AtlasEntityAccessRequest;
import org.apache.atlas.authorize.AtlasNotificationRequest;
import org.apache.atlas.authorize.AtlasPrivilege;
import org.apache.atlas.authorize.AtlasRelationshipAccessRequest;
import org.apache.atlas.authorize.AtlasSearchResultScrubRequest;
Expand Down Expand Up @@ -70,6 +71,7 @@
import static org.apache.ranger.services.atlas.RangerServiceAtlas.RESOURCE_ENTITY_LABEL;
import static org.apache.ranger.services.atlas.RangerServiceAtlas.RESOURCE_ENTITY_OWNER;
import static org.apache.ranger.services.atlas.RangerServiceAtlas.RESOURCE_ENTITY_TYPE;
import static org.apache.ranger.services.atlas.RangerServiceAtlas.RESOURCE_NOTIFICATION_TOPIC;
import static org.apache.ranger.services.atlas.RangerServiceAtlas.RESOURCE_RELATIONSHIP_TYPE;
import static org.apache.ranger.services.atlas.RangerServiceAtlas.RESOURCE_SERVICE;
import static org.apache.ranger.services.atlas.RangerServiceAtlas.RESOURCE_TYPE_CATEGORY;
Expand Down Expand Up @@ -145,6 +147,39 @@ public boolean isAccessAllowed(AtlasAdminAccessRequest request) {
return ret;
}

@Override
public boolean isAccessAllowed(AtlasNotificationRequest request) {
LOG.debug("==> isAccessAllowed({})", request);

final boolean ret;
RangerPerfTracer perf = null;

try {
if (RangerPerfTracer.isPerfTraceEnabled(PERF_LOG)) {
perf = RangerPerfTracer.getPerfTracer(PERF_LOG, "RangerAtlasAuthorizer.isAccessAllowed(" + request + ")");
}

String action = request.getAction() != null ? request.getAction().getType() : null;
String topicName = StringUtils.isNotBlank(request.getTopicName()) ? request.getTopicName() : "*";
RangerAccessResourceImpl rangerResource = new RangerAccessResourceImpl(Collections.singletonMap(RESOURCE_NOTIFICATION_TOPIC, topicName));
RangerAccessRequestImpl rangerRequest = new RangerAccessRequestImpl(rangerResource, action, request.getUser(), request.getUserGroups(), null);

rangerRequest.setClientIPAddress(request.getClientIPAddress());
rangerRequest.setAccessTime(request.getAccessTime());
rangerRequest.setAction(action);
rangerRequest.setForwardedAddresses(request.getForwardedAddresses());
rangerRequest.setRemoteIPAddress(request.getRemoteIPAddress());

ret = checkAccess(rangerRequest);
} finally {
RangerPerfTracer.log(perf);
}

LOG.debug("<== isAccessAllowed({}): {}", request, ret);

return ret;
}

@Override
public boolean isAccessAllowed(AtlasEntityAccessRequest request) {
LOG.debug("==> isAccessAllowed({})", request);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,12 +79,14 @@ public class RangerServiceAtlas extends RangerBaseService {
public static final String RESOURCE_END_TWO_ENTITY_TYPE = "end-two-entity-type";
public static final String RESOURCE_END_TWO_ENTITY_CLASSIFICATION = "end-two-entity-classification";
public static final String RESOURCE_END_TWO_ENTITY_ID = "end-two-entity";
public static final String RESOURCE_NOTIFICATION_TOPIC = "notification-topic";
public static final String SEARCH_FEATURE_POLICY_NAME = "Allow users to manage favorite searches";
public static final String ACCESS_TYPE_ENTITY_READ = "entity-read";
public static final String ACCESS_TYPE_TYPE_READ = "type-read";
public static final String ACCESS_TYPE_ENTITY_CREATE = "entity-create";
public static final String ACCESS_TYPE_ENTITY_UPDATE = "entity-update";
public static final String ACCESS_TYPE_ENTITY_DELETE = "entity-delete";
public static final String ACCESS_TYPE_POST_NOTIFICATION = "post-notification";
public static final String ADMIN_USERNAME_DEFAULT = "admin";
public static final String TAGSYNC_USERNAME_DEFAULT = "rangertagsync";
public static final String ENTITY_TYPE_USER_PROFILE = "__AtlasUserProfile";
Expand Down Expand Up @@ -265,6 +267,7 @@ private Map<String, RangerPolicyResource> getSearchFeaturePolicyResource() {

private static class AtlasServiceClient extends BaseClient {
private static final String[] TYPE_CATEGORIES = new String[] {"classification", "enum", "entity", "relationship", "struct", "business_metadata"};
private static final String[] NOTIFICATION_TOPICS = new String[] {"ATLAS_HOOK", "ATLAS_ENTITIES"};

private Map<String, List<String>> typesDef = new HashMap<>();

Expand Down Expand Up @@ -387,6 +390,12 @@ public List<String> lookupResource(ResourceLookupContext lookupContext) {
}
break;

case RESOURCE_NOTIFICATION_TOPIC:
for (String topic : NOTIFICATION_TOPICS) {
addIfStartsWithAndNotExcluded(ret, topic, userInput, currentValues);
}
break;

default: {
ret.add(lookupContext.getResourceName());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@

import org.apache.atlas.authorize.AtlasAdminAccessRequest;
import org.apache.atlas.authorize.AtlasEntityAccessRequest;
import org.apache.atlas.authorize.AtlasNotificationRequest;
import org.apache.atlas.authorize.AtlasPrivilege;
import org.apache.atlas.authorize.AtlasRelationshipAccessRequest;
import org.apache.atlas.authorize.AtlasTypeAccessRequest;
Expand All @@ -45,6 +46,10 @@ public class TestRangerAtlasAuthorizer {
private static final Set<String> USER_STEWARD1_GROUPS = Collections.singleton("stewards");
private static final String USER_FINANCE_STEWARD1 = "finance-data-steward1";
private static final Set<String> USER_FINANCE_STEWARD1_GROUPS = new HashSet<>(Arrays.asList("finance-stewards", "stewards"));
private static final String USER_HOOK1 = "hook1";
private static final Set<String> USER_HOOK1_GROUPS = Collections.singleton("hook-users");
private static final String TOPIC_ATLAS_HOOK = "ATLAS_HOOK";
private static final String TOPIC_OTHER = "OTHER_TOPIC";

private static final AtlasEntityDef ENTITY_DEF_HIVE_TABLE = new AtlasEntityDef("hive_table");
private static final AtlasClassificationDef CLASSIFICATION_DEF_FINANCE = new AtlasClassificationDef("FINANCE");
Expand Down Expand Up @@ -471,6 +476,51 @@ public void testAudits() {
.isTrue();
}

@Test
public void testPostNotification() {
AtlasNotificationRequest request = new AtlasNotificationRequest(AtlasPrivilege.POST_NOTIFICATION, TOPIC_ATLAS_HOOK);

request.setUser(USER_USER1, USER_USER1_GROUPS);

assertThat(authorizer.isAccessAllowed(request))
.as("%s should be denied to post notification", request.getUser())
.isFalse();

request.setUser(USER_STEWARD1, USER_STEWARD1_GROUPS);

assertThat(authorizer.isAccessAllowed(request))
.as("%s should be denied to post notification", request.getUser())
.isFalse();

request.setUser(USER_ADMIN1, USER_ADMIN1_GROUPS);

assertThat(authorizer.isAccessAllowed(request))
.as("%s should be allowed to post notification", request.getUser())
.isTrue();
}

@Test
public void testPostNotificationOnAllowedTopic() {
AtlasNotificationRequest request = new AtlasNotificationRequest(AtlasPrivilege.POST_NOTIFICATION, TOPIC_ATLAS_HOOK);

request.setUser(USER_HOOK1, USER_HOOK1_GROUPS);

assertThat(authorizer.isAccessAllowed(request))
.as("%s should be allowed to post notification to %s", request.getUser(), TOPIC_ATLAS_HOOK)
.isTrue();
}

@Test
public void testPostNotificationOnDeniedTopic() {
AtlasNotificationRequest request = new AtlasNotificationRequest(AtlasPrivilege.POST_NOTIFICATION, TOPIC_OTHER);

request.setUser(USER_HOOK1, USER_HOOK1_GROUPS);

assertThat(authorizer.isAccessAllowed(request))
.as("%s should be denied to post notification to %s", request.getUser(), TOPIC_OTHER)
.isFalse();
}

@Test
public void testAddRelationship() {
AtlasRelationshipAccessRequest request = new AtlasRelationshipAccessRequest(typeRegistry, AtlasPrivilege.RELATIONSHIP_ADD, RELATIONSHIP_TYPE_CLONE_OF, ENTITY_HIVE_TABLE_DB1_TBL1, ENTITY_HIVE_TABLE_DB1_TBL2);
Expand Down
32 changes: 29 additions & 3 deletions plugin-atlas/src/test/resources/atlas-policies.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"serviceName": "dev_atlas", "serviceId": 8, "policyVersion": 19,
"serviceName": "dev_atlas", "serviceId": 8, "policyVersion": 21,
"policies": [
{
"id": 1, "name": "Default: all type-category, type",
Expand Down Expand Up @@ -111,6 +111,30 @@
}
]
},
{
"id": 9, "name": "Default: all notification-topic",
"resources": {
"notification-topic": { "values": [ "*" ] }
},
"policyItems": [
{
"accesses": [ { "type": "post-notification" } ],
"groups": [ "admins" ]
}
]
},
{
"id": 10, "name": "Allow hook users to post to ATLAS_HOOK",
"resources": {
"notification-topic": { "values": [ "ATLAS_HOOK" ] }
},
"policyItems": [
{
"accesses": [ { "type": "post-notification" } ],
"groups": [ "hook-users" ]
}
]
},
{
"id": 8, "name": "Entities having FINANCE classification", "isDenyAllElse": true,
"resources": {
Expand Down Expand Up @@ -145,7 +169,8 @@
{ "itemId": 13, "name": "end-one-entity", "level": 40, "parent": "end-one-entity-classification", "accessTypeRestrictions": [ "add-relationship", "update-relationship", "remove-relationship" ] },
{ "itemId": 14, "name": "end-two-entity-type", "level": 50, "parent": "end-one-entity" },
{ "itemId": 15, "name": "end-two-entity-classification", "level": 60, "parent": "end-two-entity-type" },
{ "itemId": 16, "name": "end-two-entity", "level": 70, "parent": "end-two-entity-classification", "accessTypeRestrictions": [ "add-relationship", "update-relationship", "remove-relationship" ] }
{ "itemId": 16, "name": "end-two-entity", "level": 70, "parent": "end-two-entity-classification", "accessTypeRestrictions": [ "add-relationship", "update-relationship", "remove-relationship" ] },
{ "itemId": 17, "name": "notification-topic", "level": 10, "accessTypeRestrictions": [ "post-notification" ] }
],
"accessTypes": [
{ "itemId": 1, "name": "type-read", "category": "READ", "label": "Read Type" },
Expand All @@ -168,7 +193,8 @@
{ "itemId": 18, "name": "admin-export", "category": "MANAGE", "label": "Export" },
{ "itemId": 19, "name": "admin-import", "category": "MANAGE", "label": "Import" },
{ "itemId": 20, "name": "admin-purge", "category": "MANAGE", "label": "Purge" },
{ "itemId": 21, "name": "admin-audits", "category": "MANAGE", "label": "Admin Audits" }
{ "itemId": 21, "name": "admin-audits", "category": "MANAGE", "label": "Admin Audits" },
{ "itemId": 22, "name": "post-notification", "category": "UPDATE", "label": "Post Notification" }
],
"configs": [
{ "itemId": 1, "name": "username", "type": "string", "mandatory": true },
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import org.apache.atlas.authorize.AtlasAuthorizationException;
import org.apache.atlas.authorize.AtlasAuthorizer;
import org.apache.atlas.authorize.AtlasEntityAccessRequest;
import org.apache.atlas.authorize.AtlasNotificationRequest;

Check failure on line 26 in ranger-atlas-plugin-shim/src/main/java/org/apache/ranger/authorization/atlas/authorizer/RangerAtlasAuthorizer.java

View workflow job for this annotation

GitHub Actions / build-17

error: cannot find symbol

Check failure on line 26 in ranger-atlas-plugin-shim/src/main/java/org/apache/ranger/authorization/atlas/authorizer/RangerAtlasAuthorizer.java

View workflow job for this annotation

GitHub Actions / build-17

error: cannot find symbol
import org.apache.atlas.authorize.AtlasRelationshipAccessRequest;
import org.apache.atlas.authorize.AtlasSearchResultScrubRequest;
import org.apache.atlas.authorize.AtlasTypeAccessRequest;
Expand Down Expand Up @@ -64,33 +65,40 @@
}

@Override
public boolean isAccessAllowed(AtlasAdminAccessRequest request) throws AtlasAuthorizationException {

Check failure on line 68 in ranger-atlas-plugin-shim/src/main/java/org/apache/ranger/authorization/atlas/authorizer/RangerAtlasAuthorizer.java

View workflow job for this annotation

GitHub Actions / build-17

error: name clash: class RangerAtlasAuthorizer has two methods with the same erasure, yet neither overrides the other

Check failure on line 68 in ranger-atlas-plugin-shim/src/main/java/org/apache/ranger/authorization/atlas/authorizer/RangerAtlasAuthorizer.java

View workflow job for this annotation

GitHub Actions / build-17

error: name clash: class RangerAtlasAuthorizer has two methods with the same erasure, yet neither overrides the other
try (PluginClassLoaderActivator ignored = new PluginClassLoaderActivator(pluginClassLoader, "isAccessAllowed:adminAccess")) {
return rangerAtlasAuthorizerImpl.isAccessAllowed(request);
}
}

@Override
public boolean isAccessAllowed(AtlasEntityAccessRequest request) throws AtlasAuthorizationException {

Check failure on line 75 in ranger-atlas-plugin-shim/src/main/java/org/apache/ranger/authorization/atlas/authorizer/RangerAtlasAuthorizer.java

View workflow job for this annotation

GitHub Actions / build-17

error: name clash: class RangerAtlasAuthorizer has two methods with the same erasure, yet neither overrides the other

Check failure on line 75 in ranger-atlas-plugin-shim/src/main/java/org/apache/ranger/authorization/atlas/authorizer/RangerAtlasAuthorizer.java

View workflow job for this annotation

GitHub Actions / build-17

error: name clash: class RangerAtlasAuthorizer has two methods with the same erasure, yet neither overrides the other
try (PluginClassLoaderActivator ignored = new PluginClassLoaderActivator(pluginClassLoader, "isAccessAllowed:entityAccess")) {
return rangerAtlasAuthorizerImpl.isAccessAllowed(request);
}
}

@Override
public boolean isAccessAllowed(AtlasTypeAccessRequest request) throws AtlasAuthorizationException {

Check failure on line 82 in ranger-atlas-plugin-shim/src/main/java/org/apache/ranger/authorization/atlas/authorizer/RangerAtlasAuthorizer.java

View workflow job for this annotation

GitHub Actions / build-17

error: name clash: class RangerAtlasAuthorizer has two methods with the same erasure, yet neither overrides the other
try (PluginClassLoaderActivator ignored = new PluginClassLoaderActivator(pluginClassLoader, "isAccessAllowed:typeAccess")) {
return rangerAtlasAuthorizerImpl.isAccessAllowed(request);
}
}

@Override
public boolean isAccessAllowed(AtlasRelationshipAccessRequest request) throws AtlasAuthorizationException {

Check failure on line 89 in ranger-atlas-plugin-shim/src/main/java/org/apache/ranger/authorization/atlas/authorizer/RangerAtlasAuthorizer.java

View workflow job for this annotation

GitHub Actions / build-17

error: name clash: class RangerAtlasAuthorizer has two methods with the same erasure, yet neither overrides the other
try (PluginClassLoaderActivator ignored = new PluginClassLoaderActivator(pluginClassLoader, "isAccessAllowed:relationshipAccess")) {
return rangerAtlasAuthorizerImpl.isAccessAllowed(request);
}
}

@Override
public boolean isAccessAllowed(AtlasNotificationRequest request) throws AtlasAuthorizationException {

Check failure on line 96 in ranger-atlas-plugin-shim/src/main/java/org/apache/ranger/authorization/atlas/authorizer/RangerAtlasAuthorizer.java

View workflow job for this annotation

GitHub Actions / build-17

error: cannot find symbol

Check failure on line 96 in ranger-atlas-plugin-shim/src/main/java/org/apache/ranger/authorization/atlas/authorizer/RangerAtlasAuthorizer.java

View workflow job for this annotation

GitHub Actions / build-17

error: cannot find symbol
try (PluginClassLoaderActivator ignored = new PluginClassLoaderActivator(pluginClassLoader, "isAccessAllowed:notificationAccess")) {
return rangerAtlasAuthorizerImpl.isAccessAllowed(request);
}
}

@Override
public void scrubSearchResults(AtlasSearchResultScrubRequest request) throws AtlasAuthorizationException {
try (PluginClassLoaderActivator ignored = new PluginClassLoaderActivator(pluginClassLoader, "scrubSearchResults")) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2029,4 +2029,5 @@ INSERT INTO x_db_version_h (version,inst_at,inst_by,updated_at,updated_by,active
INSERT INTO x_db_version_h (version,inst_at,inst_by,updated_at,updated_by,active) VALUES ('J10064',UTC_TIMESTAMP(),'Ranger 3.0.0',UTC_TIMESTAMP(),'localhost','Y');
INSERT INTO x_db_version_h (version,inst_at,inst_by,updated_at,updated_by,active) VALUES ('J10065',UTC_TIMESTAMP(),'Ranger 3.0.0',UTC_TIMESTAMP(),'localhost','Y');
INSERT INTO x_db_version_h (version,inst_at,inst_by,updated_at,updated_by,active) VALUES ('J10066',UTC_TIMESTAMP(),'Ranger 3.0.0',UTC_TIMESTAMP(),'localhost','Y');
INSERT INTO x_db_version_h (version,inst_at,inst_by,updated_at,updated_by,active) VALUES ('J10067',UTC_TIMESTAMP(),'Ranger 3.0.0',UTC_TIMESTAMP(),'localhost','Y');
INSERT INTO x_db_version_h (version,inst_at,inst_by,updated_at,updated_by,active) VALUES ('JAVA_PATCHES',UTC_TIMESTAMP(),'Ranger 1.0.0',UTC_TIMESTAMP(),'localhost','Y');
Original file line number Diff line number Diff line change
Expand Up @@ -2253,5 +2253,6 @@ INSERT INTO x_db_version_h (id,version,inst_at,inst_by,updated_at,updated_by,act
INSERT INTO x_db_version_h (id,version,inst_at,inst_by,updated_at,updated_by,active) VALUES (X_DB_VERSION_H_SEQ.nextval,'J10064',sys_extract_utc(systimestamp),'Ranger 3.0.0',sys_extract_utc(systimestamp),'localhost','Y');
INSERT INTO x_db_version_h (id,version,inst_at,inst_by,updated_at,updated_by,active) VALUES (X_DB_VERSION_H_SEQ.nextval,'J10065',sys_extract_utc(systimestamp),'Ranger 3.0.0',sys_extract_utc(systimestamp),'localhost','Y');
INSERT INTO x_db_version_h (id,version,inst_at,inst_by,updated_at,updated_by,active) VALUES (X_DB_VERSION_H_SEQ.nextval,'J10066',sys_extract_utc(systimestamp),'Ranger 3.0.0',sys_extract_utc(systimestamp),'localhost','Y');
INSERT INTO x_db_version_h (id,version,inst_at,inst_by,updated_at,updated_by,active) VALUES (X_DB_VERSION_H_SEQ.nextval,'J10067',sys_extract_utc(systimestamp),'Ranger 3.0.0',sys_extract_utc(systimestamp),'localhost','Y');
INSERT INTO x_db_version_h (id,version,inst_at,inst_by,updated_at,updated_by,active) VALUES (X_DB_VERSION_H_SEQ.nextval,'JAVA_PATCHES',sys_extract_utc(systimestamp),'Ranger 1.0.0',sys_extract_utc(systimestamp),'localhost','Y');
commit;
Original file line number Diff line number Diff line change
Expand Up @@ -2186,6 +2186,7 @@ INSERT INTO x_db_version_h (version,inst_at,inst_by,updated_at,updated_by,active
INSERT INTO x_db_version_h (version,inst_at,inst_by,updated_at,updated_by,active) VALUES ('J10064',current_timestamp,'Ranger 3.0.0',current_timestamp,'localhost','Y');
INSERT INTO x_db_version_h (version,inst_at,inst_by,updated_at,updated_by,active) VALUES ('J10065',current_timestamp,'Ranger 3.0.0',current_timestamp,'localhost','Y');
INSERT INTO x_db_version_h (version,inst_at,inst_by,updated_at,updated_by,active) VALUES ('J10066',current_timestamp,'Ranger 3.0.0',current_timestamp,'localhost','Y');
INSERT INTO x_db_version_h (version,inst_at,inst_by,updated_at,updated_by,active) VALUES ('J10067',current_timestamp,'Ranger 3.0.0',current_timestamp,'localhost','Y');
INSERT INTO x_db_version_h (version,inst_at,inst_by,updated_at,updated_by,active) VALUES ('JAVA_PATCHES',current_timestamp,'Ranger 1.0.0',current_timestamp,'localhost','Y');

DROP VIEW IF EXISTS vx_principal;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2421,6 +2421,8 @@ INSERT INTO x_db_version_h (version,inst_at,inst_by,updated_at,updated_by,active
GO
INSERT INTO x_db_version_h (version,inst_at,inst_by,updated_at,updated_by,active) VALUES ('J10066',CURRENT_TIMESTAMP,'Ranger 3.0.0',CURRENT_TIMESTAMP,'localhost','Y');
GO
INSERT INTO x_db_version_h (version,inst_at,inst_by,updated_at,updated_by,active) VALUES ('J10067',CURRENT_TIMESTAMP,'Ranger 3.0.0',CURRENT_TIMESTAMP,'localhost','Y');
GO
INSERT INTO x_db_version_h (version,inst_at,inst_by,updated_at,updated_by,active) VALUES ('JAVA_PATCHES',CURRENT_TIMESTAMP,'Ranger 1.0.0',CURRENT_TIMESTAMP,'localhost','Y');
GO
exit
Original file line number Diff line number Diff line change
Expand Up @@ -4626,5 +4626,6 @@ INSERT INTO x_db_version_h (version,inst_at,inst_by,updated_at,updated_by,active
INSERT INTO x_db_version_h (version,inst_at,inst_by,updated_at,updated_by,active) VALUES ('J10064',CURRENT_TIMESTAMP,'Ranger 3.0.0',CURRENT_TIMESTAMP,'localhost','Y');
INSERT INTO x_db_version_h (version,inst_at,inst_by,updated_at,updated_by,active) VALUES ('J10065',CURRENT_TIMESTAMP,'Ranger 3.0.0',CURRENT_TIMESTAMP,'localhost','Y');
INSERT INTO x_db_version_h (version,inst_at,inst_by,updated_at,updated_by,active) VALUES ('J10066',CURRENT_TIMESTAMP,'Ranger 3.0.0',CURRENT_TIMESTAMP,'localhost','Y');
INSERT INTO x_db_version_h (version,inst_at,inst_by,updated_at,updated_by,active) VALUES ('J10067',CURRENT_TIMESTAMP,'Ranger 3.0.0',CURRENT_TIMESTAMP,'localhost','Y');
INSERT INTO x_db_version_h (version,inst_at,inst_by,updated_at,updated_by,active) VALUES ('JAVA_PATCHES',CURRENT_TIMESTAMP,'Ranger 1.0.0',CURRENT_TIMESTAMP,'localhost','Y');
GO
Loading