joezine's blog

Lemon Meringue Tart

Submitted by joezine on Sat, 07/03/2010 - 16:45

ไม่ได้ทำเอง รู้แต่ว่าอร่อยดี

IMG_7944

IMG_7948

ตามชื่อ ใส่ Lemon เป็นไส้อยู่ข้างใน ทำให้ได้รสเปรี้ยว Lemon แต่ Lemon แพงได้ใจมาก (ลูกละ 30 บาท!!)

Tags: | »

High Performance MySQL : Security

Submitted by joezine on Fri, 07/02/2010 - 02:40

มี 3 แบบ

  • Authentication (มี login เป็นเจ้าของ MySQL)
  • Authorization (ยอมให้ Shutdown ? เป็น Global Privileges)
  • Access Control (เกี่ยวกับข้อมูล ว่ายอมให้ Read/Write ต่างจาก Global Privileges เพราะเข้าถึงระดับ Table, Column ได้ด้วย)
  • Privileges and Permissions

Account

Privileges

  • Object-specific privileges สำหรับ grant พวก table, view
  • Global Privileges สำหรับสามารถใช้ command ได้บ้างอัน เช่น shutdown, flush, show

The Grant Tables

  • เป็นหัวใจของ security system
  • grant, revoke, drop user, flush
  • grant table สามารถทำได้โดยมีรายละเอียด คือ user, db, host, table_priv, column_priv, procs_priv

How MySQL checks Privileges

หลักการ

mysql

Adding, Removing, and Viewing Grants

  • Command “SHOW GRANTS;” สำหรับดู Permission ของ users
  • ถ้าต้องการเห็น GRANT สำหรับ User ก็ “SHOW GRANTS FOR root;”
  • ถ้าต้องการเห็น GRANT สำหรับ User และ Host ก็ “SHOW GRANT FOR root@%;” (any host)
  • ถ้าเปลี่ยน Privileges แล้ว จะไม่เปลี่ยนแปลงจนกว่าจะ restart service หรือ run “FLUSH PRIVILEGES;”

Setting Up MySQL Privileges

เอาแค่ Backup User พอ GRANT SELECT, LOCK TABLES, FILE ON . TO ‘backup’@’localhost’ IDENTIFIED BY ‘PASSWORD’;

Privileges and Performance

  • Privilege เยอะ ไม่ส่งผลกระทบกับ Performance
  • การ Query เพื่อดึงข้อมูลใน Column ที่ Privilege นั้นทำไม่ได้ แนะนำให้ Query จาก View
  • ใช้ skip_name_resolve บน my.cnf เพื่อเพิ่ม Speed ในการ connect มากยิ่งขึ้น (ไม่ต้อง resolve จาก DNS ในการ connect กับ host) ลด DOS ไปยัง DNS Server ด้วย
  • สามารถใช้ IP แทนก็ได้ หรือจะใช้ IP แบบ Wildcard (192%) ได้ด้วยเช่นกัน

อื่นๆ

  • ห้ามเข้าโดยไม่ใส่ password (ใส่ password ใน my.cnf)
  • password ใน mysql.user ห้ามว่าง
  • ปิด anonymous users
  • อย่า GRANT SUPER privilege โดยมั่วซั่ว

Operating System Security

  • อย่า Run MySQL ด้วย Privilege Account
  • ทำ OS ให้ Up-to-date
  • ห้ามให้ Account Admin ของ DB หรือ Server กับ Developer
  • มีการ Audit Server
  • แยกงาน Production ออกจากงาน Development หรือ Testing ด้วยเครื่องที่ต่างกัน
  • ใช้อะไรก็ตามที่ให้ปลอดภัย เช่น chrooting, jails, zones, หรือ Virtual Server เพื่อ Isolate DB
  • Backup ข้อมูลในเครื่องที่ต่างกัน

Network Security

  • อ่าน Building Internet Firewalls
  • อ่าน TCP/IP Network Administration

Localhost-Only Connections

  • ปิดการเข้าผ่าน Network ให้ใช้ PHPMyAdmin แทน
  • ใน my.cnf ในส่วนของ [mysqld] ให้ใส่ option คือ skip_network และ bind_address=127.0.0.1

Firewalling

  • ใช้ authorize host (GRANT) ไม่ให้ Hosting เข้ามาใช้งาน (ผ่าน Command Line)
  • Limit Port โดย Allow TCP Port 3306 และ Remote (SSH - 22)
  • อย่าลืม Set Firewall ด้วย (เพราะ IP อื่นที่อยู่วงเดียวกันจะสามารถเข้ามาได้)
  • เอา MySQL ไปไว้ใน DMZ เพราะถ้าติดต่อกับ Web Application ถึงยังไงก็ไม่ปลอดภัย 100% ให้ย้ายไปอยู่ใน Network ของตัวเอง และไม่ให้เข้าจากภายนอก (3306)
  • ถ้าต้องสื่อสารกับ MySQL ผ่าน Public Network อาจถูก Sniff ได้ ให้ใช้เครื่องมือ เช่น

    • VPN
    • SSL ใน MySQL (SHOW VARIABLES LIKE ‘have_openssl’;) : มากับ MySQL 4.1 เป็นต้นไป
    • SSH tunneling (กรณี MySQL Version ต่ำกว่า 4.1) ให้ login ผ่าน SSH จะช่วย Encrypt
  • ใช้ TCP Wrappers

  • ใช้ Automatic Host Blocking

Data Encryption

  • Encrypted Password ของ Application โดยการ Hashing อาจใช้ MD5 หรือ SHA1
  • Encrypted Filesystems
  • Encrypted ในระดับ Application Layer เป็นวิธีที่ยืดหยุ่นได้เยอะมาก เช่น Encrypted โดย algorithm ซึ่ง MySQL จะไม่รู้ว่ากำลัง Encrypted หรือใช้ AES_DECRYPT / AES_ENCRYPT ช่วย (Funtion ใน MySQL)

Note

DMZ (Demilitarized Zone) : คือ Zone ที่อันตราย ใครๆก็สามารถเห็น เช่น Web Server, DNS Server

Tags: | »

[Android] Solo

Submitted by joezine on Thu, 07/01/2010 - 01:36

ประทับใจครับ :D

มีอีกนะ

Tags: | »