diff --git a/SqlManagement/.dbeaver/.credentials-config.json.bak b/SqlManagement/.dbeaver/.credentials-config.json.bak new file mode 100644 index 0000000..0568d24 Binary files /dev/null and b/SqlManagement/.dbeaver/.credentials-config.json.bak differ diff --git a/SqlManagement/.dbeaver/.data-sources.json.bak b/SqlManagement/.dbeaver/.data-sources.json.bak new file mode 100644 index 0000000..253676f --- /dev/null +++ b/SqlManagement/.dbeaver/.data-sources.json.bak @@ -0,0 +1,83 @@ +{ + "folders": {}, + "connections": { + "postgres-jdbc-1948450a8b4-5fc9eec404e65c44": { + "provider": "postgresql", + "driver": "postgres-jdbc", + "name": "UB-KK01-postgres", + "save-password": true, + "configuration": { + "host": "192.168.1.57", + "port": "5432", + "database": "postgres", + "url": "jdbc:postgresql://192.168.1.57:5432/postgres", + "configurationType": "MANUAL", + "home": "postgresql_client", + "type": "dev", + "closeIdleConnection": true, + "properties": { + "connectTimeout": "20", + "loginTimeout": "20", + "escapeSyntaxCallMode": "callIfNoReturn" + }, + "provider-properties": { + "@dbeaver-show-non-default-db@": "true", + "@dbeaver-chosen-role@": "", + "@dbeaver-show-template-db@": "false", + "@dbeaver-show-unavailable-db@": "false", + "show-database-statistics": "false", + "@dbeaver-read-all-data-types-db@": "false", + "read-keys-with-columns": "false", + "@dbeaver-use-prepared-statements-db@": "false", + "postgresql.dd.plain.string": "false", + "postgresql.dd.tag.string": "false" + }, + "auth-model": "native" + } + }, + "postgres-jdbc-19484872d85-cd2a4a40116e706": { + "provider": "postgresql", + "driver": "postgres-jdbc", + "name": "UB-KK01-sathumper", + "configuration": { + "host": "192.168.1.57", + "port": "5432", + "database": "postgres", + "url": "jdbc:postgresql://192.168.1.57:5432/postgres", + "configurationType": "MANUAL", + "home": "postgresql_client", + "type": "dev", + "closeIdleConnection": true, + "provider-properties": { + "@dbeaver-show-non-default-db@": "true", + "@dbeaver-chosen-role@": "", + "@dbeaver-show-template-db@": "false", + "@dbeaver-show-unavailable-db@": "false", + "show-database-statistics": "false", + "@dbeaver-read-all-data-types-db@": "false", + "read-keys-with-columns": "false", + "@dbeaver-use-prepared-statements-db@": "false", + "postgresql.dd.plain.string": "false", + "postgresql.dd.tag.string": "false" + }, + "auth-model": "native" + } + } + }, + "connection-types": { + "dev": { + "name": "Development", + "color": "255,255,255", + "description": "Regular development database", + "auto-commit": true, + "confirm-execute": false, + "confirm-data-change": false, + "smart-commit": false, + "smart-commit-recover": true, + "auto-close-transactions": true, + "close-transactions-period": 1800, + "auto-close-connections": true, + "close-connections-period": 14400 + } + } +} \ No newline at end of file diff --git a/SqlManagement/.dbeaver/credentials-config.json b/SqlManagement/.dbeaver/credentials-config.json new file mode 100644 index 0000000..804772a --- /dev/null +++ b/SqlManagement/.dbeaver/credentials-config.json @@ -0,0 +1 @@ +t։4 "x&̗_Ea &7 gк ZhO>7fq7fϩ+$B鲏RG=-j + + PlanTempus + + + + + + + org.jkiss.dbeaver.DBeaverNature + + diff --git a/SqlManagement/Dashboards/Test.dashboard b/SqlManagement/Dashboards/Test.dashboard new file mode 100644 index 0000000..4cc5cb8 --- /dev/null +++ b/SqlManagement/Dashboards/Test.dashboard @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/SqlManagement/Diagrams/global.erd b/SqlManagement/Diagrams/global.erd new file mode 100644 index 0000000..723bccb --- /dev/null +++ b/SqlManagement/Diagrams/global.erd @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SqlManagement/Scripts/Script-2.sql b/SqlManagement/Scripts/Script-2.sql new file mode 100644 index 0000000..d3856a0 --- /dev/null +++ b/SqlManagement/Scripts/Script-2.sql @@ -0,0 +1,96 @@ + +GRANT USAGE, CREATE ON SCHEMA swp TO sathumper; + +ALTER DEFAULT PRIVILEGES IN SCHEMA swp +GRANT ALL PRIVILEGES ON TABLES TO sathumper; + +GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA swp TO sathumper; + +GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA swp TO sathumper; + + +select * from dev.app_configuration + +CREATE OR REPLACE FUNCTION dev.notify_config_change() +RETURNS TRIGGER AS $$ +BEGIN + IF TG_OP = 'DELETE' THEN + PERFORM pg_notify( + 'config_changes', + json_build_object('operation', TG_OP, 'data', row_to_json(OLD))::text + ); + RETURN OLD; -- Return OLD for DELETE operations + ELSE + PERFORM pg_notify( + 'config_changes', + json_build_object('operation', TG_OP, 'data', row_to_json(NEW))::text + ); + RETURN NEW; -- Return NEW for INSERT/UPDATE operations + END IF; +END; +$$ LANGUAGE plpgsql; + + + +-- Trigger på configuration tabellen +CREATE TRIGGER config_change_trigger +AFTER INSERT OR UPDATE OR DELETE ON dev.app_configuration +FOR EACH ROW EXECUTE FUNCTION dev.notify_config_change(); + + +update dev.app_configuration +set "label" = "label" where id = 3 + +SELECT row_to_json(t) +FROM (SELECT 1 as id, 'test' as key) t; + +SET myapp.tenant_id = '1'; + +SHOW myapp.tenant_id; + +create TABLE dev.app_configuration1 ( + tenant_id varchar(25), + config_key VARCHAR(255), + config_value TEXT, + PRIMARY KEY (tenant_id, config_key) +); + +ALTER TABLE dev.app_configuration1 ENABLE ROW LEVEL SECURITY; + +CREATE drop POLICY tenant_policy +ON dev.app_configuration1 +FOR SELECT +USING ( + current_setting('myapp.tenant_id', true) IS NOT NULL AND + tenant_id = current_setting('myapp.tenant_id')::INT +); + +CREATE POLICY tenant_policy +ON dev.app_configuration1 +FOR SELECT +USING ( + tenant_id::text = current_user +); + +insert into dev.app_configuration1 +(tenant_id, config_key, config_value) values('dev', 't2', 'best dat') + +SET myapp.tenant_id = 0 + +ALTER USER din_bruger NOBYPASS RLS; +select * from dev.app_configuration1 + +SHOW row_security; + + + + +GRANT USAGE, CREATE ON SCHEMA dev TO sathumper; + +ALTER DEFAULT PRIVILEGES IN SCHEMA dev +GRANT ALL PRIVILEGES ON TABLES TO sathumper; + +GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA dev TO sathumper; + +GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA dev TO sathumper; + diff --git a/SqlManagement/Scripts/Script.sql b/SqlManagement/Scripts/Script.sql new file mode 100644 index 0000000..741ad02 --- /dev/null +++ b/SqlManagement/Scripts/Script.sql @@ -0,0 +1,9 @@ +CREATE TABLE IF NOT EXISTS swp.users ( + id SERIAL PRIMARY KEY, + email VARCHAR(256) NOT NULL UNIQUE, + password_hash VARCHAR(256) NOT NULL, + security_stamp VARCHAR(36) NOT NULL, + email_confirmed BOOLEAN NOT NULL DEFAULT FALSE, + created_date TIMESTAMP NOT NULL, + last_login_date TIMESTAMP NULL +); \ No newline at end of file