| -- 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. |
| |
| DROP TABLE IF EXISTS x_policy_ref_group CASCADE; |
| DROP SEQUENCE IF EXISTS x_policy_ref_group_seq; |
| DROP TABLE IF EXISTS x_policy_ref_user CASCADE; |
| DROP SEQUENCE IF EXISTS x_policy_ref_user_seq; |
| DROP TABLE IF EXISTS x_policy_ref_datamask_type CASCADE; |
| DROP SEQUENCE IF EXISTS x_policy_ref_datamask_type_seq; |
| DROP TABLE IF EXISTS x_policy_ref_condition CASCADE; |
| DROP SEQUENCE IF EXISTS x_policy_ref_condition_seq; |
| DROP TABLE IF EXISTS x_policy_ref_access_type CASCADE; |
| DROP SEQUENCE IF EXISTS x_policy_ref_access_type_seq; |
| DROP TABLE IF EXISTS x_policy_ref_resource CASCADE; |
| DROP SEQUENCE IF EXISTS x_policy_ref_resource_seq; |
| |
| CREATE SEQUENCE x_policy_ref_resource_seq; |
| CREATE TABLE x_policy_ref_resource( |
| id BIGINT DEFAULT nextval('x_policy_ref_resource_seq'::regclass), |
| guid VARCHAR(1024) DEFAULT NULL NULL, |
| create_time TIMESTAMP DEFAULT NULL NULL, |
| update_time TIMESTAMP DEFAULT NULL NULL, |
| added_by_id BIGINT DEFAULT NULL NULL, |
| upd_by_id BIGINT DEFAULT NULL NULL, |
| policy_id BIGINT NOT NULL, |
| resource_def_id BIGINT NOT NULL, |
| resource_name varchar(4000) DEFAULT NULL, |
| primary key(id), |
| CONSTRAINT x_p_ref_res_UK_polId_resDefId UNIQUE (policy_id, resource_def_id), |
| CONSTRAINT x_p_ref_res_FK_policy_id FOREIGN KEY(policy_id) REFERENCES x_policy(id), |
| CONSTRAINT x_p_ref_res_FK_resource_def_id FOREIGN KEY(resource_def_id) REFERENCES x_resource_def(id), |
| CONSTRAINT x_p_ref_res_FK_added_by_id FOREIGN KEY(added_by_id) REFERENCES x_portal_user(id), |
| CONSTRAINT x_p_ref_res_FK_upd_by_id FOREIGN KEY(upd_by_id) REFERENCES x_portal_user(id) |
| ); |
| commit; |
| |
| CREATE SEQUENCE x_policy_ref_access_type_seq; |
| CREATE TABLE x_policy_ref_access_type( |
| id BIGINT DEFAULT nextval('x_policy_ref_access_type_seq'::regclass), |
| guid VARCHAR(1024) DEFAULT NULL NULL, |
| create_time TIMESTAMP DEFAULT NULL NULL, |
| update_time TIMESTAMP DEFAULT NULL NULL, |
| added_by_id BIGINT DEFAULT NULL NULL, |
| upd_by_id BIGINT DEFAULT NULL NULL, |
| policy_id BIGINT NOT NULL, |
| access_def_id BIGINT NOT NULL, |
| access_type_name varchar(4000) DEFAULT NULL, |
| primary key(id), |
| CONSTRAINT x_p_ref_acc_UK_polId_accDefId UNIQUE(policy_id, access_def_id), |
| CONSTRAINT x_p_ref_acc_FK_policy_id FOREIGN KEY(policy_id) REFERENCES x_policy(id), |
| CONSTRAINT x_p_ref_acc_FK_acc_def_id FOREIGN KEY(access_def_id) REFERENCES x_access_type_def(id), |
| CONSTRAINT x_p_ref_acc_FK_added_by_id FOREIGN KEY(added_by_id) REFERENCES x_portal_user(id), |
| CONSTRAINT x_p_ref_acc_FK_upd_by_id FOREIGN KEY(upd_by_id) REFERENCES x_portal_user(id) |
| ); |
| commit; |
| |
| CREATE SEQUENCE x_policy_ref_condition_seq; |
| CREATE TABLE x_policy_ref_condition( |
| id BIGINT DEFAULT nextval('x_policy_ref_condition_seq'::regclass), |
| guid VARCHAR(1024) DEFAULT NULL NULL, |
| create_time TIMESTAMP DEFAULT NULL NULL, |
| update_time TIMESTAMP DEFAULT NULL NULL, |
| added_by_id BIGINT DEFAULT NULL NULL, |
| upd_by_id BIGINT DEFAULT NULL NULL, |
| policy_id BIGINT NOT NULL, |
| condition_def_id BIGINT NOT NULL, |
| condition_name varchar(4000) DEFAULT NULL, |
| primary key(id), |
| CONSTRAINT x_p_ref_cond_UK_polId_cDefId UNIQUE(policy_id, condition_def_id), |
| CONSTRAINT x_p_ref_cond_FK_policy_id FOREIGN KEY(policy_id) REFERENCES x_policy(id), |
| CONSTRAINT x_p_ref_cond_FK_cond_def_id FOREIGN KEY(condition_def_id) REFERENCES x_policy_condition_def(id), |
| CONSTRAINT x_p_ref_cond_FK_added_by_id FOREIGN KEY(added_by_id) REFERENCES x_portal_user(id), |
| CONSTRAINT x_p_ref_cond_FK_upd_by_id FOREIGN KEY(upd_by_id) REFERENCES x_portal_user(id) |
| ); |
| commit; |
| |
| CREATE SEQUENCE x_policy_ref_datamask_type_seq; |
| CREATE TABLE x_policy_ref_datamask_type( |
| id BIGINT DEFAULT nextval('x_policy_ref_datamask_type_seq'::regclass), |
| guid VARCHAR(1024) DEFAULT NULL NULL, |
| create_time TIMESTAMP DEFAULT NULL NULL, |
| update_time TIMESTAMP DEFAULT NULL NULL, |
| added_by_id BIGINT DEFAULT NULL NULL, |
| upd_by_id BIGINT DEFAULT NULL NULL, |
| policy_id BIGINT NOT NULL, |
| datamask_def_id BIGINT NOT NULL, |
| datamask_type_name varchar(4000) DEFAULT NULL, |
| primary key(id), |
| CONSTRAINT x_p_ref_dmk_UK_polId_dDefId UNIQUE(policy_id, datamask_def_id), |
| CONSTRAINT x_p_ref_dmk_FK_policy_id FOREIGN KEY(policy_id) REFERENCES x_policy(id), |
| CONSTRAINT x_p_ref_dmk_FK_dmk_def_id FOREIGN KEY(datamask_def_id) REFERENCES x_datamask_type_def(id), |
| CONSTRAINT x_p_ref_dmk_FK_added_by_id FOREIGN KEY(added_by_id) REFERENCES x_portal_user(id), |
| CONSTRAINT x_p_ref_dmk_FK_upd_by_id FOREIGN KEY(upd_by_id) REFERENCES x_portal_user(id) |
| ); |
| commit; |
| |
| CREATE SEQUENCE x_policy_ref_user_seq; |
| CREATE TABLE x_policy_ref_user( |
| id BIGINT DEFAULT nextval('x_policy_ref_user_seq'::regclass), |
| guid VARCHAR(1024) DEFAULT NULL NULL, |
| create_time TIMESTAMP DEFAULT NULL NULL, |
| update_time TIMESTAMP DEFAULT NULL NULL, |
| added_by_id BIGINT DEFAULT NULL NULL, |
| upd_by_id BIGINT DEFAULT NULL NULL, |
| policy_id BIGINT NOT NULL, |
| user_id BIGINT NOT NULL, |
| user_name varchar(4000) DEFAULT NULL, |
| primary key(id), |
| CONSTRAINT x_p_ref_usr_UK_polId_userId UNIQUE(policy_id, user_id), |
| CONSTRAINT x_p_ref_usr_FK_policy_id FOREIGN KEY(policy_id) REFERENCES x_policy(id), |
| CONSTRAINT x_p_ref_usr_FK_user_id FOREIGN KEY(user_id) REFERENCES x_user(id), |
| CONSTRAINT x_p_ref_usr_FK_added_by_id FOREIGN KEY(added_by_id) REFERENCES x_portal_user(id), |
| CONSTRAINT x_p_ref_usr_FK_upd_by_id FOREIGN KEY(upd_by_id) REFERENCES x_portal_user(id) |
| ); |
| commit; |
| |
| CREATE SEQUENCE x_policy_ref_group_seq; |
| CREATE TABLE x_policy_ref_group( |
| id BIGINT DEFAULT nextval('x_policy_ref_group_seq'::regclass), |
| guid VARCHAR(1024) DEFAULT NULL NULL, |
| create_time TIMESTAMP DEFAULT NULL NULL, |
| update_time TIMESTAMP DEFAULT NULL NULL, |
| added_by_id BIGINT DEFAULT NULL NULL, |
| upd_by_id BIGINT DEFAULT NULL NULL, |
| policy_id BIGINT NOT NULL, |
| group_id BIGINT NOT NULL, |
| group_name varchar(4000) DEFAULT NULL, |
| primary key(id), |
| CONSTRAINT x_p_ref_grp_UK_polId_grpId UNIQUE(policy_id, group_id), |
| CONSTRAINT x_p_ref_grp_FK_policy_id FOREIGN KEY(policy_id) REFERENCES x_policy(id), |
| CONSTRAINT x_p_ref_grp_FK_group_id FOREIGN KEY(group_id) REFERENCES x_group(id), |
| CONSTRAINT x_p_ref_grp_FK_added_by_id FOREIGN KEY(added_by_id) REFERENCES x_portal_user(id), |
| CONSTRAINT x_p_ref_grp_FK_upd_by_id FOREIGN KEY(upd_by_id) REFERENCES x_portal_user(id) |
| ); |
| commit; |
| select 'delimiter start'; |
| CREATE OR REPLACE FUNCTION add_x_policy_json() |
| RETURNS void AS $$ |
| DECLARE |
| v_column_exists integer := 0; |
| BEGIN |
| select count(*) into v_column_exists from pg_attribute where attrelid in(select oid from pg_class where relname='x_policy') and attname='policy_text'; |
| IF v_column_exists = 0 THEN |
| ALTER TABLE x_policy ADD COLUMN policy_text TEXT DEFAULT NULL NULL; |
| END IF; |
| END; |
| $$ LANGUAGE plpgsql; |
| select 'delimiter end'; |
| |
| select add_x_policy_json(); |
| select 'delimiter end'; |
| |
| select 'delimiter start'; |
| CREATE OR REPLACE FUNCTION remove_foreign_key(objName varchar(4000)) |
| RETURNS void AS $$ |
| declare |
| tableName VARCHAR(256); |
| constraintName VARCHAR(512); |
| query varchar(4000); |
| curs CURSOR FOR SELECT table_name,constraint_name from information_schema.key_column_usage where constraint_catalog=current_catalog and table_name=objName and position_in_unique_constraint notnull; |
| begin |
| OPEN curs; |
| loop |
| FETCH curs INTO tableName,constraintName; |
| EXIT WHEN NOT FOUND; |
| query :='ALTER TABLE ' || objName || ' drop constraint ' || constraintName; |
| execute query; |
| end loop; |
| close curs; |
| END; |
| $$ LANGUAGE plpgsql; |
| select 'delimiter end'; |
| |
| CREATE OR REPLACE FUNCTION removekeys() |
| RETURNS void AS |
| $$ |
| BEGIN |
| perform remove_foreign_key('x_policy_item'); |
| perform remove_foreign_key('x_policy_item_access'); |
| perform remove_foreign_key('x_policy_item_condition'); |
| perform remove_foreign_key('x_policy_item_datamask'); |
| perform remove_foreign_key('x_policy_item_group_perm'); |
| perform remove_foreign_key('x_policy_resource'); |
| perform remove_foreign_key('x_policy_resource_map'); |
| perform remove_foreign_key('x_policy_item_user_perm'); |
| perform remove_foreign_key('x_policy_item_rowfilter'); |
| END; |
| $$ LANGUAGE plpgsql; |
| select removekeys(); |
| |
| select 'delimiter end'; |
| |
| commit; |
| select 'delimiter start'; |
| CREATE OR REPLACE FUNCTION update_TagDefAccessTypes_for_atlas() |
| RETURNS void AS $$ |
| DECLARE |
| new_atlas_def_name VARCHAR(1024); |
| v_record_exists integer := 0; |
| BEGIN |
| select count(*) into v_record_exists from x_db_version_h where version = 'J10013'; |
| IF v_record_exists = 1 THEN |
| select name into new_atlas_def_name from x_service_def where name like 'atlas.%'; |
| select count(*) into v_record_exists from x_access_type_def where def_id in(select id from x_service_def where name='tag') and name in('atlas:read','atlas:create','atlas:update','atlas:delete','atlas:all'); |
| IF v_record_exists > 0 THEN |
| update x_access_type_def set name=(new_atlas_def_name || ':read')where def_id=100 and name='atlas:read'; |
| update x_access_type_def set name=(new_atlas_def_name || ':create') where def_id=100 and name='atlas:create'; |
| update x_access_type_def set name=(new_atlas_def_name || ':update') where def_id=100 and name='atlas:update'; |
| update x_access_type_def set name=(new_atlas_def_name || ':delete') where def_id=100 and name='atlas:delete'; |
| update x_access_type_def set name=(new_atlas_def_name || ':all') where def_id=100 and name='atlas:all'; |
| END IF; |
| select count(*) into v_record_exists from x_access_type_def_grants where atd_id in (select id from x_access_type_def where def_id in (select id from x_service_def where name='tag') and name like 'atlas%') and implied_grant in ('atlas:read','atlas:create','atlas:update','atlas:delete','atlas:all'); |
| IF v_record_exists > 0 THEN |
| update x_access_type_def_grants set implied_grant=(new_atlas_def_name || ':read') where implied_grant='atlas:read'; |
| update x_access_type_def_grants set implied_grant=(new_atlas_def_name || ':create') where implied_grant='atlas:create'; |
| update x_access_type_def_grants set implied_grant=(new_atlas_def_name || ':update') where implied_grant='atlas:update'; |
| update x_access_type_def_grants set implied_grant=(new_atlas_def_name || ':delete') where implied_grant='atlas:delete'; |
| update x_access_type_def_grants set implied_grant=(new_atlas_def_name || ':all') where implied_grant='atlas:all'; |
| END IF; |
| END IF; |
| END; |
| $$ LANGUAGE plpgsql; |
| select 'delimiter end'; |
| |
| select update_TagDefAccessTypes_for_atlas(); |
| commit; |
| select 'delimiter end'; |
| |