আসুন শুধু পরীক্ষা করা যাক।
সুপারউজার হিসাবে সংযুক্ত করুন এবং তারপরে:
SHOW VARIABLES LIKE "%version%";
+
| Variable_name | Value |
+
| version | 10.0.23-MariaDB-0+deb8u1-log |
এবং তারপর
USE mysql;
সেটআপ
পরীক্ষার জন্য fooপাসওয়ার্ড সহ একটি ব্যবহারকারী তৈরি করুন bar:
CREATE USER foo@'%' IDENTIFIED BY 'bar'; FLUSH PRIVILEGES;
সংযোগ করুন
ইউনিক্স ডোমেন সকেটের সাথে সংযোগ স্থাপনের জন্য (যেমন ফাইল সিস্টেম এন্ট্রি /var/run/mysqld/mysqld.sockবা অন্য কিছু দ্বারা নামকরণ করা I / O পাইপ ) কমান্ড লাইনে এটি চালান ( --protocolদ্বিগুণ নিশ্চিত করার জন্য বিকল্পটি ব্যবহার করুন )
mysql -pbar -ufoo
mysql -pbar -ufoo
একজন আশা করে যে উপরের মিলগুলি "ব্যবহারকারী লোকহোস্ট থেকে আসে" তবে অবশ্যই "ব্যবহারকারী 127.0.0.1" থেকে আসে না।
পরিবর্তে "127.0.0.1" থেকে সার্ভারের সাথে সংযোগ স্থাপন করতে, কমান্ড লাইনে এটি চালান
mysql -pbar -ufoo
যদি আপনি ছেড়ে চলে যান --protocol=TCPতবে mysqlকমান্ডটি ইউনিক্স ডোমেন সকেটটি ব্যবহার করার চেষ্টা করবে। আপনি আরও বলতে পারেন:
mysql -pbar -ufoo
দুটি সংযোগ একটি লাইনে চেষ্টা করে:
export MYSQL_PWD=bar; \
mysql -ufoo
mysql -ufoo
(পাসওয়ার্ডটি পরিবেশে সেট করা হয়েছে যাতে এটি mysqlপ্রক্রিয়াতে প্রেরণ করা হয় )
সন্দেহের ক্ষেত্রে যাচাইকরণ
টিসিপি / আইপি সকেট বা ইউনিক্স ডোমেন সকেটের মাধ্যমে সংযোগটি যায় কিনা তা সত্যই যাচাই করতে
- এর আউটপুট পরীক্ষা করে মাইএসকিএল ক্লায়েন্ট প্রক্রিয়ার পিআইডি পান
ps faux
- চালান
lsof -n -p<yourpid>।
আপনি এরকম কিছু দেখতে পাবেন:
mysql [PID] quux 3u IPv4 [code] 0t0 TCP 127.0.0.1:[port]->127.0.0.1:mysql (ESTABLISHED)
বা
mysql [PID] quux 3u unix [code] 0t0 [code] socket
সুতরাং:
কেস 0: হোস্ট = '10 .10.10.10 '(নাল পরীক্ষা)
update user set host='10.10.10.10' where user='foo'; flush privileges;
- সকেট ব্যবহার করে সংযুক্ত করুন: ব্যর্থ
- 127.0.0.1 থেকে সংযোগ করুন: ব্যর্থতা
কেস 1: হোস্ট = '%'
update user set host='%' where user='foo'; flush privileges;
- সকেট ব্যবহার করে সংযুক্ত করুন: ঠিক আছে
- 127.0.0.1 থেকে সংযুক্ত করুন: ঠিক আছে
কেস 2: হোস্ট = 'লোকালহোস্ট'
update user set host='localhost' where user='foo';flush privileges;
আচরণ পরিবর্তিত হয় এবং এটি আপাতভাবে নির্ভর করে skip-name-resolve। যদি সেট localhostকরা থাকে তবে লগ অনুসারে লাইনগুলিকে উপেক্ষা করা হবে। ত্রুটি লগতে নিম্নলিখিতটি দেখা যাবে: "'ব্যবহারকারীর' এন্ট্রি 'রুট @ লোকালহোস্ট' --স্কিপ-নাম-সমাধান মোডে উপেক্ষা করা হয়েছে।" । এর অর্থ ইউনিক্স ডোমেন সকেটের মাধ্যমে কোনও সংযোগ নেই। তবে অভিজ্ঞতাগতভাবে এটি হয় না। localhostএখন কেবল ইউনিক্স ডোমেন সকেটের অর্থ, আর আর 127.0.0.1 এর সাথে মেলে না।
skip-name-resolve বন্ধ:
- সকেট ব্যবহার করে সংযুক্ত করুন: ঠিক আছে
- 127.0.0.1 থেকে সংযুক্ত করুন: ঠিক আছে
skip-name-resolve চালু আছে:
- সকেট ব্যবহার করে সংযুক্ত করুন: ঠিক আছে
- 127.0.0.1 থেকে সংযোগ করুন: ব্যর্থতা
কেস 3: হোস্ট = '127.0.0.1'
update user set host='127.0.0.1' where user='foo';flush privileges;
- সকেট ব্যবহার করে সংযুক্ত করুন: ব্যর্থ
- 127.0.0.1 থেকে সংযুক্ত করুন: ঠিক আছে
কেস 4: হোস্ট = ''
update user set host='' where user='foo';flush privileges;
- সকেট ব্যবহার করে সংযুক্ত করুন: ঠিক আছে
- 127.0.0.1 থেকে সংযুক্ত করুন: ঠিক আছে
( মাইএসকিউএল ৫.7: .2.২.৪ অনুসারে অ্যাক্সেস কন্ট্রোল, মঞ্চ ১: সংযোগ যাচাইকরণ , খালি স্ট্রিং''র অর্থ "কোনও হোস্ট" তবে '%' এর পরে বাছাই করা হয় ))
কেস 5: হোস্ট = '192.168.0.1' (অতিরিক্ত পরীক্ষা)
('192.168.0.1' আমার মেশিনের একটি আইপি ঠিকানা, আপনার ক্ষেত্রে যথাযথভাবে পরিবর্তন করুন)
update user set host='192.168.0.1' where user='foo';flush privileges;
- সকেট ব্যবহার করে সংযুক্ত করুন: ব্যর্থ
- 127.0.0.1 থেকে সংযোগ করুন: ব্যর্থতা
কিন্তু
- ব্যবহার করে সংযুক্ত করুন
mysql -pbar -ufoo -h192.168.0.1: ঠিক আছে (!)
পরবর্তী কারণ এটি প্রকৃতপক্ষে টিসিপি সংযোগ থেকে আসছে 192.168.0.1, যেমনটি প্রকাশিত হয়েছে lsof:
TCP 192.168.0.1:37059->192.168.0.1:mysql (ESTABLISHED)
এজ কেস এ: হোস্ট = '0.0.0.0'
update user set host='0.0.0.0' where user='foo';flush privileges;
- সকেট ব্যবহার করে সংযুক্ত করুন: ব্যর্থ
- 127.0.0.1 থেকে সংযোগ করুন: ব্যর্থতা
এজ কেস বি: হোস্ট = '255.255.255.255'
update user set host='255.255.255.255' where user='foo';flush privileges;
- সকেট ব্যবহার করে সংযুক্ত করুন: ব্যর্থ
- 127.0.0.1 থেকে সংযোগ করুন: ব্যর্থতা
এজ কেস সি: হোস্ট = '127.0.0.2'
(127.0.0.2 RFC6890 হিসাবে সংজ্ঞায়িত হিসাবে 127.0.0.1 সমতুল্যভাবে বৈধ লুপব্যাক ঠিকানা )
update user set host='127.0.0.2' where user='foo';flush privileges;
- সকেট ব্যবহার করে সংযুক্ত করুন: ব্যর্থ
- 127.0.0.1 থেকে সংযোগ করুন: ব্যর্থতা
মজার বিষয়:
mysql -pbar -ufoo -h127.0.0.2থেকে সংযোগ স্থাপন করে 127.0.0.1এবং এটি ব্যর্থ
mysql -pbar -ufoo -h127.0.0.2 --bind-address=127.0.0.2 ঠিক আছে
পরিষ্কার কর
delete from user where user='foo';flush privileges;
সংযোজন
mysql.userটেবিলটিতে আসলে কী রয়েছে , যা অনুমতি সারণীর মধ্যে একটি, তা ব্যবহার করতে:
SELECT SUBSTR(password,1,6) as password, user, host,
Super_priv AS su,
Grant_priv as gr,
CONCAT(Select_priv, Lock_tables_priv) AS selock,
CONCAT(Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_priv) AS modif,
CONCAT(References_priv, Index_priv, Alter_priv) AS ria,
CONCAT(Create_tmp_table_priv, Create_view_priv, Show_view_priv) AS views,
CONCAT(Create_routine_priv, Alter_routine_priv, Execute_priv, Event_priv, Trigger_priv) AS funcs,
CONCAT(Repl_slave_priv, Repl_client_priv) AS replic,
CONCAT(Shutdown_priv, Process_priv, File_priv, Show_db_priv, Reload_priv, Create_user_priv) AS admin
FROM user ORDER BY user, host;
এটি দেয়:
+
| password | user | host | su | gr | selock | modif | ria | views | funcs | replic | admin |
+
| *E8D46 | foo | | N | N | NN | NNNNN | NNN | NNN | NNNNN | NN | NNNNNN |
একইভাবে টেবিলের জন্য mysql.db:
SELECT host,db,user,
Grant_priv as gr,
CONCAT(Select_priv, Lock_tables_priv) AS selock,
CONCAT(Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_priv) AS modif,
CONCAT(References_priv, Index_priv, Alter_priv) AS ria,
CONCAT(Create_tmp_table_priv, Create_view_priv, Show_view_priv) AS views,
CONCAT(Create_routine_priv, Alter_routine_priv, Execute_priv) AS funcs
FROM db ORDER BY user, db, host;