> For the complete documentation index, see [llms.txt](https://docs.teleskope.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.teleskope.ai/connectors/aws/rds/username-and-password.md).

# Username and Password

{% stepper %}
{% step %}

#### Create the Database User

**MySQL or MariaDB or Oracle**

```sql
CREATE USER teleskope_ro IDENTIFIED BY '****PASSWORD****'
```

**MS SQL**

```sql
CREATE LOGIN teleskope_ro WITH PASSWORD = '****PASSWORD****';
```

**Postgres**

```sql
CREATE USER teleskope_ro WITH PASSWORD  '****PASSWORD****'
```

{% endstep %}

{% step %}

#### Grant DB User Permissions

{% tabs %}
{% tab title="Read Access" %}
**MySQL or MariaDB**

```sql
GRANT SHOW DATABASES, SELECT ON *.* TO teleskope_ro
```

**Postgres versions 14+**

```sql
GRANT pg_read_all_data TO teleskope_ro
```

**Postgres versions < 14**

```sql
SELECT format('GRANT CONNECT ON DATABASE %I TO teleskope_ro;', datname)
FROM pg_database WHERE datname NOT IN ('template0','template1') \gexec
SELECT format('GRANT USAGE ON SCHEMA %I TO teleskope_ro;', nspname)
FROM pg_namespace WHERE nspname NOT IN ('pg_toast','pg_catalog','information_schema') \gexec
SELECT format('GRANT SELECT ON ALL TABLES IN SCHEMA %I TO teleskope_ro;', nspname)
FROM pg_namespace WHERE nspname NOT IN ('pg_toast','pg_catalog','information_schema') \gexec
```

**Oracle SQL**

```sql
GRANT CONNECT TO teleskope_ro;
GRANT SELECT ANY TABLE TO teleskope_ro;
GRANT SELECT_CATALOG_ROLE TO teleskope_ro;
```

**MS SQL**

```sql
GRANT VIEW ANY DATABASE TO teleskope_ro;
DECLARE @sql NVARCHAR(MAX);
SET @sql = '';
SELECT @sql += 
    'USE [' + name + ']; 
    CREATE USER teleskope_ro FOR LOGIN teleskope_ro;
    GRANT SELECT TO teleskope_ro;
    GRANT VIEW DATABASE STATE TO teleskope_ro;' + CHAR(13)
FROM sys.databases
WHERE state = 0 AND name NOT IN ('tempdb', 'model', 'msdb', 'rdsadmin');
EXEC sp_executesql @sql;
```

{% endtab %}

{% tab title="Write Access" %}
**MySQL or MariaDB**

```sql
GRANT UPDATE, DELETE on *.* TO teleskope_ro
```

**Postgres versions 14+**

```sql
GRANT pg_write_all_data TO teleskope_ro
```

**Postgres versions < 14**

```sql
SELECT format('GRANT UPDATE, DELETE ON ALL TABLES IN SCHEMA %I TO teleskope_ro;', nspname)
FROM pg_namespace WHERE nspname NOT IN ('pg_toast','pg_catalog','information_schema') \gexec
```

{% endtab %}
{% endtabs %}

Databases created after these grants are not covered automatically. Re-run the grants, or set default privileges so future tables are readable:

```sql
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO teleskope_ro;
```

{% endstep %}

{% step %}
**Submit the&#x20;**<mark style="color:purple;">**Username and Password**</mark>**&#x20;in the Teleskope interface**
{% endstep %}
{% endstepper %}
