Skip to main content

DB Link Test on Local Cluster across Two DBs with Non Postgres Owner and Non Public Schema

Test Purpose :

DB Link Test on Local Cluster across Two DBs with Non  Postgres Owner and  Non Public Schema
So that I have revoked public access and included search path replacement of my own schemas.


Scenario :
Same Local Cluster -> Different Database -> Both Users are having Own different Schema and Both DB Owners are different


DB :   dvdrental, adventureworks.

schema : dvd_schema,adv_schema
users : dvd_user, adv_user
tablespaces : dvd_ts, adv_ts


Test : Access dvd_t1 from advuser@adventureworks

Steps :

psql >
postgres=# revoke all on schema public from public;
postgres=#  revoke all on schema public from dvduser;
REVOKE
postgres=#  revoke all on schema public from advuser;
REVOKE
postgres=#


bash-4.2$ psql -d  dvdrental -U dvduser
psql (11.4)
Type "help" for help.

dvdrental=# create table dvd_t1(name varchar(10),id int2);
CREATE TABLE
dvdrental=# \d
           List of relations
   Schema   |  Name  | Type  |  Owner
------------+--------+-------+---------
 dvd_schema | dvd_t1 | table | dvduser
(1 row)

dvdrental=# insert into dvd_t1 values ('film1',10);
INSERT 0 1
dvdrental=# insert into dvd_t1 values ('film2',20);
INSERT 0 1
dvdrental=# insert into dvd_t1 values ('film3',30);
INSERT 0 1
dvdrental=#


Execute the below command whether db_link ext is already installed or not.

SELECT pg_namespace.nspname, pg_proc.proname  FROM pg_proc, pg_namespace
WHERE pg_proc.pronamespace=pg_namespace.oid  AND pg_proc.proname LIKE '%dblink%';

If not then, it will return 0 Rows.

Test the DBlink connection. Since I revoked public access, I have mentioned externally in the statement.

Adventureworks=# select public.dblink_connect('host=pg1 user=dvduser password=dvduser123 dbname=dvdrental');
 dblink_connect
----------------
 OK
(1 row)

Adventureworks=#


check postgress_fdw Ext is already installed or not.


Adventureworks=# \dx
                                    List of installed extensions
     Name     | Version |   Schema   |                         Description
--------------+---------+------------+--------------------------------------------------------------
 dblink       | 1.2     | public     | connect to other PostgreSQL databases from within a database
 plpgsql      | 1.0     | pg_catalog | PL/pgSQL procedural language
 postgres_fdw | 1.0     | public     | foreign-data wrapper for remote PostgreSQL servers
(3 rows)


Adventureworks=# CREATE FOREIGN DATA WRAPPER adv_to_dvd_fdw VALIDATOR postgresql_fdw_validator;
CREATE FOREIGN DATA WRAPPER

Adventureworks=# create server adv_to_dvd_server FOREIGN DATA WRAPPER adv_to_dvd_fdw OPTIONS (hostaddr '192.168.56.101',dbname 'dvdrental');
CREATE SERVER

Adventureworks=# CREATE USER MAPPING FOR advuser SERVER adv_to_dvd_server OPTIONS (user 'dvduser',password 'dvduser123');
CREATE USER MAPPING

Adventureworks=# SELECT public.dblink_connect('adv_to_dvd_server');

 dblink_connect
----------------
 OK
(1 row)

Adventureworks=# GRANT USAGE ON FOREIGN SERVER adv_to_dvd_server to advuser;
GRANT

Adventureworks=# 

Test 1 with Exact Cols as per original table :
**********************************************
select * from public.dblink('adv_to_dvd_server','select name,id from dvdrental.dvd_schema.dvd_t1') AS DATA(CNAME varchar(10), CID int2);

 cname | cid
-------+-----
 film1 |  10
 film2 |  20
 film3 |  30
(3 rows)


Test 2 with only one col :
**********************************************

select CID from public.dblink('adv_to_dvd_server','select id from dvdrental.dvd_schema.dvd_t1') AS DATA(CID int8);
 cid
-----
  10
  20
  30
(3 rows)


Test 1 with Relevant Data columns change
**********************************************

Adventureworks=# select CID from public.dblink('adv_to_dvd_server','select id from dvdrental.dvd_schema.dvd_t1') AS DATA(CID int8);
 cid
-----
  10
  20
  30
(3 rows)

Adventureworks=# select * from public.dblink('adv_to_dvd_server','select name,id from dvdrental.dvd_schema.dvd_t1') AS DATA(CNAME varchar(20), CID int8);
 cname | cid
-------+-----
 film1 |  10
 film2 |  20
 film3 |  30
(3 rows)

Adventureworks=# select * from public.dblink('adv_to_dvd_server','select name,id from dvdrental.dvd_schema.dvd_t1') AS DATA(CNAME text, CID int8);
 cname | cid
-------+-----
 film1 |  10
 film2 |  20
 film3 |  30
(3 rows)

Adventureworks=#

Comments

Popular posts from this blog

How to configure Barman along with One Node Wal Streaming.

How to configure Barman : Step 1 : Remove existing postgres Instllations if you have for safer side. sudo su root ==> yum remove postgres* & yum remove barman* step 2 : Install this on Both Prod & Backup servers. PostgreSQL 11 You can install the 2ndQuadrant's General Public RPM repository for PostgreSQL 11 by running the following instructions as a user with sudo privileges on the destination Linux server: curl https://dl.2ndquadrant.com/default/release/get/11/rpm | sudo bash The above command will run a shell script that will install the repository definition in your server. You can check the content of the script by running: curl https://dl.2ndquadrant.com/default/release/get/11/rpm | less Step 3 : Install EPEL depends on OS version on prod :  CentOS/RHEL - 7 rpm -Uvh https://yum.postgresql.org/11/redhat/rhel-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm yum install postgresql11-server yum install postgresql11-contrib  ===...

How to install and run multiple Vagrant machines using single vagrant file

  This guide provides how to urn multiple machines with the fix of itmezone issues in vagrant Pre-req : Install latest vagrant Install latest Oracle vmware. before starting   vagrant up or vagrant up pg1/2/3   Install the below on vagrant windows machine :   vagrant install plugin vagrant-timezone   If windows 10 thrown some error then it might have caused last patch installation. Reboot the machine and try again. ********************************************************************************************************* The below provides clean 3 node vagrant instllation with timezone fix # -*- mode: ruby -*- # vi: set ft=ruby : $script = <<SCRIPT echo I am provisioning... date > /etc/vagrant_provisioned_at SCRIPT Vagrant.configure("2") do |config|   if Vagrant.has_plugin?("vagrant-timezone")     config.timezone.value = "America/New_York"   end   # ... other stuff   config.vm.define "...

issues and fix with Vagrant and PG / Ora software related

The below are issues and fix with Vagrant and PG / Ora software related : **************************************************************************** 1. How do I prevent “No supported authentication methods available” when using putty to connect vagrant machine go to /etc/sshd/sshd-config -> change PasswordAuthenticator as Yes from No and save it and restart machine 2. How to fix from windows to PG Linux server connectivity.. To check ip tables off or not in vagrant linux or vm [root@pgnode1 bin]# iptables -nvL Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target     prot opt in     out     source               destination            Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target     prot opt in     out     source              ...