2013-04-02 27 views
21

Tôi có trang web của tôi với hostgator và tôi muốn truy cập cơ sở dữ liệu mysql với C# cửa sổ ứng dụng nhưng khi tôi đã cố gắng để kết nối nhận tin nhắn này:Authentication với mật khẩu cũ không còn được hỗ trợ, sử dụng 4,1 mật khẩu phong cách

"Xác thực với mật khẩu cũ không còn được hỗ trợ, sử dụng 4,1 phong cách password"

tôi đã cố gắng giải pháp đưa ra:

SET SESSION old_passwords=0; 
SET PASSWORD FOR use[email protected]=PASSWORD('your pw here'); 

truy vấn đầu tiên được thực thi thành công nhưng tôi gặp lỗi "Truy cập bị từ chối cho người dùng @ host" khi truy vấn thứ hai được thực hiện. Tôi không thể hiểu tại sao có vấn đề này. Tôi đang sử dụng MySQL-connecter-net 6.6.5.

Tôi kết nối thành công cơ sở dữ liệu của mình với bàn làm việc MySql 5.2.47.

Có ai có thể giúp tôi những gì tôi có thể làm nhiều hơn không?


Tôi đã liên hệ với trang web lưu trữ của mình và họ thực hiện thay đổi đối với tệp my.cnf để sử dụng mật khẩu kiểu 4.1. và tôi có thể kết nối với mysql

mysql -u <username> -p <password> -h <hostname>; 

nhưng khi tôi cố gắng kết nối với C# với mạng kết nối mySQL 6.6.5 tôi lại gặp lỗi này.

Tôi đang sử dụng Visual Studio 2012 với trình kết nối MySQL 6.6.5 trên Windows 8 64 bit. đây là mã tôi đã sử dụng để kết nối

using MySQL.Data.MySQLClient; 

private void button1_Click(object sender, EventArgs e) 
      { 
       string connStr = String.Format("server={0};port={1};uid={2};password={3};database={4}", 
        txtserver.Text, txtPort.Text, txtUser.Text, txtPassword.Text, txtDatabase.Text); 
       conn = new MySqlConnection(connStr); 
       try 
       { 
        conn.Open(); 
        MessageBox.Show("Test Connection Succeded"); 
       } 
       catch (MySqlException ex) 
       { 
        MessageBox.Show(ex.Message); 
       } 
      } 

Tôi không thể hiểu được vấn đề ở đâu. Hãy giúp tôi

+0

Hãy thử thay đổi "người dùng @ lưu trữ" cho người dùng DB thực của bạn. (user @ host chỉ là một ví dụ) – maxcnunes

Trả lời

21

Tôi đã gặp vấn đề tương tự. Trong trường hợp của tôi chỉ cần chạy lệnh dưới đây được kết nối trên cơ sở dữ liệu của tôi bằng cách Workbench:

SET SESSION old_passwords=0; 
SET PASSWORD FOR my_user=PASSWORD('my_password'); 

Sau đó tôi có thể connnect sử dụng MySQL Connector 6.6.5 trong các mã C# với chuỗi kết nối mysql chung:

"server=my_server_ip;user=my_user;database=my_db;port=3306;password=my_password;" 
+6

Vì OP không có quyền chạy 'SET PASSWORD FOR ...', chúng có thể thử chỉ đơn giản là 'SET PASSWORD = PASSWORD ('my_password');' (thiết lập mật khẩu cho người dùng hiện tại, không yêu cầu đặc quyền đặc biệt). – eggyal

+1

Không chạy SET SESSION old_passwords = 0; có bất kỳ hậu quả nào cho các ứng dụng/kết nối hiện có sử dụng cùng một máy chủ đó không? – Totoro53

5

Hôm nay tôi đã có một vấn đề tương tự trong ứng dụng C# của tôi. Tôi đã thử kết nối với một máy chủ tại hostgator.com (mysql) và kết nối với localhost. Sau khi đọc nhiều bài viết và thực hiện nhiều thay đổi, theo từng bước nhưng tôi không thể kết nối với mysql hostgator của mình.

Giải pháp trong trường hợp của tôi là thay đổi thư viện MySql Connector/NET từ phiên bản 6. * thành phiên bản 5. *. Sau khi thay đổi ứng dụng của tôi được kết nối thành công.

Mặc dù đây có thể không phải là giải pháp khả thi đối với mọi người, nhưng nó có thể hiệu quả đối với một số người.

+0

Đã lưu một ngày !! Cảm ơn bạn rất nhiều. – user1282609

+0

@diangelisj tôi đã thử tất cả các giải pháp nhưng giải pháp này làm việc cho tôi, bạn có muốn giải thích cho tôi lý do tại sao nó xảy ra chúng tôi có thể sử dụng kết nối 6,9 Mysql, dll và sửa lỗi này – wiretext

3

tôi gặp vấn đề này ngày hôm nay, nhưng I'v ​​cố định nó như sau:

SET old_passwords=FALSE; 
SET PASSWORD = PASSWORD('new pwd here'); 

Vâng, có lẽ phiên bản kết nối của máy chủ là thấp hơn so với khách hàng, vì vậy bạn phải chạy này: "SET old_passwords = SAI;" Chúc may mắn!

0

Tôi chỉ giải quyết vấn đề của tôi chỉ như thế này:

1) Kết nối với db với mysql workbench (chọn "sử dụng cũ auth" và "gửi qua ở dạng cleartext"

2) Sử dụng bàn làm việc , tôi chạy nhiều lần sau (vì nó liên tục nói '0 rows affected'): (cũng thay đổi userID và password đến công cụ thích hợp của bạn)

SET SESSION old_passwords=0; 
SET PASSWORD FOR userID=PASSWORD('password'); 

SET SESSION old_passwords=false; 
SET PASSWORD FOR userID=PASSWORD('password'); 

3) Bây giờ quay trở lại ứng dụng của bạn và nó sẽ chạy. ..

Đó là cách tôi đã làm nó ít nhất. Tôi đang sử dụng IX mysql và họ sử dụng auth cũ trên máy chủ của họ, vì vậy bạn phải làm điều gì đó trên đầu của bạn ...

0

Tôi đã không giải quyết được vấn đề như những người khác đã phản hồi, mặc dù tôi đã thử mọi thứ đã được đề xuất. Cuối cùng nó bật ra rằng các máy chủ trên đó đứng DB của tôi không được cập nhật phpMyAdmin kể từ phiên bản 3.5.5, và hiện đang được sử dụng ở khắp mọi nơi phiên bản 4.1.14 và nó là một vấn đề. Giải pháp là cập nhật phpMyAdmin hoặc mySQL của riêng bạn về phiên bản cũ hơn để tiếp tục làm việc trên DB từ xa. Bạn có thể cần kiến ​​thức này để giải quyết một số nghi ngờ đã nảy sinh. :)

2

Đã xảy ra sự cố tương tự khi sử dụng gói MySqlClient cho C#. Hãy phá vỡ nó xuống:

Chúng ta cần cơ sở dữ liệu để không sử dụng mật khẩu phong cách cũ, do đó chúng tôi thực hiện

old_passwords SET = 0;

THÔNG BÁO không có từ khóa "CHUYÊN NGHIỆP". Đây là những gì chỉ cho phép truy vấn đầu tiên của bạn hoạt động, "SESSION" ngụ ý tạm thời và mọi cài đặt phiên bị mất sau khi phiên kết thúc.

Tiếp theo chúng ta cần phải thiết lập lại mật khẩu của máy chủ user @ với phong cách mật khẩu mới

SET PASSWORD CHO user @ host = PASSWORD ('password');

hai này sẽ cho phép bạn MySqlClient

0

Hôm nay tôi tìm thấy cùng một vấn đề. Tôi đã tải xuống Workbench. Có một số cài đặt cho bàn làm việc để kết nối cơ sở dữ liệu, như sau: 1.chọn tab SSL, chọn tùy chọn 'không' trong "Sử dụng SSL". 2. chọn tab nâng cao, chọn trong Sử dụng giao thức xác thực ole. sau đó Workbench làm việc. và theo dõi bài đăng của tai1001 '. Đó là tất cả tôi đã tìm thấy tất cả các bước hoạt động.

1

Chỉ muốn thêm vào câu trả lời @diangelisj và nói thư mục gốc của sự cố là phiên bản PhpMyAdmin được cài đặt trên máy chủ của bạn. Để sử dụng lớp Trình kết nối dữ liệu MySQL mới nhất, bạn phải có PhpMyAdmin mới nhất (hoặc các vấn đề phát sinh). Trong trường hợp của tôi, tôi có PhpMyAdmin 4.0.10.7 và đã thử sử dụng MySQL Data Connector 6.7.9, đã đưa ra lỗi.

Những gì tôi đã làm:

  1. Tải về phiên bản 5.2.7 từ https://dev.mysql.com/downloads/connector/net/6.9.html

  2. Thêm .dll như tài liệu tham khảo để ứng dụng

  3. Presto!

0

Hãy quên áp dụng SET old_password = 0 vì máy chủ được định cấu hình sử dụng mật khẩu mới không có lý do thay đổi cờ trên máy chủ nếu ứng dụng của bạn không truy cập nữa. Điều tra kết nối NET mà bạn đang sử dụng.

Trình kết nối 6.5.4 là phiên bản phù hợp để sử dụng old_password, phiên bản phần mềm đang sử dụng phiên bản mới.

Cách thực hành tốt nhất là tránh cài đặt trình kết nối trên máy, chỉ cần rời khỏi NET để xử lý dll nếu bạn đã có hoặc thử tìm MySQL.Data.DLL phiên bản 6.5.4.0 (384 kbytes)

Các vấn đề liên quan