দয়া করে নোট করুন মাইএসকিউএল 5.0 শংসাপত্রের স্টাডি গাইড
পৃষ্ঠা 498 অনুচ্ছেদে 6 এর বুলেটপয়েন্টগুলিতে বলুন:
ইউনিক্সে, মাইএসকিউএলটি একটি মাইএসকিউএল_সিকিউর_ইনস্টলেশন স্ক্রিপ্ট নিয়ে আসে যা আপনার ইনস্টলেশনতে সুরক্ষা সম্পর্কিত বেশ কয়েকটি সহায়ক কাজ করতে পারে। স্ক্রিপ্টের নিম্নলিখিত ক্ষমতা রয়েছে:
- মূল অ্যাকাউন্টগুলির জন্য একটি পাসওয়ার্ড সেট করুন
- যে কোনও দূরবর্তী অ্যাক্সেসযোগ্য মূল অ্যাকাউন্টগুলি সরান।
- বেনামে ব্যবহারকারীর অ্যাকাউন্টগুলি সরান। এটি সুরক্ষার উন্নতি করে কারণ এটি মাইএসকিউএল সার্ভারের সাথে প্রত্যন্ত হোস্ট থেকে রুট হিসাবে সংযুক্ত হওয়ার সম্ভাবনা রোধ করে। ফলাফলগুলি হ'ল যে কেউ রুট হিসাবে সংযোগ করতে চায় তাদের অবশ্যই প্রথমে সার্ভার হোস্টে লগ ইন করতে সক্ষম হতে হবে, যা আক্রমণ বিরুদ্ধে অতিরিক্ত বাধা সরবরাহ করে।
- পরীক্ষার ডাটাবেসটি সরান (যদি আপনি বেনামে থাকা অ্যাকাউন্টগুলি সরিয়ে দেন তবে আপনি যে পরীক্ষামূলক ডাটাবেসে তাদের অ্যাক্সেস রয়েছে তা সরাতেও পারেন)।
এই খারাপ এন্ট্রি থেকে মুক্তি পেতে, দয়া করে এটি চালান:
DELETE FROM mysql.db WHERE SUBSTR(db,4) = 'test';
FLUSH PRIVILEGES;
@DTest প্রশ্নের তার মন্তব্যে উল্লেখ হিসাবে, আপনি চালাতে পারেন mysql_secure_installation এই আপনার জন্য।
যদি কোনও অনামী ব্যবহারকারী দূর থেকে মাইএসকিউএলে লগইন করতে পারে তবে মাইএসকিএল ইনস্টলেশনটি ক্ষতিগ্রস্থ করতে একটি সাধারণ ডিস্ক আক্রমণ শুরু করা যেতে পারে। এখানে একটি উদাহরণ:
USE test
CREATE TABLE rolando_tb (a int);
INSERT INTO rolando_tb VALUES (1);
INSERT INTO rolando_tb SELECT a FROM rolando_tb;
INSERT INTO rolando_tb SELECT a FROM rolando_tb;
INSERT INTO rolando_tb SELECT a FROM rolando_tb;
INSERT INTO rolando_tb SELECT a FROM rolando_tb;
30 বার সন্নিবেশ করান এবং আপনি একটি 7 জিবি টেবিল পাবেন
- পরীক্ষার ডাটাবেসে এই টেবিলগুলির কয়েকটি তৈরি করার বিষয়টি কল্পনা করুন
- পরীক্ষা ডাটাবেসে একটি সঞ্চিত পদ্ধতি তৈরি করার কল্পনা করুন
- পরীক্ষাগুলি এবং পরীক্ষার_% যতক্ষণ বিদ্যমান রয়েছে ততক্ষণ সম্ভাবনাগুলি অফুরন্ত
mysql.db
মাইএসকিএল ইনস্টলেশনটি সুরক্ষার গুরুতরতা মাইএসকিউএল এবি দ্বারা পুরোপুরি নথিভুক্ত করা হয়নি, এবং আমি মনে করি না ওরাকল আজ এটি করতে আগ্রহী।
আপডেট 2012-02-18 16:45 ইডিটি
@ Atxdba এর মন্তব্য দ্বারা এটি প্রস্তাবিত হয়েছিল যে কেবল 'ড্রপ ডেটাবেস পরীক্ষা চালানো হচ্ছে;' mysql.db স্পর্শ করার চেয়ে পছন্দসই পদ্ধতি হওয়া উচিত। নামের ডাটাবেসটি test
ফেলে দেওয়া কেবল এমন ডেটাবেস সরিয়ে দেয় যা একটি সম্ভাব্য সুরক্ষা গর্তের জন্য একটি জলবাহিকা খোলে।
দয়া করে এই ক্যোয়ারির নোট নিন:
mysql> select user,host,db from mysql.db;
+------+------+---------+
| user | host | db |
+------+------+---------+
| | % | test |
| | % | test\_% |
+------+------+---------+
2 rows in set (0.09 sec)
এর ভিত্তিতে, নিম্নলিখিত ডাটাবেসগুলি অনামী ব্যবহারকারীদের দ্বারা সম্পূর্ণ অ্যাক্সেস করা যেতে পারে :
- পরীক্ষা
- test_db
- test_001
- test_1
- test_data
যদিও অজ্ঞাত ব্যবহারকারীদের দ্বারা নিম্নলিখিত ডাটাবেসগুলি সম্পূর্ণ অ্যাক্সেস করা যায় না:
- testdb
- বর্তমানে test1 ফাইল
- testdata
- টেস্ট (
Test
থেকে ভিন্ন test
Linux- ভিত্তিক সিস্টেমের মধ্যে, কিন্তু এটা উইন্ডোজ চলমান মাইএসকিউএল জন্য সমস্যা এখনও আছে)
mysql.db
টেবিলের উপর ভিত্তি করে আপনাকে এই সূক্ষ্ম নিয়মটি মনে রাখতে হবে । আপনি যদি এটি মনে না রাখেন, নামের একটি পরীক্ষামূলক ডাটাবেস তৈরি করুন test
বা একটি ডাটাবেস নাম যার প্রথম 5 টি অক্ষর test_
সেই একই ধরণের সুরক্ষা গর্তটি আবার খুলবে।
এই জিনিসগুলি মনে রাখার সবচেয়ে নিরাপদ উপায় হল প্রাথমিক ইনস্টলেশনগুলির পরে এই লাইনগুলি চালানো:
DELETE FROM mysql.db WHERE SUBSTR(db,4) = 'test' AND user='';
FLUSH PRIVILEGES;
তারপরে যে কোনও নামের ডাটাবেসের একটি সঠিক প্রমাণীকরণ সেটআপ থাকতে পারে। আপনি এখনও এই দুটি লাইন যে কোনও সময় চালাতে পারেন।
আপডেট 2012-02-24 15:20 ইডিটি
অনামী ব্যবহারকারীদের মধ্যে থাকা বিপদটি প্রকাশ্যে প্রদর্শন করা To mysql.db
, আমি এমন একটি ব্যবহারকারী তৈরি করতে চাই যাতে কেবল ব্যবহারের সুযোগ থাকবে।
আমি আমার ডেস্কটপে মাইএসকিউএল 5.5.12 ব্যবহার করব
প্রথমে mysql.db দেখুন
mysql> select user,host,db from mysql.db;
+------+------+---------+
| user | host | db |
+------+------+---------+
| | % | test |
| | % | test\_% |
+------+------+---------+
2 rows in set (0.05 sec)
mysql>
এটি অনুসারে, কোনও বেনামে জো এই ডাটাবেসে পৌঁছতে পারে।
আমি test_mysqldb একটি ডাটাবেস তৈরি করব
mysql> create database test_mysqldb;
Query OK, 1 row affected (0.00 sec)
mysql> use test_mysqldb
Database changed
mysql> show tables;
Empty set (0.00 sec)
mysql>
আসুন ভ্যানিলা @ লোকালহোস্ট নামে একটি সরল ভ্যানিলা ব্যবহারকারী তৈরি করুন (কোনও পাসওয়ার্ড নেই)
mysql> CREATE USER vanilla@localhost;
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW GRANTS FOR vanilla@localhost;
+---------------------------------------------+
| Grants for vanilla@localhost |
+---------------------------------------------+
| GRANT USAGE ON *.* TO 'vanilla'@'localhost' |
+---------------------------------------------+
1 row in set (0.00 sec)
mysql>
এর পরে, ডস কমান্ড লাইন থেকে, আসুন মাইএসকিএল স্কিমে সংযোগ করি
C:\>mysql -uvanilla -Dmysql
ERROR 1044 (42000): Access denied for user 'vanilla'@'localhost' to database 'mysql'
C:\>
ঠিকাছে দারুন. এটাই আমার প্রত্যাশা ছিল।
এর পরে, ডস কমান্ড লাইন থেকে, আসুন test_mysqldb স্কিমাতে সংযোগ করি, একটি সারণী তৈরি করি এবং সংখ্যার সাহায্যে এটি লোড করি
C:\>mysql -uvanilla -Dtest_mysqldb
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.5.12-log MySQL Community Server (GPL)
Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> CREATE TABLE rolando_tb (a bigint unsigned);
Query OK, 0 rows affected (0.06 sec)
mysql> INSERT INTO rolando_tb VALUES (1);
Query OK, 1 row affected (0.06 sec)
mysql> INSERT INTO rolando_tb SELECT * FROM rolando_tb;
Query OK, 1 row affected (0.06 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> INSERT INTO rolando_tb SELECT * FROM rolando_tb;
Query OK, 2 rows affected (0.08 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> INSERT INTO rolando_tb SELECT * FROM rolando_tb;
Query OK, 4 rows affected (0.06 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql> INSERT INTO rolando_tb SELECT * FROM rolando_tb;
Query OK, 8 rows affected (0.06 sec)
Records: 8 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM rolando_tb;
+------+
| a |
+------+
| 1 |
| 1 |
| 1 |
| 1 |
| 1 |
| 1 |
| 1 |
| 1 |
| 1 |
| 1 |
| 1 |
| 1 |
| 1 |
| 1 |
| 1 |
| 1 |
+------+
16 rows in set (0.00 sec)
mysql> SELECT database();
+--------------+
| database() |
+--------------+
| test_mysqldb |
+--------------+
1 row in set (0.00 sec)
mysql>
তুমি কি তা দেখেছিলে? USAGE
বিশেষাধিকারসহ ব্যবহারকারীপরীক্ষার ডাটাবেসে একটি সারণী তৈরি করতে এবং ডেটা দিয়ে তা পূরণ করতে পারেন। এটি একটি স্পষ্ট এবং বর্তমান বিপদ । এই কারণেই আমি অজ্ঞাতপরিচয় ব্যবহারকারীদের পরীক্ষার ডাটাবেসে পৌঁছাতে বা সদ্য তৈরি হওয়া পরীক্ষামূলক ডাটাবেসগুলি অ্যাক্সেস করা থেকে বিরত রাখতে (ডিফল্টর অধীন সাবফোল্ডার তৈরির মাধ্যমে) পরীক্ষামূলক এন্ট্রিগুলি mysql.db এর বাইরে মুছে দেওয়ার পরামর্শ দিচ্ছিdatadir
) ।
অনুস্মারক হিসাবে, আপনি এটি এটি করেন:
DELETE FROM mysql.db WHERE SUBSTR(db,4) = 'test' AND user='';
FLUSH PRIVILEGES;
আপডেট 2013-09-14 20:05 ইডিটি
DELETE FROM mysql.db WHERE SUBSTR(db,4) = 'test' AND user='';
প্রকৃতপক্ষে কাজ করে তা প্রমাণ করার জন্য , আমি আজ এটি মাইএসকিউএল 5.6.13 এ চালিত করেছি:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.13-log MySQL Community Server (GPL)
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> select db,user,host from mysql.db where LEFT(db,4)='test';
+---------+------+------+
| db | user | host |
+---------+------+------+
| test | | % |
| test\_% | | % |
+---------+------+------+
2 rows in set (0.43 sec)
mysql> delete from mysql.db where LEFT(db,4)='test';
Query OK, 2 rows affected (0.04 sec)
mysql> select db,user,host from mysql.db2 where LEFT(db,4)='test';
Empty set (0.00 sec)
mysql>
একটি সরকারী পরিষেবা ঘোষণা হিসাবে, দয়া করে চালান
DELETE FROM mysql.db WHERE SUBSTR(db,4) = 'test' AND user='';
FLUSH PRIVILEGES;
অথবা কেবল মাইএসকিএল-সুরক্ষিত-ইনস্টলেশন চালান এবং এই সম্ভাব্য বিপদটি বিছানায় রাখুন।
mysql_secure_installation
একটি নতুন ইনস্টল চালাই , যা বেনামে ব্যবহারকারীদের সরিয়ে দেয়।