'mysql'에 해당되는 글 57건

  1. 2011.08.09 MySQL Query cache 의 구조
  2. 2011.05.25 MysqlPasswordAuditor : Mysql Password Recovery & Auditing
  3. 2011.05.16 NessusDB(Nessus XMLv2 parser) 1.4.2 release
2011.08.09 17:48

MySQL Query cache 의 구조

작동 방식
  • Query cache는 system-wide한 글로벌 메모리 공간
  • Query cache는 Full scan등과 같이 큰 공간이 필요한 결과는 캐시하지 않도록 
    캐시 최대 사이즈를 제한(query_cache_limit)
  • Query의 결과를 캐시하기 위해서 메모리의 공간을 할당 받을 때, 
    query_cache_min_res_unit 단위로 할당 받으며 (필요시 더 추가적으로), 
    캐시 작업이 완료된 이후 남은 미사용 공간은 반납하게 된다.
  • Query cache는 테이블 단위로 Invalidate 되기 때문에, 
    테이블이 상당히 자주 변경된다면 cache의 효율이 떨어질 수 있다.
  • 일반적으로는 Query cache의 매치 기준은 Query 문장이 동일한지(대소문자 및 공백까지) 비교하는 방식이며 InnoDB의 경우에는 레코드 기반의 락을 사용하며 MVCC의 제어가 필요하기 때문에 
    재사용 가능한지 판단은 Query 문장뿐만 아니라 Transaction Id로 레코드 접근성까지 비교해야 함
  • Query cache의 관리 비용은 얻는 효과에 비하면 아주 미미하지만, 
    가끔은 캐시 내용을 invalidate 하는데 상당히 많은 비용이 필요할 수도 있음
  • 일반적으로 Query cache는 아래의 경우 상당히 도움이 된다.
     - 테이블이 자주 변경되지 않는 경우
     - 쿼리의 실행 과정은 복잡하고 많은 처리가 필요하지만 결과 셋의 사이즈가 작은 경우
     - 동일 쿼리가 자주 실행되는 경우
  • Query cache의 Hit-Ratio는 계산하는 MySQL의 Status 값 Key_reads를 Status값 Key_read_requests로 나누는 방법으로 계산하지만, 이 값이 90%면 좋고 20%면 나쁘다는 단순한 판단은 힘듬 
      -> Query cache의 효율성 판단은 실제 운영 시스템에서 활성화/비활성화를 비교해보는 것이 제일 좋을 듯 하지만, 운영 시스템이므로 주의가 필요
      -> query_cache_size 설정 변수는 전역이면서 동적 변수이기 때문에 실시간으로 변경이 가능하므로 서비스 영향 없이 설정 변경 후 비교 가능 
         (주의해야 할 것은 기존과 동일하든지 다른 값이든지 일단 한번 설정이 되면 지금까지의 캐시된 내용은 모두 제거됨)

메모리 할당 방식

  • 1) 그림의 아래 부분 처럼 각 색깔별로 A,B,C,D,E 쿼리들이 실행되어서, 1) 번과 같은 상태의 Query cache가 있다고 가정해보자
    - 그림에서 하나의 영역은 Query cache block 으로 일반적으로 "query_cache_min_res_unit"로 정의된 사이즈이며, 
    - <1>번이라고 적힌 영역은 캐시될 ResultSet 을 저장하기 위해서 "query_cache_min_res_unit" 크기의 메모리 블럭을 할당 받아서 사용하다가 남는 공간은 다시 반납하게 되는데, 이 때문에 발생한 빈 공간임 (Fragmentation이라고도 하며, 이런 공간들은 쉽게 재활용되지 못함)
    - 뒷 부분의 흰색 블럭들은 아직 미사용된 블럭들을 표시함 
  • 2) 이 상태에서 아래와 같이 tab2와 tab4를 변경하는 쿼리가 실행되면, 해당 테이블을 참조하는 모든 Query cache는 모두 제거됨
    - UPDATE tab2 SET ... WHERE ...
    - UPDATE tab4 SET ... WHERE ... 
    이런 공간들은 주위의 미사용 영역들과 병합되어서, 나중에 재활용될 수 있음 
    (이런 공간들도 모두 일반적으로 Fragmentation 이라고 표현함) 
  • 3) 아래 명령을 이용하여 이렇게 발생한 Query cache의 Fragmentation을 제거하고, 
    미 사용 영역을 모두 연속된 공간으로 만들어줄 수 있음
    - FLUSH QUERY CACHE;
    이 명령은 Query cache 전체에 대해서 변경되지 않도록 락을 걸기 때문에 조심해서 실행해야 함 
  • 이러한 Query cache 의 block 할당에 관련된 정보는 MySQL의 상태값으로 확인 가능함
    - Qcache_total_blocks   : 무조건 할당된 공간까지의 모든 block들(사용중이든 아니든)의 수를 보여줌
    - Qcache_free_blocks    : 미사용 block들 (Fragmentation이라고 표현한 영역들)의 수를 보여줌
    - 1)번 그림 : Qcache_total_blocks -> 16,  Qcache_free_blocks -> 2
    - 2)번 그림 : Qcache_total_blocks -> 16,  Qcache_free_blocks -> 3
    - 3)번 그림 : Qcache_total_blocks -> 11,  Qcache_free_blocks -> 1

제약 사항 
  • 아래와 같은 형태로 실행되는 쿼리는 Query cache를 사용하지 못함
    - PreparedStatement로 실행되는 쿼리 (MySQL 5.1.17 이후 부터는 Query cache를 사용 가능)
    - Stored Procedure, Function, Trigger 내부에서 실행되는 쿼리
    - Sub Query 형태로 실행되는 쿼리

관련 설정 변수
  • query_cache_limit 
    이 값으로 설정된 사이즈 이상의 결과 셋을 가지는 경우에는 Query cache에 캐시하지 않도록 설정
  • query_cache_min_res_unit 
    Query cache에서 결과 셋을 캐시하기 위한 메모리 공간을 할당 받을 때 사용하는 메모리 할당 최소 단위 사이즈
  • query_cache_size 
    Query cache의 전체 사이즈를 설정하며 1024Byte의 배수로 설정, 
    Query cache를 완전히 비활성화하기 위해서는 이 변수의 값을 0으로 설정해야 한다.
  • query_cache_type 
    Query 의 결과 셋을 어떻게 저장할지를 결정함, 
    - OFF는 캐시하지 않음, 
    - ON은 SQL_NO_CACHE 힌트가 없는 SELECT 문장의 결과 셋은 캐시 대상으로 가정, 
    - DEMAND 는 SQL_CACHE 힌트가 SELECT 문장에 있는 결과 셋만 캐시 대상으로 가정
  • query_cache_wlock_invalidate 
    어떤 Client가 MyISAM 테이블에 Write lock을 가지고 있는 경우, 
    다른 Client가 Query cache에서 결과를 가져갈 수 있는 SELECT문장을 실행하는 것은 Block되지 않는데, 이 값을 TRUE로 설정하면 결과를 Query cache에서 가져갈 수 있다 하더라도, 다른 Client는 대기해야 하도록 만든다.


출처 : http://intomysql.blogspot.com/

Trackback 0 Comment 0
2011.05.25 18:52

MysqlPasswordAuditor : Mysql Password Recovery & Auditing

About MysqlPasswordAuditor
 

MysqlPasswordAuditor is the FREE Mysql password recovery and auditing software. Mysql is one of the popular and powerful database software used by most of the web based and server side applications.
If you have ever lost or forgotten your Mysql database password then MysqlPasswordAuditor can help in recovering it easily. It can also help you to audit Mysql database server setup in an corporate environment by discovering the weak password configurations. This makes it one of the must have tool for IT administrators & Penetration Testers. 

MysqlPasswordAuditor is very easy to use with the simple dictionary based password recovery method. By default it includes small password list file, however you can find more password dictionary files at OpenWall collection. You can also use tools like Crunch, Cupp to generate custom password list files on your own and then use it with MysqlPasswordAuditor.

MysqlPasswordAuditor works on wide range of platforms starting from Windows XP to latest operating system Windows 7.

Features of MysqlPasswordAuditor

Here are some of the special features of MysqlPasswordAuditor
  • Free and Simple software to Recover/Audit Mysql Password.
  • Very useful for IT administrators & Penetration Testers
  • Dictionary based Password Recovery method
  • Detailed statistics such as  tested passwords, elapsed time, progress bar is displayed during Audit operation.
  • Simple, easy to use GUI interface
  • Integrated Installer for local Installation & Uninstallation. 

IInstalling MysqlPasswordAuditor

MysqlPasswordAuditor comes with Installer which can help you in local installation & un-installation. It has intuitive setup wizard (as shown in the screenshot below) which guides you through series of steps in completion of installation. At any point of time you can use Uninstaller to remove the software from the system.


Using MysqlPasswordAuditor

MyMysqlPasswordAuditor is GUI application which is easy to use even for beginners.

Here are simple steps
  • Launch MysqlPasswordAuditor on your system from installed location.
  • Enter your Mysql server IP address, port number, username for which to recover the password.
  • Next select or drag & drop the password list file (you can find one in the installed location)
  • Finally click on 'Start Audit' button to start the Mysql Password recovery operation.
  • You will see detailed statistics during password audit operation
  • On success, it will display the recovered password as shown in the screenshot below.
  • Else you will see the failure message and you can then try with bigger password list file. 

Screenshots of MysqlPasswordAuditor

Here are the screenshots of MysqlPasswordAuditor
 
ScScreenshot 1:MysqlPasswordAuditor is showing the recovered Mysql Password



출처 : securityxploded.com

 

Trackback 0 Comment 0
2011.05.16 18:59

NessusDB(Nessus XMLv2 parser) 1.4.2 release

Usage: Viewing the Data
Viewing the data is as easy as using any standard database client for the database you are using. As seen in these screenshots with Sequel Pro:


NessusDB

NessusDB is Nessus parser, that converts the generated reports into a ActiveRecord database, this allows for easy report generation and vulnerability verification.

Version 1.4.2 is the current release.

Requirements

Ruby

NessusDB has been tested with ruby-1.8.7-p334, ruby-1.9.1-p431, ruby-1.9.2-p180. Please try to use one of these versions if possible. I recommend using RVM to setup your ruby environment you can get it here.

RubyGems

NessusDB relies heavily on RubyGems to install other dependencies I highly recommend using it. RubyGems is included by default in the Ruby 1.9 branches.

  • libxml
  • rails
  • yaml
  • logger
  • rmagick
  • gruff
  • prawn
  • mysql

Developmental Requirements

These are all available through RubyGems. The should be installed automatically when you install nessusdb, If not this command will install them all:

% gem install rmagick gruff prawn sham faker rspec rcov machinist yard mysql libxml-ruby rails sqlite3 logger yaml

You my need sudo/root access depending on your system setup

Any database that ActiveRecord supports should work. NessusDB has been tested with MySQL and SQLite3.

Installation

Installation is really easy just gem install!

% gem install nessusdb

Database Setup

% nessusdb --create-config
% $EDITOR nessusdb.cfg
% nessusdb --create-tables
  1. Generate the nessusdb.cfg file.
  2. Edit the nessusdb.cfg file, filling in the variables as needed. Please see ActiveRecord for more details.
  3. Migrate the database schema.

Parsing Nessus Output

% nessusdb report1.nessus [report2.nessus ...]
  1. Parse the files by passing their names on the command line.

Viewing Data

The data can be viewed with a query browser available for your database. A Rails front end will be available in the future.

Generating Reports

To generate a technical summary report please execute the following after the the data is parsed into the database.

% nessusdb -t "TEMPLATE_PATH" -o "REPORT_NAME.pdf"

NessusDB Console

Using the NessusDB Console is just like using Rails. You can access all of the ActiveRecord models directly and pull specific data from each model. Like SQL only easier!

[hammackj@taco:~/Projects/public/nessusdb]$ ../bin/nessusdb --console

                                   _ _       
 _ __   ___  ___ ___ _   _ ___  __| | |__  
| '_ \ / _ \/ __/ __| | | / __|/ _` | '_ \ 
| | | |  __/\__ \__ \ |_| \__ \ (_| | |_) |
|_| |_|\___||___/___/\__,_|___/\__,_|_.__/ 

NessusDB Console v1.4.2
>> Host.first
=> #<NessusDB::Models::Host id: 1, report_id: 1, name: "10.69.69.74", os: "Linux Kernel 2.6 on Debian 4.0 (etch)", mac: "XX:XX:XX:XX:XX:XX", start: "2011-04-20 16:29:37", end: "2011-04-20 16:32:14", ip: "10.69.69.74", fqdn: "redada.hammackj.net", netbios: "REDADA", local_checks_proto: nil, smb_login_used: nil, ssh_auth_meth: nil, ssh_login_used: nil, pci_dss_compliance: nil, notes: nil>

Templates

Several templates are included:

  1. graphs.rb - several graphs written to disk as png's and as a complete pdf
  2. technical_findings.rb - a detailed pdf of the high and medium findings from the assessment
  3. finding_statistics.rb - this is a pdf summary of the assessment
  4. assets.rb - this is a summary of all the hosts found during the scan
  5. pci_compliance.rb - this generates of list of hosts that pass or failed pci/dss auditing
  6. exec_summary.rb - A sample executive summary report
  7. executive_summary.rb - A more detailed sample executive summary report
  8. findings_summary.rb - A summary of all the findings report
  9. ms_update_summary.rb - a summary of all the windows update enable hosts
  10. ms_patch_summary.rb - a summary of all the missing windows patches
  11. cover_sheet.rb - a example coversheet report
  12. findings_host.rb - list of findings per host

The templates are located in the nessusdb/templates folder, where ever the gem was installed. On a typical Mac OSX install the path is:

[hammackj@taco:~]$ ruby -v
ruby 1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0]
[hammackj@taco:~]$ l /Library/Ruby/Gems/1.8/gems/nessusdb-1.4.0/lib/nessusdb/templates/
total 40
drwxr-xr-x  7 hammackj  admin   238B Oct 21 19:24 ./
drwxr-xr-x  8 hammackj  admin   272B Oct 21 19:24 ../
-rw-r--r--   1 hammackj  staff   695B Mar  9 15:59 assets.rb
-rw-r--r--   1 hammackj  staff   691B Mar  9 15:59 cover_sheet.rb
drwxr-xr-x   3 hammackj  staff   102B Mar  9 15:59 data/
-rw-r--r--   1 hammackj  staff   2.0K Mar  9 15:59 exec_summary.rb
-rw-r--r--   1 hammackj  staff   6.7K Mar  9 15:59 executive_summary.rb
-rw-r--r--   1 hammackj  staff   724B Mar  9 15:59 finding_statistics.rb
-rw-r--r--@  1 hammackj  staff   1.2K Mar 17 14:55 findings_host.rb
-rw-r--r--   1 hammackj  staff   1.5K Mar  9 15:59 findings_summary.rb
-rw-r--r--   1 hammackj  staff   831B Mar  9 15:59 graphs.rb
-rw-r--r--   1 hammackj  staff   1.2K Mar  9 15:59 host_summary.rb
-rw-r--r--   1 hammackj  staff   663B Mar  9 15:59 ms_patch_summary.rb
-rw-r--r--   1 hammackj  staff   924B Mar  9 15:59 ms_update_summary.rb
-rw-r--r--   1 hammackj  staff   1.6K Mar  9 15:59 pci_compliance.rb
-rw-r--r--   1 hammackj  staff   2.8K Mar  9 15:59 technical_findings.rb
[hammackj@taco:~]$ 

The templates are written in ruby using prawn, they are fairly easy to make. I will add any templates as requested.

Issues

If you have any problems, bugs or feature requests please use the github issue tracker.

Contact

You can reach me at jacob[dot]hammack[at]hammackj[dot]com.


Trackback 1 Comment 0