This is an automated email from the ASF dual-hosted git repository. kishor pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/ranger.git
The following commit(s) were added to refs/heads/master by this push: new 30b1988fc RANGER-5180: GDS feature support on Oracle database 30b1988fc is described below commit 30b1988fcc69d32299520d89f6d21f07fdde9f2c Author: Rakesh Gupta <rakesh.gupta.dev...@gmail.com> AuthorDate: Wed Apr 23 13:03:58 2025 +0530 RANGER-5180: GDS feature support on Oracle database --- .../optimized/current/ranger_core_db_oracle.sql | 243 ++++++++++++++++++ .../db/oracle/patches/067-create-gds-tables.sql | 274 +++++++++++++++++++++ .../db/oracle/patches/070-add-gds-perm.sql | 64 +++++ .../patches/071-alter-x_service_version_info.sql | 34 +++ 4 files changed, 615 insertions(+) diff --git a/security-admin/db/oracle/optimized/current/ranger_core_db_oracle.sql b/security-admin/db/oracle/optimized/current/ranger_core_db_oracle.sql index ac6356fb1..e1217f0c4 100644 --- a/security-admin/db/oracle/optimized/current/ranger_core_db_oracle.sql +++ b/security-admin/db/oracle/optimized/current/ranger_core_db_oracle.sql @@ -102,6 +102,15 @@ call spdropsequence('X_POLICY_CHANGE_LOG_SEQ'); call spdropsequence('X_TAG_CHANGE_LOG_SEQ'); call spdropsequence('X_SEC_ZONE_REF_ROLE_SEQ'); +call spdropsequence('X_GDS_DATASET_SEQ'); +call spdropsequence('X_GDS_PROJECT_SEQ'); +call spdropsequence('X_GDS_DATA_SHARE_SEQ'); +call spdropsequence('X_GDS_SHARED_RESOURCE_SEQ'); +call spdropsequence('X_GDS_DATA_SHARE_IN_DATASET_SEQ'); +call spdropsequence('X_GDS_DATASET_IN_PROJECT_SEQ'); +call spdropsequence('X_GDS_DATASET_POLICY_MAP_SEQ'); +call spdropsequence('X_GDS_PROJECT_POLICY_MAP_SEQ'); + CREATE SEQUENCE SEQ_GEN_IDENTITY START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE; CREATE SEQUENCE X_ACCESS_AUDIT_SEQ START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE; CREATE SEQUENCE X_ASSET_SEQ START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE; @@ -180,6 +189,15 @@ CREATE SEQUENCE X_ROLE_REF_USER_SEQ START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE; CREATE SEQUENCE X_ROLE_REF_GROUP_SEQ START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE; CREATE SEQUENCE X_POLICY_REF_ROLE_SEQ START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE; CREATE SEQUENCE X_ROLE_REF_ROLE_SEQ START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE; + +CREATE SEQUENCE X_GDS_DATASET_SEQ START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE; +CREATE SEQUENCE X_GDS_PROJECT_SEQ START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE; +CREATE SEQUENCE X_GDS_DATA_SHARE_SEQ START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE; +CREATE SEQUENCE X_GDS_SHARED_RESOURCE_SEQ START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE; +CREATE SEQUENCE X_GDS_DATA_SHARE_IN_DATASET_SEQ START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE; +CREATE SEQUENCE X_GDS_DATASET_IN_PROJECT_SEQ START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE; +CREATE SEQUENCE X_GDS_DATASET_POLICY_MAP_SEQ START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE; +CREATE SEQUENCE X_GDS_PROJECT_POLICY_MAP_SEQ START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE; commit; CREATE OR REPLACE PROCEDURE spdroptable(ObjName IN varchar2) @@ -283,6 +301,14 @@ call spdroptable('x_portal_user_role'); call spdroptable('x_portal_user'); call spdroptable('x_db_version_h'); +call spdroptable('x_gds_dataset'); +call spdroptable('x_gds_project'); +call spdroptable('x_gds_data_share'); +call spdroptable('x_gds_shared_resource'); +call spdroptable('x_gds_data_share_in_dataset'); +call spdroptable('x_gds_dataset_in_project'); +call spdroptable('x_gds_dataset_policy_map'); +call spdroptable('x_gds_project_policy_map'); -- create tables create table X_DB_VERSION_H ( @@ -1906,6 +1932,213 @@ PRIMARY KEY (id), CONSTRAINT x_rms_map_provider_UK_name UNIQUE(name) ); +CREATE TABLE x_gds_dataset ( + id NUMBER(20) NOT NULL, + guid VARCHAR2(64) DEFAULT NULL NULL, + create_time DATE DEFAULT NULL NULL, + update_time DATE DEFAULT NULL NULL, + added_by_id NUMBER(20) DEFAULT NULL NULL, + upd_by_id NUMBER(20) DEFAULT NULL NULL, + version NUMBER(20) DEFAULT '1' NOT NULL, + is_enabled NUMBER(1) DEFAULT '1' NOT NULL, + name VARCHAR2(512) DEFAULT NULL NULL, + description CLOB DEFAULT NULL NULL, + acl CLOB DEFAULT NULL NULL, + terms_of_use CLOB DEFAULT NULL NULL, + options CLOB DEFAULT NULL NULL, + additional_info CLOB DEFAULT NULL NULL, + primary key (id), + CONSTRAINT x_gds_dataset_UK_name UNIQUE(name), + CONSTRAINT x_gds_dataset_FK_added_by_id FOREIGN KEY(added_by_id) REFERENCES x_portal_user(id), + CONSTRAINT x_gds_dataset_FK_upd_by_id FOREIGN KEY(upd_by_id) REFERENCES x_portal_user(id) +); + +CREATE INDEX x_gds_dataset_guid ON x_gds_dataset(guid); + + +CREATE TABLE x_gds_project ( + id NUMBER(20) NOT NULL, + guid VARCHAR2(64) DEFAULT NULL NULL, + create_time DATE DEFAULT NULL NULL, + update_time DATE DEFAULT NULL NULL, + added_by_id NUMBER(20) DEFAULT NULL NULL, + upd_by_id NUMBER(20) DEFAULT NULL NULL, + version NUMBER(20) DEFAULT '1' NOT NULL, + is_enabled NUMBER(1) DEFAULT '1' NOT NULL, + name VARCHAR2(512) DEFAULT NULL NULL, + description CLOB DEFAULT NULL NULL, + acl CLOB DEFAULT NULL NULL, + terms_of_use CLOB DEFAULT NULL NULL, + options CLOB DEFAULT NULL NULL, + additional_info CLOB DEFAULT NULL NULL, + PRIMARY KEY (id), + CONSTRAINT x_gds_project_UK_name UNIQUE(name), + CONSTRAINT x_gds_project_FK_added_by_id FOREIGN KEY(added_by_id) REFERENCES x_portal_user(id), + CONSTRAINT x_gds_project_FK_upd_by_id FOREIGN KEY(upd_by_id) REFERENCES x_portal_user(id) +); + +CREATE INDEX x_gds_project_guid ON x_gds_project(guid); + + +CREATE TABLE x_gds_data_share ( + id NUMBER(20) NOT NULL, + guid VARCHAR2(64) DEFAULT NULL NULL, + create_time DATE DEFAULT NULL NULL, + update_time DATE DEFAULT NULL NULL, + added_by_id NUMBER(20) DEFAULT NULL NULL, + upd_by_id NUMBER(20) DEFAULT NULL NULL, + version NUMBER(20) DEFAULT '1' NOT NULL, + is_enabled NUMBER(1) DEFAULT '1' NOT NULL, + name VARCHAR2(512) NOT NULL, + description CLOB DEFAULT NULL NULL, + acl CLOB NOT NULL, + service_id NUMBER(20) NOT NULL, + zone_id NUMBER(20) NOT NULL, + condition_expr CLOB DEFAULT NULL NULL, + default_access_types CLOB DEFAULT NULL NULL, + default_tag_masks CLOB DEFAULT NULL NULL, + terms_of_use CLOB DEFAULT NULL NULL, + options CLOB DEFAULT NULL NULL, + additional_info CLOB DEFAULT NULL NULL, + PRIMARY KEY (id), + CONSTRAINT x_gds_data_share_UK_name UNIQUE(service_id, zone_id, name), + CONSTRAINT x_gds_data_share_FK_added_by_id FOREIGN KEY(added_by_id) REFERENCES x_portal_user(id), + CONSTRAINT x_gds_data_share_FK_upd_by_id FOREIGN KEY(upd_by_id) REFERENCES x_portal_user(id), + CONSTRAINT x_gds_data_share_FK_service_id FOREIGN KEY(service_id) REFERENCES x_service(id), + CONSTRAINT x_gds_data_share_FK_zone_id FOREIGN KEY(zone_id) REFERENCES x_security_zone(id) +); + +CREATE INDEX x_gds_data_share_guid ON x_gds_data_share(guid); +CREATE INDEX x_gds_data_share_service_id ON x_gds_data_share(service_id); +CREATE INDEX x_gds_data_share_zone_id ON x_gds_data_share(zone_id); + + +CREATE TABLE x_gds_shared_resource ( + id NUMBER(20) NOT NULL, + guid VARCHAR2(64) NOT NULL, + create_time DATE DEFAULT NULL NULL, + update_time DATE DEFAULT NULL NULL, + added_by_id NUMBER(20) DEFAULT NULL NULL, + upd_by_id NUMBER(20) DEFAULT NULL NULL, + version NUMBER(20) DEFAULT '1' NOT NULL, + is_enabled NUMBER(1) DEFAULT '1' NOT NULL, + name VARCHAR2(512) NOT NULL, + description CLOB DEFAULT NULL NULL, + data_share_id NUMBER(20) NOT NULL, + "resource" CLOB NOT NULL, + resource_signature VARCHAR2(128) NOT NULL, + sub_resource CLOB DEFAULT NULL NULL, + sub_resource_type CLOB DEFAULT NULL NULL, + condition_expr CLOB DEFAULT NULL NULL, + access_types CLOB DEFAULT NULL NULL, + row_filter CLOB DEFAULT NULL NULL, + sub_resource_masks CLOB DEFAULT NULL NULL, + profiles CLOB DEFAULT NULL NULL, + options CLOB DEFAULT NULL NULL, + additional_info CLOB DEFAULT NULL NULL, + PRIMARY KEY (id), + CONSTRAINT x_gds_shared_resource_UK_name UNIQUE(data_share_id, name), + CONSTRAINT x_gds_shared_resource_UK_resource_signature UNIQUE(data_share_id, resource_signature), + CONSTRAINT x_gds_shared_resource_FK_added_by_id FOREIGN KEY(added_by_id) REFERENCES x_portal_user(id), + CONSTRAINT x_gds_shared_resource_FK_upd_by_id FOREIGN KEY(upd_by_id) REFERENCES x_portal_user(id), + CONSTRAINT x_gds_shared_resource_FK_data_share_id FOREIGN KEY(data_share_id) REFERENCES x_gds_data_share(id) +); + +CREATE INDEX x_gds_shared_resource_guid ON x_gds_shared_resource(guid); +CREATE INDEX x_gds_shared_resource_data_share_id ON x_gds_shared_resource(data_share_id); + + +CREATE TABLE x_gds_data_share_in_dataset ( + id NUMBER(20) NOT NULL, + guid VARCHAR2(64) NOT NULL, + create_time DATE DEFAULT NULL NULL, + update_time DATE DEFAULT NULL NULL, + added_by_id NUMBER(20) DEFAULT NULL NULL, + upd_by_id NUMBER(20) DEFAULT NULL NULL, + version NUMBER(20) DEFAULT '1' NOT NULL, + is_enabled NUMBER(1) DEFAULT '1' NOT NULL, + description CLOB DEFAULT NULL NULL, + data_share_id NUMBER(20) NOT NULL, + dataset_id NUMBER(20) NOT NULL, + status NUMBER(5) NOT NULL, + validity_period CLOB DEFAULT NULL NULL, + profiles CLOB DEFAULT NULL NULL, + options CLOB DEFAULT NULL NULL, + additional_info CLOB DEFAULT NULL NULL, + approver_id NUMBER(20) DEFAULT NULL NULL, + PRIMARY KEY (id), + CONSTRAINT x_gds_dshid_UK_data_share_id_dataset_id UNIQUE(data_share_id, dataset_id), + CONSTRAINT x_gds_dshid_FK_added_by_id FOREIGN KEY (added_by_id) REFERENCES x_portal_user(id), + CONSTRAINT x_gds_dshid_FK_upd_by_id FOREIGN KEY (upd_by_id) REFERENCES x_portal_user(id), + CONSTRAINT x_gds_dshid_FK_data_share_id FOREIGN KEY (data_share_id) REFERENCES x_gds_data_share(id), + CONSTRAINT x_gds_dshid_FK_dataset_id FOREIGN KEY (dataset_id) REFERENCES x_gds_dataset(id), + CONSTRAINT x_gds_dshid_FK_approver_id FOREIGN KEY (approver_id) REFERENCES x_portal_user(id) +); + +CREATE INDEX x_gds_dshid_guid ON x_gds_data_share_in_dataset(guid); +CREATE INDEX x_gds_dshid_data_share_id ON x_gds_data_share_in_dataset(data_share_id); +CREATE INDEX x_gds_dshid_dataset_id ON x_gds_data_share_in_dataset(dataset_id); + + +CREATE TABLE x_gds_dataset_in_project ( + id NUMBER(20) NOT NULL, + guid VARCHAR2(64) NOT NULL, + create_time DATE DEFAULT NULL NULL, + update_time DATE DEFAULT NULL NULL, + added_by_id NUMBER(20) DEFAULT NULL NULL, + upd_by_id NUMBER(20) DEFAULT NULL NULL, + version NUMBER(20) DEFAULT '1' NOT NULL, + is_enabled NUMBER(1) DEFAULT '1' NOT NULL, + description CLOB DEFAULT NULL NULL, + dataset_id NUMBER(20) NOT NULL, + project_id NUMBER(20) NOT NULL, + status NUMBER(5) NOT NULL, + validity_period CLOB DEFAULT NULL NULL, + profiles CLOB DEFAULT NULL NULL, + options CLOB DEFAULT NULL NULL, + additional_info CLOB DEFAULT NULL NULL, + approver_id NUMBER(20) DEFAULT NULL NULL, + PRIMARY KEY (id), + CONSTRAINT x_gds_dip_UK_data_share_id_dataset_id UNIQUE(dataset_id, project_id), + CONSTRAINT x_gds_dip_FK_added_by_id FOREIGN KEY (added_by_id) REFERENCES x_portal_user(id), + CONSTRAINT x_gds_dip_FK_upd_by_id FOREIGN KEY (upd_by_id) REFERENCES x_portal_user(id), + CONSTRAINT x_gds_dip_FK_dataset_id FOREIGN KEY (dataset_id) REFERENCES x_gds_dataset(id), + CONSTRAINT x_gds_dip_FK_project_id FOREIGN KEY (project_id) REFERENCES x_gds_project(id), + CONSTRAINT x_gds_dip_FK_approver_id FOREIGN KEY (approver_id) REFERENCES x_portal_user(id) +); + +CREATE INDEX x_gds_dip_guid ON x_gds_dataset_in_project(guid); +CREATE INDEX x_gds_dip_dataset_id ON x_gds_dataset_in_project(dataset_id); +CREATE INDEX x_gds_dip_project_id ON x_gds_dataset_in_project(project_id); + + +CREATE TABLE x_gds_dataset_policy_map ( + id NUMBER(20) NOT NULL, + dataset_id NUMBER(20) NOT NULL, + policy_id NUMBER(20) NOT NULL, + PRIMARY KEY (id), + CONSTRAINT x_gds_dpm_UK_dataset_id_policy_id UNIQUE (dataset_id, policy_id), + CONSTRAINT x_gds_dpm_FK_dataset_id FOREIGN KEY (dataset_id) REFERENCES x_gds_dataset(id), + CONSTRAINT x_gds_dpm_FK_policy_id FOREIGN KEY (policy_id) REFERENCES x_policy(id) +); + +CREATE INDEX x_gds_dpm_dataset_id ON x_gds_dataset_policy_map(dataset_id); +CREATE INDEX x_gds_dpm_policy_id ON x_gds_dataset_policy_map(policy_id); + + +CREATE TABLE x_gds_project_policy_map ( + id NUMBER(20) NOT NULL, + project_id NUMBER(20) NOT NULL, + policy_id NUMBER(20) NOT NULL, + PRIMARY KEY (id), + CONSTRAINT x_gds_ppm_UK_project_id_policy_id UNIQUE (project_id, policy_id), + CONSTRAINT x_gds_ppm_FK_project_id FOREIGN KEY (project_id) REFERENCES x_gds_project(id), + CONSTRAINT x_gds_ppm_FK_policy_id FOREIGN KEY (policy_id) REFERENCES x_policy(id) +); + +CREATE INDEX x_gds_ppm_project_id ON x_gds_project_policy_map(project_id); +CREATE INDEX x_gds_ppm_policy_id ON x_gds_project_policy_map(policy_id); + CREATE VIEW vx_principal as (SELECT u.user_name AS principal_name, 0 AS principal_type, u.status AS status, u.is_visible AS is_visible, u.other_attributes AS other_attributes, u.create_time AS create_time, u.update_time AS update_time, u.added_by_id AS added_by_id, u.upd_by_id AS upd_by_id FROM x_user u) UNION ALL (SELECT g.group_name AS principal_name, 1 AS principal_type, g.status AS status, g.is_visible AS is_visible, g.other_attributes AS other_attributes, g.create_time AS create_time, g.update_time AS update_time, g.added_by_id AS added_by_id, g.upd_by_id AS upd_by_id FROM x_group g) UNION ALL @@ -1938,6 +2171,7 @@ INSERT INTO x_modules_master VALUES(X_MODULES_MASTER_SEQ.NEXTVAL,sys_extract_utc INSERT INTO x_modules_master VALUES(X_MODULES_MASTER_SEQ.NEXTVAL,sys_extract_utc(systimestamp),sys_extract_utc(systimestamp),getXportalUIdByLoginId('admin'),getXportalUIdByLoginId('admin'),'Key Manager',''); INSERT INTO x_modules_master VALUES(X_MODULES_MASTER_SEQ.NEXTVAL,sys_extract_utc(systimestamp),sys_extract_utc(systimestamp),getXportalUIdByLoginId('admin'),getXportalUIdByLoginId('admin'),'Tag Based Policies',''); INSERT INTO x_modules_master VALUES(X_MODULES_MASTER_SEQ.NEXTVAL,sys_extract_utc(systimestamp),sys_extract_utc(systimestamp),getXportalUIdByLoginId('admin'),getXportalUIdByLoginId('admin'),'Security Zone',''); +INSERT INTO x_modules_master VALUES(X_MODULES_MASTER_SEQ.NEXTVAL,sys_extract_utc(systimestamp),sys_extract_utc(systimestamp),getXportalUIdByLoginId('admin'),getXportalUIdByLoginId('admin'),'Governed Data Sharing',''); INSERT INTO x_security_zone(id, create_time, update_time, added_by_id, upd_by_id, version, name, jsonData, description) VALUES (X_SECURITY_ZONE_SEQ.NEXTVAL, sys_extract_utc(systimestamp), sys_extract_utc(systimestamp), getXportalUIdByLoginId('admin'), getXportalUIdByLoginId('admin'), 1, ' ', '','Unzoned zone'); commit; INSERT INTO x_db_version_h (id,version,inst_at,inst_by,updated_at,updated_by,active) VALUES (X_DB_VERSION_H_SEQ.nextval, 'CORE_DB_SCHEMA',sys_extract_utc(systimestamp),'Ranger 1.0.0',sys_extract_utc(systimestamp),'localhost','Y'); @@ -1995,6 +2229,12 @@ 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, '060',sys_extract_utc(systimestamp),'Ranger 1.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, '065',sys_extract_utc(systimestamp),'Ranger 1.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, '066',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, '067',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, '068',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, '069',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, '070',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, '071',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, '072',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, '073',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, '074',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, '075',sys_extract_utc(systimestamp),'Ranger 3.0.0',sys_extract_utc(systimestamp),'localhost','Y'); @@ -2023,6 +2263,9 @@ INSERT INTO x_user_module_perm (id,user_id,module_id,create_time,update_time,add INSERT INTO x_user_module_perm (id,user_id,module_id,create_time,update_time,added_by_id,upd_by_id,is_allowed) VALUES (X_USER_MODULE_PERM_SEQ.nextval,getXportalUIdByLoginId('admin'),getModulesIdByName('Security Zone'),sys_extract_utc(systimestamp),sys_extract_utc(systimestamp),getXportalUIdByLoginId('admin'),getXportalUIdByLoginId('admin'),1); INSERT INTO x_user_module_perm (id,user_id,module_id,create_time,update_time,added_by_id,upd_by_id,is_allowed) VALUES (X_USER_MODULE_PERM_SEQ.nextval,getXportalUIdByLoginId('rangerusersync'),getModulesIdByName('Security Zone'),sys_extract_utc(systimestamp),sys_extract_utc(systimestamp),getXportalUIdByLoginId('admin'),getXportalUIdByLoginId('admin'),1); INSERT INTO x_user_module_perm (id,user_id,module_id,create_time,update_time,added_by_id,upd_by_id,is_allowed) VALUES (X_USER_MODULE_PERM_SEQ.nextval,getXportalUIdByLoginId('rangertagsync'),getModulesIdByName('Security Zone'),sys_extract_utc(systimestamp),sys_extract_utc(systimestamp),getXportalUIdByLoginId('admin'),getXportalUIdByLoginId('admin'),1); +INSERT INTO x_user_module_perm (id,user_id,module_id,create_time,update_time,added_by_id,upd_by_id,is_allowed) VALUES (X_USER_MODULE_PERM_SEQ.nextval,getXportalUIdByLoginId('admin'),getModulesIdByName('Governed Data Sharing'),sys_extract_utc(systimestamp),sys_extract_utc(systimestamp),getXportalUIdByLoginId('admin'),getXportalUIdByLoginId('admin'),1); +INSERT INTO x_user_module_perm (id,user_id,module_id,create_time,update_time,added_by_id,upd_by_id,is_allowed) VALUES (X_USER_MODULE_PERM_SEQ.nextval,getXportalUIdByLoginId('rangerusersync'),getModulesIdByName('Governed Data Sharing'),sys_extract_utc(systimestamp),sys_extract_utc(systimestamp),getXportalUIdByLoginId('admin'),getXportalUIdByLoginId('admin'),1); +INSERT INTO x_user_module_perm (id,user_id,module_id,create_time,update_time,added_by_id,upd_by_id,is_allowed) VALUES (X_USER_MODULE_PERM_SEQ.nextval,getXportalUIdByLoginId('rangertagsync'),getModulesIdByName('Governed Data Sharing'),sys_extract_utc(systimestamp),sys_extract_utc(systimestamp),getXportalUIdByLoginId('admin'),getXportalUIdByLoginId('admin'),1); INSERT INTO x_ranger_global_state (id,create_time,update_time,added_by_id,upd_by_id,version,state_name,app_data) VALUES (X_RANGER_GLOBAL_STATE_SEQ.nextval,sys_extract_utc(systimestamp),sys_extract_utc(systimestamp),getXportalUIdByLoginId('admin'),getXportalUIdByLoginId('admin'),1,'RangerRole','{"Version":"1"}'); INSERT INTO x_ranger_global_state (id,create_time,update_time,added_by_id,upd_by_id,version,state_name,app_data) VALUES (X_RANGER_GLOBAL_STATE_SEQ.nextval,sys_extract_utc(systimestamp),sys_extract_utc(systimestamp),getXportalUIdByLoginId('admin'),getXportalUIdByLoginId('admin'),1,'RangerUserStore','{"Version":"1"}'); diff --git a/security-admin/db/oracle/patches/067-create-gds-tables.sql b/security-admin/db/oracle/patches/067-create-gds-tables.sql new file mode 100644 index 000000000..ebaa34465 --- /dev/null +++ b/security-admin/db/oracle/patches/067-create-gds-tables.sql @@ -0,0 +1,274 @@ +-- Licensed to the Apache Software Foundation (ASF) under one or more +-- contributor license agreements. See the NOTICE file distributed with +-- this work for additional information regarding copyright ownership. +-- The ASF licenses this file to You under the Apache License, Version 2.0 +-- (the "License"); you may not use this file except in compliance with +-- the License. You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. + +CREATE OR REPLACE PROCEDURE spdropsequence(ObjName IN varchar2) +IS +v_counter integer; +BEGIN + select count(*) into v_counter from user_sequences where sequence_name = upper(ObjName); + if (v_counter > 0) then + execute immediate 'DROP SEQUENCE ' || ObjName; + end if; +END;/ +/ + +call spdropsequence('X_GDS_DATASET_SEQ'); +call spdropsequence('X_GDS_PROJECT_SEQ'); +call spdropsequence('X_GDS_DATA_SHARE_SEQ'); +call spdropsequence('X_GDS_SHARED_RESOURCE_SEQ'); +call spdropsequence('X_GDS_DATA_SHARE_IN_DATASET_SEQ'); +call spdropsequence('X_GDS_DATASET_IN_PROJECT_SEQ'); +call spdropsequence('X_GDS_DATASET_POLICY_MAP_SEQ'); +call spdropsequence('X_GDS_PROJECT_POLICY_MAP_SEQ'); + +commit; + +CREATE SEQUENCE X_GDS_DATASET_SEQ START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE; +CREATE SEQUENCE X_GDS_PROJECT_SEQ START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE; +CREATE SEQUENCE X_GDS_DATA_SHARE_SEQ START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE; +CREATE SEQUENCE X_GDS_SHARED_RESOURCE_SEQ START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE; +CREATE SEQUENCE X_GDS_DATA_SHARE_IN_DATASET_SEQ START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE; +CREATE SEQUENCE X_GDS_DATASET_IN_PROJECT_SEQ START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE; +CREATE SEQUENCE X_GDS_DATASET_POLICY_MAP_SEQ START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE; +CREATE SEQUENCE X_GDS_PROJECT_POLICY_MAP_SEQ START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE; + + +CREATE OR REPLACE PROCEDURE spdroptable(ObjName IN varchar2) +IS +v_counter integer; +BEGIN + select count(*) into v_counter from user_tables where table_name = upper(ObjName); + if (v_counter > 0) then + execute immediate 'drop table ' || ObjName || ' cascade constraints'; + end if; +END;/ +/ + +call spdroptable('x_gds_dataset'); +call spdroptable('x_gds_project'); +call spdroptable('x_gds_data_share'); +call spdroptable('x_gds_shared_resource'); +call spdroptable('x_gds_data_share_in_dataset'); +call spdroptable('x_gds_dataset_in_project'); +call spdroptable('x_gds_dataset_policy_map'); +call spdroptable('x_gds_project_policy_map'); + + +CREATE TABLE x_gds_dataset ( + id NUMBER(20) NOT NULL, + guid VARCHAR2(64) DEFAULT NULL NULL, + create_time DATE DEFAULT NULL NULL, + update_time DATE DEFAULT NULL NULL, + added_by_id NUMBER(20) DEFAULT NULL NULL, + upd_by_id NUMBER(20) DEFAULT NULL NULL, + version NUMBER(20) DEFAULT '1' NOT NULL, + is_enabled NUMBER(1) DEFAULT '1' NOT NULL, + name VARCHAR2(512) DEFAULT NULL NULL, + description CLOB DEFAULT NULL NULL, + acl CLOB DEFAULT NULL NULL, + terms_of_use CLOB DEFAULT NULL NULL, + options CLOB DEFAULT NULL NULL, + additional_info CLOB DEFAULT NULL NULL, + primary key (id), + CONSTRAINT x_gds_dataset_UK_name UNIQUE(name), + CONSTRAINT x_gds_dataset_FK_added_by_id FOREIGN KEY(added_by_id) REFERENCES x_portal_user(id), + CONSTRAINT x_gds_dataset_FK_upd_by_id FOREIGN KEY(upd_by_id) REFERENCES x_portal_user(id) +); + +CREATE INDEX x_gds_dataset_guid ON x_gds_dataset(guid); + + +CREATE TABLE x_gds_project ( + id NUMBER(20) NOT NULL, + guid VARCHAR2(64) DEFAULT NULL NULL, + create_time DATE DEFAULT NULL NULL, + update_time DATE DEFAULT NULL NULL, + added_by_id NUMBER(20) DEFAULT NULL NULL, + upd_by_id NUMBER(20) DEFAULT NULL NULL, + version NUMBER(20) DEFAULT '1' NOT NULL, + is_enabled NUMBER(1) DEFAULT '1' NOT NULL, + name VARCHAR2(512) DEFAULT NULL NULL, + description CLOB DEFAULT NULL NULL, + acl CLOB DEFAULT NULL NULL, + terms_of_use CLOB DEFAULT NULL NULL, + options CLOB DEFAULT NULL NULL, + additional_info CLOB DEFAULT NULL NULL, + PRIMARY KEY (id), + CONSTRAINT x_gds_project_UK_name UNIQUE(name), + CONSTRAINT x_gds_project_FK_added_by_id FOREIGN KEY(added_by_id) REFERENCES x_portal_user(id), + CONSTRAINT x_gds_project_FK_upd_by_id FOREIGN KEY(upd_by_id) REFERENCES x_portal_user(id) +); + +CREATE INDEX x_gds_project_guid ON x_gds_project(guid); + + +CREATE TABLE x_gds_data_share ( + id NUMBER(20) NOT NULL, + guid VARCHAR2(64) DEFAULT NULL NULL, + create_time DATE DEFAULT NULL NULL, + update_time DATE DEFAULT NULL NULL, + added_by_id NUMBER(20) DEFAULT NULL NULL, + upd_by_id NUMBER(20) DEFAULT NULL NULL, + version NUMBER(20) DEFAULT '1' NOT NULL, + is_enabled NUMBER(1) DEFAULT '1' NOT NULL, + name VARCHAR2(512) NOT NULL, + description CLOB DEFAULT NULL NULL, + acl CLOB NOT NULL, + service_id NUMBER(20) NOT NULL, + zone_id NUMBER(20) NOT NULL, + condition_expr CLOB DEFAULT NULL NULL, + default_access_types CLOB DEFAULT NULL NULL, + default_tag_masks CLOB DEFAULT NULL NULL, + terms_of_use CLOB DEFAULT NULL NULL, + options CLOB DEFAULT NULL NULL, + additional_info CLOB DEFAULT NULL NULL, + PRIMARY KEY (id), + CONSTRAINT x_gds_data_share_UK_name UNIQUE(service_id, zone_id, name), + CONSTRAINT x_gds_data_share_FK_added_by_id FOREIGN KEY(added_by_id) REFERENCES x_portal_user(id), + CONSTRAINT x_gds_data_share_FK_upd_by_id FOREIGN KEY(upd_by_id) REFERENCES x_portal_user(id), + CONSTRAINT x_gds_data_share_FK_service_id FOREIGN KEY(service_id) REFERENCES x_service(id), + CONSTRAINT x_gds_data_share_FK_zone_id FOREIGN KEY(zone_id) REFERENCES x_security_zone(id) +); + +CREATE INDEX x_gds_data_share_guid ON x_gds_data_share(guid); +CREATE INDEX x_gds_data_share_service_id ON x_gds_data_share(service_id); +CREATE INDEX x_gds_data_share_zone_id ON x_gds_data_share(zone_id); + + +CREATE TABLE x_gds_shared_resource ( + id NUMBER(20) NOT NULL, + guid VARCHAR2(64) NOT NULL, + create_time DATE DEFAULT NULL NULL, + update_time DATE DEFAULT NULL NULL, + added_by_id NUMBER(20) DEFAULT NULL NULL, + upd_by_id NUMBER(20) DEFAULT NULL NULL, + version NUMBER(20) DEFAULT '1' NOT NULL, + is_enabled NUMBER(1) DEFAULT '1' NOT NULL, + name VARCHAR2(512) NOT NULL, + description CLOB DEFAULT NULL NULL, + data_share_id NUMBER(20) NOT NULL, + "resource" CLOB NOT NULL, + resource_signature VARCHAR2(128) NOT NULL, + sub_resource CLOB DEFAULT NULL NULL, + sub_resource_type CLOB DEFAULT NULL NULL, + condition_expr CLOB DEFAULT NULL NULL, + access_types CLOB DEFAULT NULL NULL, + row_filter CLOB DEFAULT NULL NULL, + sub_resource_masks CLOB DEFAULT NULL NULL, + profiles CLOB DEFAULT NULL NULL, + options CLOB DEFAULT NULL NULL, + additional_info CLOB DEFAULT NULL NULL, + PRIMARY KEY (id), + CONSTRAINT x_gds_shared_resource_UK_name UNIQUE(data_share_id, name), + CONSTRAINT x_gds_shared_resource_UK_resource_signature UNIQUE(data_share_id, resource_signature), + CONSTRAINT x_gds_shared_resource_FK_added_by_id FOREIGN KEY(added_by_id) REFERENCES x_portal_user(id), + CONSTRAINT x_gds_shared_resource_FK_upd_by_id FOREIGN KEY(upd_by_id) REFERENCES x_portal_user(id), + CONSTRAINT x_gds_shared_resource_FK_data_share_id FOREIGN KEY(data_share_id) REFERENCES x_gds_data_share(id) +); + +CREATE INDEX x_gds_shared_resource_guid ON x_gds_shared_resource(guid); +CREATE INDEX x_gds_shared_resource_data_share_id ON x_gds_shared_resource(data_share_id); + + +CREATE TABLE x_gds_data_share_in_dataset ( + id NUMBER(20) NOT NULL, + guid VARCHAR2(64) NOT NULL, + create_time DATE DEFAULT NULL NULL, + update_time DATE DEFAULT NULL NULL, + added_by_id NUMBER(20) DEFAULT NULL NULL, + upd_by_id NUMBER(20) DEFAULT NULL NULL, + version NUMBER(20) DEFAULT '1' NOT NULL, + is_enabled NUMBER(1) DEFAULT '1' NOT NULL, + description CLOB DEFAULT NULL NULL, + data_share_id NUMBER(20) NOT NULL, + dataset_id NUMBER(20) NOT NULL, + status NUMBER(5) NOT NULL, + validity_period CLOB DEFAULT NULL NULL, + profiles CLOB DEFAULT NULL NULL, + options CLOB DEFAULT NULL NULL, + additional_info CLOB DEFAULT NULL NULL, + approver_id NUMBER(20) DEFAULT NULL NULL, + PRIMARY KEY (id), + CONSTRAINT x_gds_dshid_UK_data_share_id_dataset_id UNIQUE(data_share_id, dataset_id), + CONSTRAINT x_gds_dshid_FK_added_by_id FOREIGN KEY (added_by_id) REFERENCES x_portal_user(id), + CONSTRAINT x_gds_dshid_FK_upd_by_id FOREIGN KEY (upd_by_id) REFERENCES x_portal_user(id), + CONSTRAINT x_gds_dshid_FK_data_share_id FOREIGN KEY (data_share_id) REFERENCES x_gds_data_share(id), + CONSTRAINT x_gds_dshid_FK_dataset_id FOREIGN KEY (dataset_id) REFERENCES x_gds_dataset(id), + CONSTRAINT x_gds_dshid_FK_approver_id FOREIGN KEY (approver_id) REFERENCES x_portal_user(id) +); + +CREATE INDEX x_gds_dshid_guid ON x_gds_data_share_in_dataset(guid); +CREATE INDEX x_gds_dshid_data_share_id ON x_gds_data_share_in_dataset(data_share_id); +CREATE INDEX x_gds_dshid_dataset_id ON x_gds_data_share_in_dataset(dataset_id); + + +CREATE TABLE x_gds_dataset_in_project ( + id NUMBER(20) NOT NULL, + guid VARCHAR2(64) NOT NULL, + create_time DATE DEFAULT NULL NULL, + update_time DATE DEFAULT NULL NULL, + added_by_id NUMBER(20) DEFAULT NULL NULL, + upd_by_id NUMBER(20) DEFAULT NULL NULL, + version NUMBER(20) DEFAULT '1' NOT NULL, + is_enabled NUMBER(1) DEFAULT '1' NOT NULL, + description CLOB DEFAULT NULL NULL, + dataset_id NUMBER(20) NOT NULL, + project_id NUMBER(20) NOT NULL, + status NUMBER(5) NOT NULL, + validity_period CLOB DEFAULT NULL NULL, + profiles CLOB DEFAULT NULL NULL, + options CLOB DEFAULT NULL NULL, + additional_info CLOB DEFAULT NULL NULL, + approver_id NUMBER(20) DEFAULT NULL NULL, + PRIMARY KEY (id), + CONSTRAINT x_gds_dip_UK_data_share_id_dataset_id UNIQUE(dataset_id, project_id), + CONSTRAINT x_gds_dip_FK_added_by_id FOREIGN KEY (added_by_id) REFERENCES x_portal_user(id), + CONSTRAINT x_gds_dip_FK_upd_by_id FOREIGN KEY (upd_by_id) REFERENCES x_portal_user(id), + CONSTRAINT x_gds_dip_FK_dataset_id FOREIGN KEY (dataset_id) REFERENCES x_gds_dataset(id), + CONSTRAINT x_gds_dip_FK_project_id FOREIGN KEY (project_id) REFERENCES x_gds_project(id), + CONSTRAINT x_gds_dip_FK_approver_id FOREIGN KEY (approver_id) REFERENCES x_portal_user(id) +); + +CREATE INDEX x_gds_dip_guid ON x_gds_dataset_in_project(guid); +CREATE INDEX x_gds_dip_dataset_id ON x_gds_dataset_in_project(dataset_id); +CREATE INDEX x_gds_dip_project_id ON x_gds_dataset_in_project(project_id); + + +CREATE TABLE x_gds_dataset_policy_map ( + id NUMBER(20) NOT NULL, + dataset_id NUMBER(20) NOT NULL, + policy_id NUMBER(20) NOT NULL, + PRIMARY KEY (id), + CONSTRAINT x_gds_dpm_UK_dataset_id_policy_id UNIQUE (dataset_id, policy_id), + CONSTRAINT x_gds_dpm_FK_dataset_id FOREIGN KEY (dataset_id) REFERENCES x_gds_dataset(id), + CONSTRAINT x_gds_dpm_FK_policy_id FOREIGN KEY (policy_id) REFERENCES x_policy(id) +); + +CREATE INDEX x_gds_dpm_dataset_id ON x_gds_dataset_policy_map(dataset_id); +CREATE INDEX x_gds_dpm_policy_id ON x_gds_dataset_policy_map(policy_id); + + +CREATE TABLE x_gds_project_policy_map ( + id NUMBER(20) NOT NULL, + project_id NUMBER(20) NOT NULL, + policy_id NUMBER(20) NOT NULL, + PRIMARY KEY (id), + CONSTRAINT x_gds_ppm_UK_project_id_policy_id UNIQUE (project_id, policy_id), + CONSTRAINT x_gds_ppm_FK_project_id FOREIGN KEY (project_id) REFERENCES x_gds_project(id), + CONSTRAINT x_gds_ppm_FK_policy_id FOREIGN KEY (policy_id) REFERENCES x_policy(id) +); + +CREATE INDEX x_gds_ppm_project_id ON x_gds_project_policy_map(project_id); +CREATE INDEX x_gds_ppm_policy_id ON x_gds_project_policy_map(policy_id); diff --git a/security-admin/db/oracle/patches/070-add-gds-perm.sql b/security-admin/db/oracle/patches/070-add-gds-perm.sql new file mode 100644 index 000000000..32e305743 --- /dev/null +++ b/security-admin/db/oracle/patches/070-add-gds-perm.sql @@ -0,0 +1,64 @@ +-- Licensed to the Apache Software Foundation (ASF) under one or more +-- contributor license agreements. See the NOTICE file distributed with +-- this work for additional information regarding copyright ownership. +-- The ASF licenses this file to You under the Apache License, Version 2.0 +-- (the "License"); you may not use this file except in compliance with +-- the License. You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. + +CREATE OR REPLACE FUNCTION getXportalUIdByLoginId(input_val IN VARCHAR2) +RETURN NUMBER iS +BEGIN +DECLARE +myid Number := 0; +begin + SELECT x_portal_user.id into myid FROM x_portal_user + WHERE x_portal_user.login_id=input_val; + RETURN myid; +end; +END;/ + + +CREATE OR REPLACE FUNCTION getModulesIdByName(inputval IN VARCHAR2) +RETURN NUMBER is +BEGIN +Declare +myid Number := 0; +begin + SELECT id into myid FROM x_modules_master + WHERE MODULE = inputval; + RETURN myid; +end; +END;/ + +DECLARE + v_count number:=0; +BEGIN + select count(*) into v_count from x_modules_master where module='Governed Data Sharing'; + if (v_count = 0) then + INSERT INTO x_modules_master VALUES(X_MODULES_MASTER_SEQ.NEXTVAL,sys_extract_utc(systimestamp),sys_extract_utc(systimestamp),getXportalUIdByLoginId('admin'),getXportalUIdByLoginId('admin'),'Governed Data Sharing',''); + end if; + v_count:=0; + select count(*) into v_count from x_user_module_perm where user_id=getXportalUIdByLoginId('admin') and module_id=getModulesIdByName('Governed Data Sharing'); + if (v_count = 0) then + INSERT INTO x_user_module_perm (id,user_id,module_id,create_time,update_time,added_by_id,upd_by_id,is_allowed) VALUES (X_USER_MODULE_PERM_SEQ.nextval,getXportalUIdByLoginId('admin'),getModulesIdByName('Governed Data Sharing'),sys_extract_utc(systimestamp),sys_extract_utc(systimestamp),getXportalUIdByLoginId('admin'),getXportalUIdByLoginId('admin'),1); + end if; + v_count:=0; + select count(*) into v_count from x_user_module_perm where user_id=getXportalUIdByLoginId('rangerusersync') and module_id=getModulesIdByName('Governed Data Sharing'); + if (v_count = 0) then + INSERT INTO x_user_module_perm (id,user_id,module_id,create_time,update_time,added_by_id,upd_by_id,is_allowed) VALUES (X_USER_MODULE_PERM_SEQ.nextval,getXportalUIdByLoginId('rangerusersync'),getModulesIdByName('Governed Data Sharing'),sys_extract_utc(systimestamp),sys_extract_utc(systimestamp),getXportalUIdByLoginId('admin'),getXportalUIdByLoginId('admin'),1); + end if; + v_count:=0; + select count(*) into v_count from x_user_module_perm where user_id=getXportalUIdByLoginId('rangertagsync') and module_id=getModulesIdByName('Governed Data Sharing'); + if (v_count = 0) then + INSERT INTO x_user_module_perm (id,user_id,module_id,create_time,update_time,added_by_id,upd_by_id,is_allowed) VALUES (X_USER_MODULE_PERM_SEQ.nextval,getXportalUIdByLoginId('rangertagsync'),getModulesIdByName('Governed Data Sharing'),sys_extract_utc(systimestamp),sys_extract_utc(systimestamp),getXportalUIdByLoginId('admin'),getXportalUIdByLoginId('admin'),1); + end if; + commit; +END;/ diff --git a/security-admin/db/oracle/patches/071-alter-x_service_version_info.sql b/security-admin/db/oracle/patches/071-alter-x_service_version_info.sql new file mode 100644 index 000000000..ab26c8bc5 --- /dev/null +++ b/security-admin/db/oracle/patches/071-alter-x_service_version_info.sql @@ -0,0 +1,34 @@ +-- Licensed to the Apache Software Foundation (ASF) under one or more +-- contributor license agreements. See the NOTICE file distributed with +-- this work for additional information regarding copyright ownership. +-- The ASF licenses this file to You under the Apache License, Version 2.0 +-- (the "License"); you may not use this file except in compliance with +-- the License. You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. + +DECLARE + v_count number:=0; +BEGIN + select count(*) into v_count from user_tab_cols where table_name='X_SERVICE_VERSION_INFO' and column_name='GDS_VERSION'; + if (v_count = 0) then + execute immediate 'ALTER TABLE x_service_version_info ADD gds_version NUMBER(20) DEFAULT 0 NOT NULL'; + end if; + commit; +END;/ + +DECLARE + v_column_exists number:=0; +BEGIN + select count(*) into v_column_exists from user_tab_cols where table_name='X_SERVICE_VERSION_INFO' and column_name='GDS_UPDATE_TIME'; + if (v_column_exists = 0) then + execute immediate 'ALTER TABLE x_service_version_info ADD gds_update_time DATE DEFAULT NULL NULL'; + end if; + commit; +END;/