মাইএসকিউএল ডাটাবেসে অডিট লগইন


11

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

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

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


1
আপনি নিরীক্ষণ ঠিক কি খুঁজছেন? আমি অনুমান করেছি আপনি বোঝাতে চাইছেন আপনি মাইএসকিউএল ব্যবহারকারীর নাম ব্যবহার করবেন, সিস্টেমের ব্যবহারকারীর নাম নয়? আপনি কীভাবে পরবর্তীতে অডিট ডেটা ব্যবহার করতে চান (অর্থ কী বিশদ এখানে গুরুত্বপূর্ণ তা কী মাইএসকিউএল লগিংয়ের পরিবর্তে সিস্টেম লগিং যথেষ্ট হবে)। আপনার প্রশ্নে আপনি যত বেশি তথ্য সরবরাহ করতে পারবেন আমরা ঠিক তেমনভাবে আপনাকে উত্তর দিতে পারি এবং দ্রুত বুট করতে পারি। আমি ভাবছি আপনি "আপনার অ্যাপ্লিকেশনটিকে একে অপরের ক্রিয়াকলাপের আগে একটি নির্দিষ্ট স্প্রোক কল করুন" এর চেয়ে আরও ভাল উত্তর চান ~ সংক্ষেপে, আমি যদি এটি জিজ্ঞাসা করি তবে আমার কাছে আপনার কী বিবরণের প্রয়োজন হবে?
jcolebrand

উত্তর:


6

আপনি সম্ভবত সাধারণ ক্যোয়ারী লগটি ব্যবহার করতে চাইবেন ।

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

সুরক্ষার জন্য লগিংয়ের সাথে একটি গুরুত্বপূর্ণ বিষয় হ'ল আক্রমণকারী তাদের উপস্থিতির চিহ্নগুলি মুছতে লগটি অ্যাক্সেস করতে পারে না, সুতরাং কেবলমাত্র অ্যাপলিকেশন ফাইলগুলি বিবেচনা করুন

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



ওহ দুর্দান্ত, প্রতিদিন নতুন কিছু শিখুন :-)
গাইস

5

@ গাউসের উত্তরটি দুর্দান্ত। এটিতে আরও যুক্ত করতে, আপনি নিম্নলিখিতগুলি করতে পারেন:

মাইএসকিউএল 5.1 এখন সাধারণ লগ এবং স্লো ক্যোয়ারী লগকে এসকিউএল টেবিল হিসাবে সংরক্ষণ করার অনুমতি দেয়।

এটিকে /etc/my.cnf এ যুক্ত করুন:

[mysqld]
log-output=TABLE
log

মাইএসকিএল পুনরায় চালু করুন

তারপরে, যখন mysqld সাধারণ লগ তৈরি করে, একটি পাঠ্য ফাইলের পরিবর্তে এটি / var / lib / mysql / mysql ফোল্ডারে (mysql স্কিমা ডাটাবেস) CSV টেবিল হিসাবে টেবিলটি তৈরি করে।

এটি দেখতে কেবল এটি করুন:

SHOW CREATE TABLE mysql.general_log\G

সমস্ত সংযোগ এতে গাদা হয়ে যাবে।

আপনার জন্য, যখন এটি অনুসন্ধান করার বিষয়টি আসে তখন তা খুব কার্যকর নয়। এটি প্রতিবার কেবল একটি পূর্ণ টেবিল স্ক্যান হবে।

কি করো ??? এটি মাইসামে এবং টেবিলটিকে সূচী করুন !!!!

SET @old_log_state = @@global.general_log;
SET GLOBAL general_log = 'OFF';
ALTER TABLE mysql.general_log ENGINE = MyISAM;
ALTER TABLE mysql.general_log ADD INDEX (event_time);
SET GLOBAL general_log = @old_log_state;

Allyচ্ছিকভাবে, আপনি আর্গুমেন্ট ফিল্ডে একটি পূর্ণ পাঠ্য সূচি রাখতে পারেন।

আমি সবেমাত্র একটি সার্ভারে মাইএসকিউএল 5.5.9 সেটআপ করেছি এবং এটি ব্যবহার করে দেখেছি। ফলাফল এখানে:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.5.9-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.

iml-db10:3306 (DB (none)) :: show create table mysql.general_log\G
*************************** 1. row ***************************
       Table: general_log
Create Table: CREATE TABLE `general_log` (
  `event_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `user_host` mediumtext NOT NULL,
  `thread_id` int(11) NOT NULL,
  `server_id` int(10) unsigned NOT NULL,
  `command_type` varchar(64) NOT NULL,
  `argument` mediumtext NOT NULL
) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='General log'
1 row in set (0.01 sec)

iml-db10:3306 (DB (none)) :: SET @old_log_state = @@global.general_log;
Query OK, 0 rows affected (0.00 sec)

iml-db10:3306 (DB (none)) :: SET GLOBAL general_log = 'OFF';
Query OK, 0 rows affected (0.00 sec)

iml-db10:3306 (DB (none)) :: ALTER TABLE mysql.general_log ENGINE = MyISAM;
Query OK, 9 rows affected (0.02 sec)
Records: 9  Duplicates: 0  Warnings: 0

iml-db10:3306 (DB (none)) :: ALTER TABLE mysql.general_log ADD INDEX (event_time);
Query OK, 9 rows affected (0.00 sec)
Records: 9  Duplicates: 0  Warnings: 0

iml-db10:3306 (DB (none)) :: SET GLOBAL slow_query_log = @old_log_state;
Query OK, 0 rows affected (0.00 sec)

iml-db10:3306 (DB (none)) :: select * from mysql.general_log;
+---------------------+-----------------------------+-----------+-----------+--------------+-------------------------------------------+
| event_time          | user_host                   | thread_id | server_id | command_type | argument                                  |
+---------------------+-----------------------------+-----------+-----------+--------------+-------------------------------------------+
| 2011-02-24 14:42:18 | [lwdba] @  [127.0.0.1]      |         3 | 106451130 | Connect      | lwdba@127.0.0.1 on                        |
| 2011-02-24 14:42:18 | lwdba[lwdba] @  [127.0.0.1] |         3 | 106451130 | Query        | select @@version_comment limit 1          |
| 2011-02-24 14:42:18 | lwdba[lwdba] @  [127.0.0.1] |         3 | 106451130 | Query        | SHOW VARIABLES LIKE 'hostname'            |
| 2011-02-24 14:42:18 | lwdba[lwdba] @  [127.0.0.1] |         3 | 106451130 | Quit         |                                           |
| 2011-02-24 14:42:18 | [lwdba] @  [127.0.0.1]      |         4 | 106451130 | Connect      | lwdba@127.0.0.1 on                        |
| 2011-02-24 14:42:18 | lwdba[lwdba] @  [127.0.0.1] |         4 | 106451130 | Query        | select @@version_comment limit 1          |
| 2011-02-24 14:42:30 | lwdba[lwdba] @  [127.0.0.1] |         4 | 106451130 | Query        | show create table mysql.general_log       |
| 2011-02-24 14:43:54 | lwdba[lwdba] @  [127.0.0.1] |         4 | 106451130 | Query        | SET @old_log_state = @@global.general_log |
| 2011-02-24 14:44:00 | lwdba[lwdba] @  [127.0.0.1] |         4 | 106451130 | Query        | SET GLOBAL general_log = 'OFF'            |
+---------------------+-----------------------------+-----------+-----------+--------------+-------------------------------------------+
9 rows in set (0.00 sec)

iml-db10:3306 (DB (none)) :: show create table mysql.general_log\G
*************************** 1. row ***************************
       Table: general_log
Create Table: CREATE TABLE `general_log` (
  `event_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `user_host` mediumtext NOT NULL,
  `thread_id` int(11) NOT NULL,
  `server_id` int(10) unsigned NOT NULL,
  `command_type` varchar(64) NOT NULL,
  `argument` mediumtext NOT NULL,
  KEY `event_time` (`event_time`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='General log'
1 row in set (0.00 sec)

এখন, আপনি টাইমস্ট্যাম্পের সাহায্যে কোয়েরি করতে পারেন এবং যুক্তি ক্ষেত্রের স্পেসফিক টোকেনগুলি সন্ধান করতে পারেন।

উদাহরণস্বরূপ, আমি যে নির্বাচনটি করেছি সেটির নোটিশ লাইন 4। আমার লগ ইন হিসাবে তর্ক ক্ষেত্রের মধ্যে রেকর্ড করা হয়েছিল lwdba@127.0.0.1 on। আপনি এগুলি ট্র্যাক করতে পারেন।

যদি জেনারেল খুব বড় হয়ে যায় তবে (বিশ্বাস করুন এটি খুব দ্রুত খুব দ্রুত পেয়ে যাবে)

কি করো ???

  1. শাটডাউন মাইএসকিএল
  2. জেনারেল_লগ.ফ্রিম, জেনারেল_লগ.এমওয়াইডি, এবং জেনারেল-লগ.এমওয়াইআইকে একটি আলাদা (এবং হোপফুল বড়) ডিস্ক মাউন্টে নিয়ে যান।
  3. / Var / lib / mysql / mysql থেকে জেনারেল_লগ.ফ্রিম, জেনারেললগ.এমওয়াইডি এবং জেনারেল-লগ.এমওয়াইএলে তিনটি সিমলিংক তৈরি করুন
  4. মাইএসকিএল ডাউনলোড করুন: নতুন ডিস্ক মাউন্টে মাইএসকিএল জেনারেল_লগ.ফ্রিম জেনারেল_লগ.এমওয়াইডি জেনারেল_লগ। এমওয়াইআই
  5. ক্লাউন মাইএসকিএল: মাইএসকিএল জেনারেল_লগ.ফ্রিম জেনারেল_লগ.এমওয়াইডি জেনারেল_লগ.এমওয়াইআই / ইন / ওয়ার / লিবি / মাইএসকিএল / মাইএসকিএল প্রতিলিপি
  6. MySQL ব্যাক আপ শুরু করুন

বিটিডব্লিউ একবার আপনার সাধারণ লগ অফলাইনে নেওয়ার পরে, আপনি এইগুলি পৃথক লগইনগুলি সংগ্রহ করতে চালাতে পারেন যা মাইএসকিএলডে কিছু করেছিল:

SET SQL_LOG_BIN=0;
use mysql
DROP TABLE IF EXISTS audit_user_host;
CREATE TABLE audit_user_host
(
    user_host VARCHAR(32),
    PRIMARY KEY (user_host)
) ENGINE=MyISAM;
SHOW CREATE TABLE audit_user_host\G
INSERT IGNORE INTO mysql.audit_user_host SELECT user_host FROM mysql.general_log;
SELECT COUNT(1) FROM mysql.audit_user_host;

আমার কাছে 3 ডিবি সার্ভার সহ একটি ক্লায়েন্ট রয়েছে। ডিবি সার্ভারের সাথে আইচের এতে 1,000,000,000 (1 বিলিয়ন [হাজার মিলিয়ন]) লাইন রয়েছে। উপরের স্ক্রিপ্টটি সম্পূর্ণ হতে প্রায় 2.5 ঘন্টা সময় নিয়েছে। অডিট_ইউজার_হোস্ট টেবিলটি 27 স্বতন্ত্র লগইন সহ শেষ হয়েছে।

আপনার যেতে ভাল হওয়া উচিত।

এই এক সাথে মজা করুন, প্রত্যেকে !!!


দুর্দান্ত নিবন্ধ! শুধু আমার পরীক্ষা ভাগ করে নিচ্ছি। আমি টেবিলটি মাইএসকিএল.জেনারাল_লগের নামকরণের চেষ্টা করেছি এবং পরিষ্কার করার উদ্দেশ্যে টেবিলটি বিভাজন করেছি কিন্তু সারণীতে লগইন করব না। সুতরাং আমি এটিকে আবার বিভাজনবিহীন মাইআইসাম টেবিলে স্যুইচ করেছি। ধন্যবাদ!

1

ম্যানুয়ালি অনেকগুলি কাজ করার পরিবর্তে, কেবল অডিট প্লাগইন ইনস্টল করুন যা ব্যবহারকারী পর্যায়ে আরও অন্তর্দৃষ্টি দেয়

http://www.mysql.com/products/enterprise/audit.html

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


0

@ স্টাটিচিপ্পো
কীভাবে মাইএসকিউএলে নিরীক্ষণ লগিং ইনস্টল করবেন।
+ নিরীক্ষণ লগিং কেবল মাইএসকিউএল এন্টারপ্রাইজ সমর্থন করে
+ আপনি মাইএসকিউএল সম্প্রদায়ের উপর নিরীক্ষণ লগিং ইনস্টল করতে পারেন:
1. ফাইল অডিট_লগ। অনুলিপি করে আপনি মাইএসকিউএল এন্টারপ্রাইজ ট্রায়াল ইনস্টল করতে পারেন, তারপরে ফাইল অডিট_লগ.সু মাইএসকিউএল সম্প্রদায়ে অনুলিপি করুন।
২ / usr / lib64 / mysql / প্লাগইন হিসাবে প্লাগইন_ডির অনুলিপি_লগ.এই অনুলিপি করুন বা আপনি প্লাগইন ডিরটি দেখতে পারেন: মাইএসকিএল
কনসোলে যান: মাইএসকিএল> '% প্লাগইন%' এর মতো গ্লোবাল ভেরিয়েবলগুলি দেখান;
৩. নিরীক্ষণ
লগিংটি ইনস্টল করুন : mysql> ইনস্টল করুন প্লাগইন অডিট_লগ সোনামে 'অডিট_লগ.সো';
mysql> ভ্যারিয়েবলগুলি দেখান 'অডিট_লগ%';
4. আউটপুট নিরীক্ষণ লগিং:
লেজ -f /var/lib/mysql/audit.log

অনেক ধন্যবাদ.

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