Does psqlodbc_11_01_0000-x64 support special characters?

Started by gzhover 3 years ago6 messagesgeneral
Jump to latest
#1gzh
gzhcoder@126.com

PostgreSQL version: 13.5

Operating system: windows 10

Description:

I wrote a VBA application to connect to PostgreSQL database by psqlodbc.

The application works fine when there are no special characters in the password.

When the password contains special characters (e.g. * , $ %),

the application responds with an error below:

Number: -2147467259

Description: password authentication failed for user 'testdb'

I made an sample as below:

VBA

----------------------------- START ---------------------------------

Sub dbconnTest()

Dim rs As ADODB.Recordset

Dim sql As String

Dim i As Integer

Dim rcnt As Integer

Set cnn = New ADODB.Connection

cnn.Open "Provider=MSDASQL;Driver=PostgreSQL Unicode;UID=postgres;port=5432;Server=localhost;Database=testdb;PWD=Gd*oB,$3Ln%pQ"

Set rs = New ADODB.Recordset

sql = "SELECT * FROM testtbl"

rs.ActiveConnection = cnn

rs.Source = sql

rs.Open

cnt = rs.Fields.Count

rcnt = 2

Do Until rs.EOF

For i = 0 To cnt - 1

Cells(rcnt, i + 1).Value = rs.Fields(i)

Next

rcnt = rcnt + 1

rs.MoveNext

Loop

Set rs = Nothing

Set cnn = Nothing

End Sub

----------------------------- END ---------------------------------

Thanks for any help!

#2gzh
gzhcoder@126.com
In reply to: gzh (#1)
Re:Does psqlodbc_11_01_0000-x64 support special characters?

I found that the password can't contain the % character, and the other special characters (* , $) are no problem.

At 2022-10-12 16:28:51, "gzh" <gzhcoder@126.com> wrote:

PostgreSQL version: 13.5

Operating system: windows 10

Description:

I wrote a VBA application to connect to PostgreSQL database by psqlodbc.

The application works fine when there are no special characters in the password.

When the password contains special characters (e.g. * , $ %),

the application responds with an error below:

Number: -2147467259

Description: password authentication failed for user 'testdb'

I made an sample as below:

VBA

----------------------------- START ---------------------------------

Sub dbconnTest()

Dim rs As ADODB.Recordset

Dim sql As String

Dim i As Integer

Dim rcnt As Integer

Set cnn = New ADODB.Connection

cnn.Open "Provider=MSDASQL;Driver=PostgreSQL Unicode;UID=postgres;port=5432;Server=localhost;Database=testdb;PWD=Gd*oB,$3Ln%pQ"

Set rs = New ADODB.Recordset

sql = "SELECT * FROM testtbl"

rs.ActiveConnection = cnn

rs.Source = sql

rs.Open

cnt = rs.Fields.Count

rcnt = 2

Do Until rs.EOF

For i = 0 To cnt - 1

Cells(rcnt, i + 1).Value = rs.Fields(i)

Next

rcnt = rcnt + 1

rs.MoveNext

Loop

Set rs = Nothing

Set cnn = Nothing

End Sub

----------------------------- END ---------------------------------

Thanks for any help!

#3Jeffrey Walton
noloader@gmail.com
In reply to: gzh (#2)
Re: Does psqlodbc_11_01_0000-x64 support special characters?

On Wed, Oct 12, 2022 at 7:16 AM gzh <gzhcoder@126.com> wrote:

I found that the password can't contain the % character, and the other special characters (* , $) are no problem.

You need to percent-encode the password if you wish to use the %
symbol in the password. There are other reserved characters that you
should percent-encode. See
https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNSTRING
and https://www.rfc-editor.org/rfc/rfc3986#section-2.1 .

Jeff

Show quoted text

At 2022-10-12 16:28:51, "gzh" <gzhcoder@126.com> wrote:

PostgreSQL version: 13.5

Operating system: windows 10

Description:

I wrote a VBA application to connect to PostgreSQL database by psqlodbc.

The application works fine when there are no special characters in the password.

When the password contains special characters (e.g. * , $ %),

the application responds with an error below:

Number: -2147467259

Description: password authentication failed for user 'testdb'

I made an sample as below:

VBA

----------------------------- START ---------------------------------

Sub dbconnTest()

Dim rs As ADODB.Recordset

Dim sql As String

Dim i As Integer

Dim rcnt As Integer

Set cnn = New ADODB.Connection

cnn.Open "Provider=MSDASQL;Driver=PostgreSQL Unicode;UID=postgres;port=5432;Server=localhost;Database=testdb;PWD=Gd*oB,$3Ln%pQ"

Set rs = New ADODB.Recordset

sql = "SELECT * FROM testtbl"

rs.ActiveConnection = cnn

rs.Source = sql

rs.Open

cnt = rs.Fields.Count

rcnt = 2

Do Until rs.EOF

For i = 0 To cnt - 1

Cells(rcnt, i + 1).Value = rs.Fields(i)

Next

rcnt = rcnt + 1

rs.MoveNext

Loop

Set rs = Nothing

Set cnn = Nothing

End Sub

----------------------------- END ---------------------------------

Thanks for any help!

#4gzh
gzhcoder@126.com
In reply to: Jeffrey Walton (#3)
Re:Re: Does psqlodbc_11_01_0000-x64 support special characters?

Dear Jeff

I appreciate your reply.

My PostgreSQL is deployed on Amazon RDS, so the password of PostgreSQL is random and has various reserved characters.

I don't know if the reserved characters below are complete, and there are some characters (e.g. * , $) I tried without problems.

Could you tell me which characters require percent-encoding for PostgreSQL password?

space → %20

! → %21

" → %22

# → %23

$ → %24

% → %25

& → %26

' → %27

( → %28

) → %29

* → %2A

+ → %2B

, → %2C

- → %2D

. → %2E

/ → %2F

: → %3A

; → %3B

< → %3C

= → %3D

→ %3E

? → %3F

@ → %40

[ → %5B

\ → %5C

] → %5D

^ → %5E

_ → %5F

` → %60

{ → %7B

| → %7C

} → %7D

~ → %7E

Kind regards,

gzh

At 2022-10-12 22:01:15, "Jeffrey Walton" <noloader@gmail.com> wrote:

Show quoted text

On Wed, Oct 12, 2022 at 7:16 AM gzh <gzhcoder@126.com> wrote:

I found that the password can't contain the % character, and the other special characters (* , $) are no problem.

You need to percent-encode the password if you wish to use the %
symbol in the password. There are other reserved characters that you
should percent-encode. See
https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNSTRING
and https://www.rfc-editor.org/rfc/rfc3986#section-2.1 .

Jeff

At 2022-10-12 16:28:51, "gzh" <gzhcoder@126.com> wrote:

PostgreSQL version: 13.5

Operating system: windows 10

Description:

I wrote a VBA application to connect to PostgreSQL database by psqlodbc.

The application works fine when there are no special characters in the password.

When the password contains special characters (e.g. * , $ %),

the application responds with an error below:

Number: -2147467259

Description: password authentication failed for user 'testdb'

I made an sample as below:

VBA

----------------------------- START ---------------------------------

Sub dbconnTest()

Dim rs As ADODB.Recordset

Dim sql As String

Dim i As Integer

Dim rcnt As Integer

Set cnn = New ADODB.Connection

cnn.Open "Provider=MSDASQL;Driver=PostgreSQL Unicode;UID=postgres;port=5432;Server=localhost;Database=testdb;PWD=Gd*oB,$3Ln%pQ"

Set rs = New ADODB.Recordset

sql = "SELECT * FROM testtbl"

rs.ActiveConnection = cnn

rs.Source = sql

rs.Open

cnt = rs.Fields.Count

rcnt = 2

Do Until rs.EOF

For i = 0 To cnt - 1

Cells(rcnt, i + 1).Value = rs.Fields(i)

Next

rcnt = rcnt + 1

rs.MoveNext

Loop

Set rs = Nothing

Set cnn = Nothing

End Sub

----------------------------- END ---------------------------------

Thanks for any help!

#5Jeffrey Walton
noloader@gmail.com
In reply to: gzh (#4)
Re: Re: Does psqlodbc_11_01_0000-x64 support special characters?

On Thu, Oct 13, 2022 at 12:13 AM gzh <gzhcoder@126.com> wrote:

My PostgreSQL is deployed on Amazon RDS, so the password of PostgreSQL is random and has various reserved characters.

I don't know if the reserved characters below are complete, and there are some characters (e.g. * , $) I tried without problems.

Could you tell me which characters require percent-encoding for PostgreSQL password?

space → %20

! → %21

" → %22

# → %23

$ → %24

% → %25

& → %26

' → %27

( → %28

) → %29

* → %2A

+ → %2B

, → %2C

- → %2D

. → %2E

/ → %2F

: → %3A

; → %3B

< → %3C

= → %3D

→ %3E

? → %3F

@ → %40

[ → %5B

\ → %5C

] → %5D

^ → %5E

_ → %5F

` → %60

{ → %7B

| → %7C

} → %7D

~ → %7E

https://www.rfc-editor.org/rfc/rfc3986#section-2.2

Jeff

#6gzh
gzhcoder@126.com
In reply to: Jeffrey Walton (#5)
Re:Re: Re: Does psqlodbc_11_01_0000-x64 support special characters?

Thank you for the information.

After testing, I found that I only need to escape the following 7 characters.

% → %25

" → %22

' → %27

+ → %2B

; → %3B

= → %3D

{ → %7B

At 2022-10-13 13:27:16, "Jeffrey Walton" <noloader@gmail.com> wrote:

Show quoted text

On Thu, Oct 13, 2022 at 12:13 AM gzh <gzhcoder@126.com> wrote:

My PostgreSQL is deployed on Amazon RDS, so the password of PostgreSQL is random and has various reserved characters.

I don't know if the reserved characters below are complete, and there are some characters (e.g. * , $) I tried without problems.

Could you tell me which characters require percent-encoding for PostgreSQL password?

space → %20

! → %21

" → %22

# → %23

$ → %24

% → %25

& → %26

' → %27

( → %28

) → %29

* → %2A

+ → %2B

, → %2C

- → %2D

. → %2E

/ → %2F

: → %3A

; → %3B

< → %3C

= → %3D

→ %3E

? → %3F

@ → %40

[ → %5B

\ → %5C

] → %5D

^ → %5E

_ → %5F

` → %60

{ → %7B

| → %7C

} → %7D

~ → %7E

https://www.rfc-editor.org/rfc/rfc3986#section-2.2

Jeff