🚀   Portable does more than just ELT. Explore Our AI Orchestration CapabilitiesÂ

After establishing a network connection to your database, Portable attempts to authenticate with the username and password you provided. If this step fails, you'll see a "Database Authentication" or "User Credentials" error in the diagnostic checks.
Portable can reach your database server, but the login credentials are being rejected. The username doesn't exist, the password is wrong, or the user isn't allowed to connect from Portable's IP address.
The most common cause. Database passwords are case-sensitive and must match exactly.
Common mistakes:
The username must match exactly what's configured in the database.
Common mistakes:
myuser vs mydomain\myuser for SQL Server)The user account may not have been created in the database, or was created in a different database/schema.
Many databases restrict which hosts a user can connect from. Even with correct credentials, the connection will be rejected if Portable's IP (34.122.15.109) isn't allowed.
PostgreSQL uses pg_hba.conf to control access:
# Allow connections from specific IP
host all myuser 34.122.15.109/24 md5
MySQL ties permissions to host:
-- User can only connect from localhost
CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'password';
-- User can connect from anywhere
CREATE USER 'myuser'@'%' IDENTIFIED BY 'password';
PostgreSQL supports multiple authentication methods (md5, scram-sha-256, password, etc.). If the server requires a method that Portable doesn't support for your configuration, authentication will fail.
The user account may be locked due to too many failed attempts, or the password may have expired.
PostgreSQL:
psql -h db.example.com -U myuser -d mydb
# Enter password when prompted
MySQL:
mysql -h db.example.com -u myuser -p mydb
# Enter password when prompted
If this works from your machine, the credentials are correct. The issue is likely host-based access restrictions.
PostgreSQL:
SELECT usename FROM pg_user WHERE usename = 'myuser';
MySQL:
SELECT user, host FROM mysql.user WHERE user = 'myuser';
PostgreSQL - Review pg_hba.conf:
# Location varies by installation
cat /etc/postgresql/*/main/pg_hba.conf
# or
SHOW hba_file; -- Run in psql to find location
MySQL - Check user's allowed hosts:
SELECT user, host FROM mysql.user WHERE user = 'myuser';
-- '%' means any host
-- 'localhost' means local connections only
-- Specific IP/hostname restricts to that address
PostgreSQL:
SELECT usename, valuntil FROM pg_user WHERE usename = 'myuser';
-- valuntil shows password expiration (NULL = never expires)
MySQL:
SELECT user, account_locked, password_expired
FROM mysql.user
WHERE user = 'myuser';
CREATE USER myuser WITH PASSWORD 'securepassword';
GRANT CONNECT ON DATABASE mydb TO myuser;
pg_hba.conf - access is controlled via Security GroupsCREATE USER myuser WITH PASSWORD 'securepassword';
CREATE USER myuser WITH PASSWORD = 'securepassword';
Here's how to create a dedicated user with appropriate permissions:
PostgreSQL (Source - read-only):
CREATE USER portable_reader WITH PASSWORD 'secure_password_here';
GRANT CONNECT ON DATABASE mydb TO portable_reader;
GRANT USAGE ON SCHEMA public TO portable_reader;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO portable_reader;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO portable_reader;
PostgreSQL (Destination - read-write):
CREATE USER portable_writer WITH PASSWORD 'secure_password_here';
GRANT CONNECT ON DATABASE mydb TO portable_writer;
GRANT USAGE, CREATE ON SCHEMA public TO portable_writer;
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO portable_writer;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO portable_writer;
MySQL (Source - read-only):
CREATE USER 'portable_reader'@'%' IDENTIFIED BY 'secure_password_here';
GRANT SELECT ON mydb.* TO 'portable_reader'@'%';
FLUSH PRIVILEGES;
MySQL (Destination - read-write):
CREATE USER 'portable_writer'@'%' IDENTIFIED BY 'secure_password_here';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, DROP ON mydb.* TO 'portable_writer'@'%';
FLUSH PRIVILEGES;
Before contacting support, verify:
'%' in MySQL, appropriate pg_hba.conf entry in PostgreSQL)If you can connect locally but Portable can't authenticate, contact support with: