জাভা-মাইএসকিউএল সংযোগ: পাবলিক কী পুনরুদ্ধার অনুমোদিত নয়


120

আমি জাওয়ানের সাথে সংযোগকারী 8.0.11 ব্যবহার করে মাইএসকিএল ডাটাবেস সংযোগ করার চেষ্টা করি। সবকিছু ঠিক আছে বলে মনে হচ্ছে তবে আমার এই ব্যতিক্রম আছে:

থ্রেড "মূল" java.sql.SQLNonTransientConnicationException মধ্যে ব্যতিক্রম: পাবলিক কী পুনরুদ্ধার অনুমোদিত নয়

স্ট্যাক ট্রেস:

    Exception in thread "main" java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:108) at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:95) at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) at 
 com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:862) at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:444) at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:230) at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:226) at com.mysql.cj.jdbc.MysqlDataSource.getConnection(MysqlDataSource.java:438) at com.mysql.cj.jdbc.MysqlDataSource.getConnection(MysqlDataSource.java:146) at com.mysql.cj.jdbc.MysqlDataSource.getConnection(MysqlDataSource.java:119) at ConnectionManager.getConnection(ConnectionManager.java:28) at Main.main(Main.java:8)

সংযোগকারী পরিচালক:

public class ConnectionManager {

    public static final String serverTimeZone = "UTC";
    public static final String serverName = "localhost";
    public static final String databaseName ="biblioteka";
    public static final int portNumber = 3306;
    public static final String user = "anyroot";
    public static final String password = "anyroot";

    public static Connection getConnection() throws SQLException {

        MysqlDataSource dataSource = new MysqlDataSource();

        dataSource.setUseSSL( false );
        dataSource.setServerTimezone( serverTimeZone );
        dataSource.setServerName( serverName );
        dataSource.setDatabaseName( databaseName );
        dataSource.setPortNumber( portNumber );
        dataSource.setUser( user );
        dataSource.setPassword( password );

        return dataSource.getConnection();
    }
}

4
দয়া করে কিছু কোড সরবরাহ করুন: আপনি কীভাবে সংযোগের চেষ্টা করছেন। ব্যতিক্রম স্ট্যাক ট্রেস পাশাপাশি সহায়ক হবে।
সের্গেই সিরিক

উত্তর:


263

allowPublicKeyRetrieval=trueসার্ভার থেকে ক্লায়েন্টকে স্বয়ংক্রিয়ভাবে জনসাধারণের কী অনুরোধ করার জন্য আপনার মাইএসকিএল-সংযোজকটিতে ক্লায়েন্ট বিকল্প যুক্ত করা উচিত । নোট যে AllowPublicKeyRetrieval=Trueপ্লেইনেক্সট পাসওয়ার্ড পেতে একটি দূষিত প্রক্সি একটি MITM আক্রমণ চালানোর অনুমতি দিতে পারে, সুতরাং এটি ডিফল্ট হিসাবে মিথ্যা এবং স্পষ্টভাবে সক্ষম করা আবশ্যক।

https://mysql-net.github.io/MySqlConnector/connection-options/

আপনি useSSL=falseএটি পরীক্ষার / বিকাশের উদ্দেশ্যে ব্যবহার করার সময় যুক্ত করার চেষ্টা করতে পারেন

উদাহরণ:

jdbc:mysql://localhost:3306/db?allowPublicKeyRetrieval=true&useSSL=false

4
ঠিক আছে, এটি আমার পক্ষে কাজ করেছে তবে আমি নিশ্চিত না যে এই বিকল্পগুলি সুরক্ষা দৃষ্টিকোণ থেকে কতটা বৈধ।
প্রিয়ঙ্ক ঠাক্কর

31
useSSL=false&allowPublicKeyRetrieval=trueআমি কী প্রয়োজন ছিল তা শুধুমাত্র যখন আমি থেকে সংযোগ চেষ্টা করেছেন, সেটা docker_container1থেকে docker_container2_mysql(where mysql is installed)আমার স্থানীয় হোস্ট মধ্যে। আমার হোস্ট মেশিন থেকে যদিও docker_container2_mysql, useSSL=falseযথেষ্ট।
প্রার্থনাগাদ

4
অনুমতিপ্রযুক্তিপ্রজাতীয়কিট্রিভালওয়াল = সত্য & amp; ব্যবহার এসএসএল = মিথ্যা, আপনি যে কাজটি করেন তা ট্যাঙ্ক করুন
মার্টিন ক্লেস্টিল

4
কেন আপনি বিষয়টি ব্যাখ্যা করতে পারেন?
ক্যাপেন স্প্যারো

আমার জেডিবিসি সংযোগের স্ট্রিংয়ে 'অনুমতিপ্রযুক্তিপ্রজাতীয়কিট্রিট্রিভাল = সত্য' যুক্ত করা গতকাল একটি উইন্ডোজ 10 আপডেটের পরে আমার বিকাশের সিস্টেমের সমস্যার সমাধান করেছে। অনুমান মাইক্রোসফ্ট অন্য একটি গর্ত প্লাগ করেছে, এবং বিকল্পটি আমার দৃষ্টিতে "কেবলমাত্র উন্নয়নের জন্য" ব্যবহার করা উচিত, যেখানে এসএসএল চালু নেই।
আল্জ

34

জন্য DBeaver ব্যবহারকারী:

  1. আপনার সংযোগটিতে ডান ক্লিক করুন, "সংযোগ সম্পাদনা করুন" নির্বাচন করুন

  2. "সংযোগ সেটিংস" স্ক্রিনে (মূল পর্দা) "ড্রাইভার সেটিংস সম্পাদনা করুন" এ ক্লিক করুন

  3. "সংযোগের বৈশিষ্ট্য" এ ক্লিক করুন

  4. "ব্যবহারকারীর বৈশিষ্ট্যগুলি" অঞ্চলটিতে ডান ক্লিক করুন এবং "নতুন সম্পত্তি যুক্ত করুন" নির্বাচন করুন

  5. দুটি বৈশিষ্ট্য যুক্ত করুন: "ব্যবহার এসএসএল" এবং "অনুমতিপ্রযুক্তিপ্রজাতন্ত্রীকি রিটারিভাল"

  6. "মান" কলামটিতে ডাবল ক্লিক করে তাদের মানগুলি "মিথ্যা" এবং "সত্য" তে সেট করুন


31

jdbc urlহিসাবে ব্যবহার করুন :

jdbc:mysql://localhost:3306/Database_dbName?allowPublicKeyRetrieval=true&useSSL=false;

PortNo: 3306 আপনার কনফিগারেশন বিভিন্ন হতে পারে


একটি ছোট সংশোধন এখানে। সংযোগের বৈশিষ্ট্য 'ব্যবহার এসএসএল' গ্রহণযোগ্য মানগুলি হ'ল: 'সত্য', 'মিথ্যা', 'হ্যাঁ' বা 'না'। মান 'মিথ্যা'; গ্রহণযোগ্য নয়।
bluelurker

12

প্রস্তাবিত উত্তর অন্যথায় আপনি চেষ্টা করুন এবং ব্যবহার করতে পারে mysql_native_password প্রমাণীকরণ পরিবর্তে প্লাগইন caching_sha2_password প্রমাণীকরণ প্লাগইন।

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password_here'; 

4

আমি বসন্ত বুট ফ্রেমওয়ার্কে নীচে কনফিগারেশন ব্যবহার করে এই সমস্যাটি সমাধান করি

spring.datasource.url=jdbc:mysql://localhost:3306/db-name?useUnicode=true&characterEncoding=UTF-8&allowPublicKeyRetrieval=true&useSSL=false
spring.datasource.username=root
spring.datasource.password=root

1

আমার ক্ষেত্রে এটি ব্যবহারকারীর ত্রুটি ছিল। আমি rootব্যবহারকারীর অবৈধ পাসওয়ার্ড ব্যবহার করছিলাম । আমি নিশ্চিত নই কেন আমি লেখক ত্রুটি পাই নি তবে পরিবর্তে এই ক্রিপ্টিক বার্তাটি পেয়েছি।


1

আমার ক্ষেত্রে উপরের ত্রুটিটি আসলে ভুল ব্যবহারকারীর নাম এবং পাসওয়ার্ডের কারণে হয়েছিল। সমস্যা সমাধান করা: 1. ড্রাইভারমনেজ। ক্ষেত্রের ব্যবহারকারীর নাম এবং পাসওয়ার্ড ভুল হতে পারে। আপনার মাইএসকিএল ক্লায়েন্ট শুরু করতে ব্যবহারকারীর নাম এবং পাসওয়ার্ড লিখুন। ব্যবহারকারীর নামটি সাধারণত রুট হয় এবং পাসওয়ার্ডটি এমন স্ট্রিং থাকে যা আপনি প্রবেশ করান যখন এই জাতীয় স্ক্রীনটি মাইএসকিএলের স্টার্টআপ স্ক্রিনটি উপস্থিত হয়

দ্রষ্টব্য: পোর্টনাম 3306 আপনার ক্ষেত্রে পৃথক হতে পারে।


1

আমি এই সমস্যাটিকে হতাশাবোধ করেছিলাম কারণ আমি গতকাল ডাটাবেসের সাথে ইন্টারফেস করতে সক্ষম হয়েছি, তবে আজ সকালে ফিরে আসার পরে, আমি এই ত্রুটি পেতে শুরু করেছি।

আমি যোগ করার চেষ্টা করেছি allowPublicKeyRetrieval=true পতাকাটি , তবে আমি ত্রুটিটি পেয়েছি।

এটি আমার জন্য কী স্থির করেছিল তা Project->Cleanগ্রহন এবং Cleanআমার টমক্যাট সার্ভারে করছিল । এর মধ্যে একটি (বা উভয়) এটি স্থির করে।

আমি বুঝতে পারছি না, কেননা আমি মাভেন ব্যবহার করে আমার প্রকল্পটি তৈরি করি এবং প্রতিটি কোড পরিবর্তনের পরে আমার সার্ভারটি পুনরায় চালু করে চলেছি। খুব বিরক্তিকর ...


1

মাইএসকিএল সহ বসন্ত বুট অ্যাপ্লিকেশন সংযোগে ইউএসএসএল = সত্য আপডেট করুন;

jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=utf8&useSSL=true&useLegacyDatetimeCode=false&serverTimezone=UTC

1

আমাদের বিদ্যমান অ্যাপ্লিকেশনটিকে ডকারাইজ করার সময় আমিও এ জাতীয় সমস্যার মুখোমুখি হয়েছি। সমাধানটি জেডিবিসি সংযোগের স্ট্রিংয়ের সাথে সত্যের মান সহ মাইএসকিউএলের অনুমতিপ্রযুক্তিপ্রতিজনিত কিট্রি রিটারিভাল সংযোগ বিকল্পটি যুক্ত করবে si যদি এটি কাজ না করে তবে ব্যবহারের জন্য এসএসএল বিকল্পটিও মিথ্যা হিসাবে যুক্ত করার চেষ্টা করুন ।

ফলস্বরূপ স্ট্রিংয়ের মতো দেখতে হবে:

jdbc:mysql://<database server ip>:3306/databaseName?allowPublicKeyRetrieval=true&useSSL=false

1

প্রথমত, আপনার ডেটাবেস সার্ভারটি চালু এবং চলমান রয়েছে তা নিশ্চিত করুন। আমি একই ত্রুটি পাচ্ছিলাম, এখানে তালিকাভুক্ত সমস্ত উত্তর চেষ্টা করার পরে আমি জানতে পেরেছিলাম যে আমার ডেটাবেস সার্ভারটি চলছে না।

আপনি মাইএসকিউএল ওয়ার্কবেঞ্চ বা কমান্ড লাইন ব্যবহার করে এটি পরীক্ষা করতে পারেন

mysql -u USERNAME -p

এটি সুস্পষ্ট মনে হয়, তবে অনেক সময় আমরা ধরে নিয়েছি যে ডেটাবেস সার্ভারটি সর্বদা চালু থাকে এবং চলতে থাকে, বিশেষত যখন আমরা আমাদের স্থানীয় মেশিনে কাজ করি, যখন আমরা মেশিনটি পুনরায় চালু / বন্ধ করি তখন ডেটাবেস সার্ভারটি স্বয়ংক্রিয়ভাবে বন্ধ হয়ে যায়।


0

এই সমাধানটি ম্যাকস সিয়েরার জন্য কাজ করেছে এবং মাইএসকিউএল সংস্করণ 8.0.11 চলছে। দয়া করে নিশ্চিত হয়ে নিন যে আপনি নিজের নির্মাণের পথে ড্রাইভারটি যুক্ত করেছেন - "বহিরাগত জার যুক্ত করুন" এসকিউএল সংস্করণের সাথে মেলে।

String url = "jdbc:mysql://localhost:3306/syscharacterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true";

0

সংযোগ ইউআরএলকে জেডিবিসি: মাইএসকিএল: // লোকালহোস্ট: 3306 / এইচবি_স্টুডেন্ট_ট্র্যাকার? অনুমতিপ্রযুক্তি পাবলিককি রিটারিভাল = সত্য ও ব্যবহার এসএসএল = মিথ্যা ও সার্ভারটাইমজোন = ইউটিসি হিসাবে দিন


0

আপনি যদি মাইএসকিএল সংযোগের সময় নিম্নলিখিত ত্রুটিটি পেয়ে থাকেন (স্থানীয় বা মাইএসকিএল কনটেইনারটি মাইএসকিএল চালাচ্ছে):

java.sql.SQLNonTransientConnicationException: সর্বজনীন কী পুনরুদ্ধার অনুমোদিত নয়

সমাধান: আপনার ডাটাবেস পরিষেবাতে নিম্নলিখিত লাইনটি যুক্ত করুন:

command: --default-authentication-plugin=mysql_native_password

0

ভুল ব্যবহারকারীর নাম বা পাসওয়ার্ডের কারণে এটিও ঘটতে পারে। সমাধান হিসাবে আমি allowPublicKeyRetrieval=true&useSSL=falseঅংশ যোগ করেছি কিন্তু তবুও আমি ত্রুটি পেয়েছি তখন আমি পাসওয়ার্ডটি পরীক্ষা করেছিলাম এবং এটি ভুল ছিল।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.