วันเสาร์ที่ 21 กรกฎาคม พ.ศ. 2550

Entity-Relation Model and Enhanced Entity-Relation Model : Part III

The Enhanced Entity-Relationship Model

แนวคิดพื้นฐานของ E-R model เพียงพอสำหรับการนำไปใช้ในการสร้างโครงสร้างฐานข้อมูลในโปรแกรมประยุกต์ในฐานข้อมูลธุรกิจทั่วๆไป แต่ยังไม่เพียงพอในการนำเสนอข้อมูลความต้องการในงานที่ใหม่กว่า เช่น งานด้านวิศวกรรม (CAD/CAM Database) ฐานข้อมูลภาพ (Image and Graphic DB) ฐานความรู้ในงานด้านปัญญาประดิษฐ์ (Knowledge base for AI) การทำให้ครอบคลุมส่วนเพิ่มขึ้นจำเป็นที่จะต้องพัฒนา แนวคิดในการออกแบบตัวแทนที่มีความเชื่อมโยงกับความหมายของคำ (Semantic modeling Concept)
E-R model ที่สนับสนุน Semantic Modeling Concept นี้ก็คือ Enhanced E-R Model
Enhanced Entity Relationship model มี E-R model เป็นพื้นฐานรวมกับส่วนที่เพิ่มเติมคือแนวคิดของ specialization/generalization และ categorization.

Semantic : adj : Connected with the meanings of words

The Concepts of Specialization/Generalization

แนวคิดของ Specialization/Generalization นั้นเกี่ยวข้องกับ Subclass และ SuperClass และ
the process of attribute inheritance.


SuperClass และ SubClass
Superclass: An entity set that includes distinct subclasses that require to be
represented in a data model.
Subclass: A subclass is also an entity set that has a distinct role and is
also a member of a superclass.

Attribute Inheritance
คุณสมบัติที่จำเป็นของ Entity ไม่ว่ามีระดับสูงกว่าหรือต่ำกว่า สร้างโดย Specailization/Gernalization นั้นคือ Attribute Inheritance (การสืบทอด Attribute)

Specialization(Top-down Approach)

หาและระบุความแตกต่างระหว่าง Object ที่อยู่ใน Class เดียวกันซึ่งสามารถถูกแบ่งได้มากกว่า 1 หรือมากกว่า
Generalization(Bottom-up Approach)
ลดความแตกต่าง Object แต่ละตัวโดยระบุ Common feature

Contraints on Specialization and Generalization
มีข้อกำหนดอยู่ 2 ประเภท ที่พบบนความสัมพันธ์ระหว่าง Superclass และ Subclass ไม่ว่าจะเป็นการทำ Specialization หรือ Generalization คือ Disjointness Constrain และ Completeness Constrain

Disjointness Constrain
เป็นข้อกำหนดเกี่ยวกับ subclass ว่า Entity ใดๆ จะเป็นสมาชิกอยู่ได้ใน Entity Subclass เดียวเท่านั้น

  • Disjoint ต้องการให้ Entity ที่ไปอยู่ในระดับต่ำกว่านั้น อยู่ได้แค่ Entity Set เดียว
  • Overlapping ต้องการให้ Entity ที่ไปอยู่ในระดับต่ำกว่านั้นอาจอยู่ได้มากกว่า 1 Entity Set

Completeness Constrain

  • Total generalization or specialization : Each higher-level entity must belong
    to a lower-level entity set. (แต่ละ Entity ที่อยู่ระดับสูงกว่าต้องไปอยู่ใน Entity ที่ต่ำกว่า)
  • Partial generalization or specialization : Some higher-level entities may not
    belong to any lower-level entity set. (Entity ที่อยู่ระดับสูงกว่าอาจจะไม่ไปอยู่ใน Entity ระดับต่ำกว่า)

Example


Total Disjoint (Complete)

จาก E-R Diagram แสดงว่า บังคับให้นิสิตทำงานอย่างใดอย่างหนึ่ง เมื่อแปลงเป็น Schema จะได้ 2 แบบ

Schema แบบที่ 1

  1. Student (SID,SName,GPA)
  2. Consultant(SID,SubCode,RatePerHour)
  3. LabAssistant(SID,LabName,Salary,Function)

Schema แบบที่ 2

  1. Consultant(SID,SName,GPA,Subcode,RatePerHour)
  2. LabAssistant(SID,SName,GPA,LabName,Salary,Function)

Partial Disjoint


นิสิตเลือกทำงานหรือไม่ทำก็ได้ ถ้าทำจะทำได้อย่างเดียว ใช้ Schema แบบที่ 1 เท่านั้น


Total Overlap



นิสิตทุกคนต้องทำงานโดย ทำทั้งสองอย่างก็ได้ ใช้ Schema แบบที่ 1 ถ้าใช้ Schema แบบที่ 2 จะเกิดข้อมูลซ้ำซ้อน ถ้านิสิตคนนั้นทำงาน 2 อย่างเป็นทั้ง Consultant และ LabAssistance



Partial Overlap


นิสิตทำงานหรือไม่ก็ได้ ถ้าทำอาจจะทำสองอย่างก็ได้ ใช้ Schema แบบที่ 1

วันศุกร์ที่ 20 กรกฎาคม พ.ศ. 2550

Conversion Problems

Exercise Converting ERD to Relation Tables

1.


Office(OfficeID,MgrName,Phone,Address);

Agent(AgentID,Name,Phone,OfficeID)
foreignkey (OfficeID) references Office

Owner(SSN,Name,SpouseName,Profession,SpouseProfession)

Home(HomeID,Street,City,State,Zip,NoBedrms,NoBaths,SqFt,OwnOccupied,Commission,SalesPrice,SSN,AgentID)
foreignkey (AgentID) references Agent
foreignkey (SSN) references Owner



2.


Part(PartNo,PartName);

Supplier
(SuppNo,SuppName);

Project
(ProjNo,ProjName);

Uses
(PartNo,SuppNo,ProjNo);
foreignkey (PartNo) references Part
foreignkey (SuppNo) references Supplier

foreignkey (ProjNo) references Project




3.

Statement(StmtNo,Date,AcctNo);

StmtLine(StmtNo,LineNo,MerName,Amt,TransDate);
foreignkey (StmtNo) references Statement

6.

Agent(AgentID,Name)

Home(HomeNo,Address)

Lists(HomeNo,Agent,Commission)
foreignkey (AgentID) references Agent
foreignkey (HomeNo) references Home

7.

Project(ProjNo,ProjName)

Specialty(SpecNo,SpecName)

ProjectNeeds(ProjNo,SpecNo)
foreignkey (ProjNo) references Project
foreignkey (SpecNo) references Specialty

Contractor(ContrNo,ContrName,SpecNo)
foreignkey (SpecNo) references Specialty

ProvidedBy(ProjNo,SpecNo,ContrName)
foreignkey (ProjNo,SpecNo) references ProjectNeeds
foreignkey (ContrName) references Contractor

8.



แบบที่ 1

Customer(Customer,.....)

Employee(Empno,.......,SupEmpNo)
foreignkey (SupEmpNo) references Employee

Product(ProdNo,.....)

Contains(ProdNo,OrdNo,Qty)
foreignkey (ProdNo) references Product
foreignkey (OrdNo) references Order


Order(OrdNo,........,CustNo,EmpNo)
foreignkey (CustNo) references Customer
foreignkey (EmpNo) references Employee

แบบที่ 2


Employee(EmpNo,.....)
Manager(EmpNo,SupEmpNo)
foreignkey (EmpNo) references Employee
foreignkey (SupEmpNo) references Employee





9.


Provider(ProvNo,....)

Physician(ProvNo,.....)
foreignkey (ProvNo) references Provider


Nurse(ProvNo,....)
foreignkey (ProvNo) references Provider


Patient(PatNo,....)
Item(ItemNo,...)


Visit(VisitNo,PatNo,ProvNo)
foreignkey (PatNo) references Patient
foreignkey (ProvNo) references Physician


Visitdetail(VisitNo,VisitDetailNo,ProvNo,ItemNo,...)
foreignkey (VisitNo) references Visit
foreignkey (ProvNo) references Nurse
foreignkey (ItemNo) references Item

วันจันทร์ที่ 16 กรกฎาคม พ.ศ. 2550

Entity-Relation Model and Enhanced Entity-Relation Model : Part I

Oultine

  • Understanding Relationships
  • Notation basics
  • Generalization/Specialization hierarchies

Data Models
Data model เป็นแบบจำลองข้อมูลเพื่อนำเสนอรายละเอียดเกี่ยวกับโครงสร้างและความสัมพันธ์ระหว่างข้อมูลอยู่ในรูปของแนวคิดหรือตรรกะ ที่ยากแก่การเข้าใจให้อยู่ในรูปแบบมาตราฐาน
Data Model : a collection of conceptual tools for describing data,
data relationships, data semantics, and consistency constraints.

notation : a system of written symbols used especially in mathematics.
semantic : adjective = connected with meanings of words.

การจะออกแบบฐานข้อมูลนั้นจะต้องมีกระบวนการทำ User Requirement (อาจารย์บอก 6-8 เดือน) เก็บความต้องการของผู้ใช้และกฎเกณฑ์ของธุรกรรมต่างในองค์กร (Business Rules) จากนั้นก็นำ User Requirement มาออกแบบ E-R Model แล้วจึงส่งเจ้าของงาน



User Requrement ----> E-R Models ----> Customer



เมื่อได้ E-R Model มาแล้วเราจะมาออกแบบเป็น Relational Model (ตาราง 2 มิติ) ซึ่งจะมีกฏเกณฑ์ตายตัว E-R Model เป็น Real world ขององค์กร ซึ่งใช้ออกแบบในระดับหลักการ



E-R Model



อี-อาร์โมเดล เป็นแบบจำลองข้อมูลซึ่งแสดงถึงโครงสร้างของฐานข้อมูลที่เป็นอิสระจากซอฟต์แวร์ที่จะใช้ในการพัฒนาฐานข้อมูล รวมทั้งรายละเอียดและความสัมพันธ์ระหว่างข้อมูลในระบบในลักษณะที่เป็นภาพรวม ทำให้เป็นประโยชน์อย่างมากต่อการรวบรวมและวิเคราะห์รายละเอียด ตลอดจนความสัมพันธ์ของข้อมูลต่าง ๆ โดยอี-อาร์โมเดลมีการใช้สัญลักษณ์ต่างๆ ที่เรียกว่า Entity Relationship Diagram หรือ อี-อาร์ไดอะแกรม แทนรูปแบบของข้อมูลเชิงตรรกะขององค์กร จึงทำให้บุคลากรที่เกี่ยวข้องกับระบบฐานข้อมูลสามารถเข้าใจลักษณะของข้อมูลและความสัมพันธ์ระหว่างข้อมูลได้ง่ายและถูกต้องตรงกัน ระบบที่ได้รับ การออกแบบจึงมีความถูกต้องและสอดคล้องกับวัตถุประสงค์ขององค์กร

องค์ประกอบของ E-R Model

  1. Entity set เป็นกลุ่มของ Entities ที่มีชนิดเดียวกันใช้ Attributes ร่วมกัน
    Entity คือ สิ่งของหรือวัตถุที่เกี่ยวข้องใน Real World ขององค์กร ซึ่งสามารถบอกถึงความแตกต่างจากสิ่งอื่นทั้งหมด เช่น นักศึกษา 1 คน , เหตุการณ์ 1 เหตุการณ์

  2. Realtionship set เป็นกลุ่มของความสัมพันธ์ประเภทเดียวกัน ซึ่งเกิดจากความสัมพันธ์ของ Entity
    แต่ละความสัมพันธ์ (Relationship)คือแถวซึ่งเป็นตัวแทนของความสัมพันธ์ระหว่างหลาย Entity จาก n Entity (n>=2)
    เช่น มี Entity Set นักศึกษา(รหัสนักศึกษา,ชื่อและสกุล, เกรดเฉลี่ย)
    และ มี Entity Set วิชาเรียน(รหัสวิชา,ชื่อวิชา,หน่วยกิต)
    Relationship แทนได้ว่า นักศึกษาคนไหนเรียนวิชาอะไร ตัวอย่าง 5 Relationship ดังนี้



    สมปองลงทะเบียนเรียนวิชา คณิต 1
    สมปองลงทะเบียนเรียนวิชา คณิต 2
    สมหมายลงทะเบียนเรียนวิชา ฐานข้อมูล 1
    สมใจลงทะเบียนเรียนวิชา คณิต 1
    สมใจลงทะเบียนเรียนวิชา Java

Attribute


An entity is represent by a set of (attributes,datavalue) pairs

Attributes : คือข้อมูลที่แสดงลักษณะ และคุณสมบัติของ Entity
เช่น attribute ของบุคคล อาจได้แก่ เลขประจำตัว ชื่อ ส่วนสูง
วันเดือนปีเกิด …. เป็นต้น

Attribute จะมีกรอบของค่าที่เป็นไปได้ที่เราเรียกว่า Domain (a set of permitted values)
เช่น Attribute blood กำหนดให้มีค่าที่เป็นไปได้ เช่น A,B,O,AB เท่านั้น
Attribute salary กำหนดให้มีค่าที่เป็นไปได้ เป็นตัวเลขชนิด double มีค่าไม่น้อยกว่า 10,000 เป็นต้น

ประเภทของ Key ใน Database

  • Superkey
  • Primary key
  • Candidate key
  • Foreign key

ในระบบฐานข้อมูล มีความจำเป็นต้องระบุให้ได้ถึงความแตก ต่างกันระหว่าง Entities ใน Entity Set และ ระหว่าง Relationship ใน Relationship Set
คีย์หลัก คือฟิลด์ (Attribute) ที่ได้รับเลือกให้เป็นตัวที่บอกความ แตกต่างของแต่ละเรคอร์ด
ดังนั้นค่าในฟิลด์นี้ของแต่ละเรคอร์ด ภายในตาราง ต้องไม่ซ้ำกัน
คีย์หลักอาจถูกกำหนดมาจาก attribute เดียว หรือใช้ตั้งแต่ 2 attributes ขึ้นไปร่วมกันกำหนดความแตกต่างของแต่ละเรคอร์ดได้

Superkey คือ กลุ่มของ attribute ตั้งแต่ 1 attribute ที่ระบุความแตกต่างของข้อมูลในตาราง เช่น รหัสนักเรียน SID เป็น 1 ใน Attribute ของ Entity Set Student ที่สามารถระบุความแตกต่างว่า Entity Student แตกต่างจาก Entity Student อื่น SID จึงเป็น Superkey เหมือนกันกับการรวมระหว่าง รหัสนักเรียน SID กับชื่อนักเรียน SName ก็สามารถระบุความแตกต่างของนักเรียนได้เช่นกัน SID,SName จึงเป็น Superkey เช่นเดียวกัน

Candidate Key คือ Superkey ที่ตัด attribute ที่ไม่จำเป็นสำหรับการเป็น Superkey ออก ในกรณี Entity Set Student มี SID เป็น Candidate key แต่ถ้า มี Attribute CitizenID (รหัสประชาชน) เพิ่มขึ้นมา CitizenID จะทำให้เกิด Superkey มากมายและ CitizenID ก็เป็น Candidate key เช่นเดียวกัน

Primary Key คือ Candidate key ที่ถูกเลือกขึ้นมา

Primary key

ประเภทของ Attribute

  • Simple and Composite
    Simple :
    ไม่สามารถแบ่งแยกได้อีก เช่น ชื่อ,สกุล,เพศ,คำนำหน้าชื่อ เป็นต้น
    Composite : สามารถแบ่งแยกได้อีกเช่น ชื่อและสกุล สามารถแบ่งเป็น ชื่อ,สกุล ได้
  • Single-Valued Attribute ที่มีค่าของข้อมูลในแต่ละสมาชิกของเอนทิตีได้เพียง ค่าเดียว เช่น บุคคลหนึ่งคนมีเพศเดียว Attribute เพศจึงเป็น Single-Valued หรือพนักงานหนึ่งคนมีเงินเดือนเพียงค่าเดียว Attribute เงินเดือนจึงเป็น Single-Valued เป็นต้น
  • Multi-valued Attribute เป็น Attribute ที่มีหลายค่า เช่น วุฒิการศึกษา หลายค่า เช่น บุคคลหนึ่งคนอาจมีวุฒิการศึกษาได้หลายระดับ
  • Derive เป็น Attribute ที่ค่าของข้อมูลในแต่ละสมาชิกของเอนทิตีได้มาจากการนำ ค่าของข้อมูลใน Attribute อื่นที่มีอยู่ในแต่ละสมาชิกของเอนทิตีมาทำการคำนวณ ซึ่งโดยทั่วไปไม่จำเป็นต้องจัดเก็บ Attribute ประเภทนี้ไว้ในระบบฐานข้อมูล เนื่องจาก Attribute ประเภทนี้มีการเปลี่ยนแปลงค่าของ ข้อมูลในแต่ละสมาชิกของเอนทิตีทุกครั้ง เมื่อมีการเปลี่ยนแปลงค่าของข้อมูลใน Attribute ที่ถูกนำมาคำนวณของแต่ละสมาชิกในเอนทิตี้ เช่น Attribute อายุปัจจุบันสามารถคำนวณได้จาก Attribute วัน/เดือน/ปี

ความสัมพันธ์ของ Entity

  • Binary : A relationship of degree two. 1 ความสัมพันธ์ของ 2 Entity
  • Ternary : A relationship of degree three. 1 ความสัมพันธ์ของ 3 Entity
  • Quarternary : A relationship of degree four. 1 ความสัมพันธ์ของ 4 Entity

Mapping Cardinalities (Type Of Relationship)

  • 1 : 1 หมายถึง ความสัมพันธ์ที่แต่ละสมาชิกในเอนทิตีหนึ่งมี ความสัมพันธ์กับสมาชิกในอีกหนึ่งเอนทิตีเพียงสมาชิกเดียว หรือกล่าวได้ว่า ความสัมพันธ์ดังกล่าวเป็นแบบหนึ่งต่อหนึ่ง เช่น เอนทิตีอาจารย์และเอนทิตีคณะ มีความสัมพันธ์กันแบบหนึ่งต่อหนึ่ง กล่าวคือ แต่ละคณะมีคณบดีเพียงหนึ่งคนเท่านั้น และมีอาจารย์เพียงหนึ่งคนเท่านั้นที่เป็นคณบดี เป็นต้น
  • 1 : M , M : 1 หมายถึง ความสัมพันธ์ที่แต่ละสมาชิกในเอนทิตีหนึ่งมี ความสัมพันธ์กับสมาชิกในอีกหนึ่งเอนทิตีมากกว่าหนึ่งสมาชิก หรือกล่าวได้ว่า ความสัมพันธ์ดังกล่าวเป็นแบบหนึ่งต่อกลุ่ม เช่น เอนทิตีคณะและเอนทิตีนักศึกษามีความสัมพันธ์กันแบบหนึ่งต่อกลุ่ม กล่าวคือ นักศึกษาแต่ละคนมีสังกัดเพียงคณะเดียว และหนึ่งคณะอาจมีนักศึกษาในสังกัดได้
  • M : M หมายถึง ความสัมพันธ์ที่สมาชิกมากกว่าหนึ่งสมาชิกใน เอนทิตีหนึ่งมีความสัมพันธ์กับสมาชิกในอีกหนึ่งเอนทิตีมากกว่าหนึ่งสมาชิก หรือกล่าวได้ว่า ความสัมพันธ์ ดังกล่าวเป็นแบบกลุ่มต่อกลุ่ม เช่น เอนทิตีนักศึกษาและเอนทิตีชุดวิชามีความสัมพันธ์กันแบบกลุ่มต่อกลุ่ม กล่าวคือ นักศึกษาแต่ละคนสามารถลงทะเบียนเรียนได้หลายชุดวิชา และแต่ละชุดวิชาสามารถมีนักศึกษาลงทะเบียนได้หลายคน

ดูตัวอย่างของความสัมพันธ์ ของนักเรียนกับอาจารย์ วิชาเรียน และ โปรเจค



พิจารณาที่ ความสัมพันธ์ 1 : 1 ระหว่าง Student กับ Project
แสดงให้เห็นว่านักเรียน 1 คนมี 1 โปรเจค และ 1 โปรเจคนั้นมีนักเรียนทำได้คนเดียว ไม่มีการทำซ้ำของโปรเจค เราสามารถเก็บ Schema ของ Table ในความสัมพันธ์ลักษณะนี้ได้ 2 แบบ
Schema แบบที่ 1 คือ Student(SID,SName,GPA,ProjID,ProjName,Budget,Lab);
Schema แบบที่ 2 คือ
Student(SID,SNAME,GPA,ProjID);
foreign key (ProjID) references Project
Project(ProjID,ProjName,Budget,Lab);



พิจารณาที่ ความสัมพันธ์ 1:M ระหว่าง Lecturer กับ Student แบบไม่มี Descriptive Attribute
แสดงให้เห็นว่าผู้สอนแต่ละคนจะเป็นอาจารย์ที่ปรึกษากับกับนักเรียนหลายคน
และนักเรียนแต่ละคนจะมีอาจารย์ที่ปรึกษาได้เพียง 1 คน จะได้ Schema ดังนี้
Lecturer(LecID,LecName,Dept);
Student(SID,SNAME,GPA,ProjID,LecID);
foreign key (ProjID) references Project
foreign key (LecID) references Lecturer



พิจารณาที่ ความสัมพันธ์ M:M ระหว่าง Lecturer กับ Subject
แสดงให้เห็นว่าผู้สอนนั้นสามารถสอนได้หลายวิชาและแต่ละวิชาอาจจะมีผู้สอนได้หลายคน
Lecturer(LecID,LecName,Dept);
Subject(SubID,SubName);
Teach(LecID,SubID)
foreign key (SubID) references Subject
foreign key (LecID) references Lecturer



ความสัมพันธ์ 1 : m แบบมี Descriptive Attribute


รูปนี้ผิดนะกำลังแก้ไขอยู่

  • ลูกค้าแต่ละคนอาจจะมีหลายการเช่า
  • การเช่าแต่ละครั้งต้องมีลูกค้าหนึ่งคน
  • วิดีโอเทปอาจจะมีการยืมหนึ่งรายการ
  • รายการยืมต้องมีหนึ่งรายการ

ปัญหาการออกแบบ E-R

  • Fan Trap เกิดจากลำดับความสัมพันธ์ไม่ถูกต้อง มักพบในกรณีที่เอนทิตีหนึ่งมีความสัมพันธ์แบบหนึ่งต่อกลุ่มกับเอนทิตีอื่นตั้งแต่สองเอนทิตีขึ้นไป
  • Chasm Trap เกิดความขาดช่วงของข้อมูลไม่สามารถบอกรายละเอียดของความสัมพันธ์ได้

วันอาทิตย์ที่ 15 กรกฎาคม พ.ศ. 2550

Entity-Relation Model and Enhanced Entity-Relation Model : Part II

Weak Entity and Strong Entity
Entity Set อาจจะมี attribute ไม่เพียงพอที่จะทำเป็น Primary key เราเรียก Entity Set นั้นว่า Weak Entity คือไม่สามารถจะมี Primary Key เป็นของตนเอง
Entity Set ที่มี attribute เป็น Primary key ของตนเองเป็น Strong Entity
สำหรับ Weak Entity นั้นจะใช้ประโยชน์ได้มันต้องมีความเกี่ยวข้องกับ Entity Set อื่นที่เราเรียกว่า identifying หรือ owner entity set
ทุก weak entity จะต้องมีความเกี่ยวข้องกับ identifying entity นั่นคือ weak entity นั้นขึ้นกับ (existence dependency) identifying Entity Set และ Identifying Entity Set เป็นเจ้าของ ของ weak entity ที่ถูกบ่งชี้หรือระบุ (identify)
ความสัมพันธ์ที่เกี่ยวข้องกันระหว่าง Weak Entity Set กับ Identifying Entity Set นั้นเรียกว่า Identifying Relationship
Identifying Relationship นั้นมีลักษณะ Many to One จาก Weak Entity ไปยัง Identifying Entity Set และ participation ของ Weak Entity จะเป็นความสัมพันธ์แบบ Total

ปัญหาการออกแบบ E-R
  • Fan Trap เกิดจากลำดับความสัมพันธ์ไม่ถูกต้อง มักพบในกรณีที่เอนทิตีหนึ่งมีความสัมพันธ์แบบหนึ่งต่อกลุ่มกับเอนทิตีอื่นตั้งแต่สองเอนทิตีขึ้นไป
  • Chasm Trap เกิดความขาดช่วงของข้อมูลไม่สามารถบอกรายละเอียดของความสัมพันธ์ได้

วันอาทิตย์ที่ 8 กรกฎาคม พ.ศ. 2550

Basic Linux Accounting : Part III

การใช้ Secure SHell

Secure Shell

/etc/ssh/sshd_config
เก็บค่า config สำหรับการ login
PermitRootLogin no
เป็นตัวแปรเกี่ยวกับการยินยอมให้ Root login ผ่าน Secure Shell (Remote)

สำหรับในการเปลี่ยนแปลงค่า config แต่ละครั้งจะต้องให้ Linux อ่านค่าใหม่ ซึ่ง sshd เป็น service จึงต้อง Restart Service

/etc/rc.d/init.d/sshd restart

/var/log/secure
เป็นไฟล์ที่เก็บร่องรอยการ Login ของแต่ละ user ที่เครื่อง Server

RPM

Red Hat Package Management facilitates users to install or update RedHat Software across a wide variety of Linux flavor.

การใช้ package rpm จำเป็นจะต้องมี package มาอยู่ที่เครื่อง Server ก่อนทำการติดตั้ง
เราสามารถใช้ ftp เข้าไปโหลด package จาก http://www.rpmfind.net/ หรือ ftp://download.fedora.redhat.com/pub/fedora/linux/core/

Get RPM with Command-Line Anonymous FTP
เราจะเข้าไปเอา package จาก ftp ของ fedora ด้วย command ftp โดยใช้ user:anonymous เข้าไปดาวน์โหลดให้พิมพ์คำสั่ง

ftp download.fedora.redhat.com

จากนั้นใส่ user : anonymous
pass ไม่ต้องใส่ให้กด Enter ไปได้เลย

จากนั้น cd ไปจนถึง /pub/fedora/linux/core/

ใน core นี้จะประกอบไปด้วย version ของ fedora ถ้า version 2 ให้ cd 2 เพื่อเข้า directory แล้วเข้าไปถึง /i386/os/Fedora/RPMS/
เราสามารถใช้ คำสั่ง get ตามด้วย ชื่อไฟล์ หรือ mget ตามด้วยชื่อไฟล์แล้ว Wild card เช่น abc* เพื่อโหลดไฟล์ที่ขึ้นต้นด้วย abc ทั้งหมดมาก็ได้
จากนั้นพิมพ์ Exit เพื่อออก
แล้วให้ ls เพื่อดูไฟล์ที่ดาวน์โหลดมา

Get RPMs Using CD-ROM
ให้ดูไฟล์ File System Table ที่ /etc/fstab ก่อนว่า cdrom อยู่ที่ drive ไหน

ให้ mount ไปที่ Drive นั้น ด้วยคำสั่ง
mount /mnt/cdrom

จากนั้น cd /mnt/cdrom เพื่อเข้าไป drive cd rom แล้ว copy file ลงที่เครื่องหรือ install จาก cd rom ก็ได้

เมื่อเสร็จแล้วให้ Eject cd-rom ด้วยคำสั่ง
eject cdrom


ตรวจสอบ package ว่าติดตั้งหรือยัง
rpm -q

เช่น rpm -q bind
จะตรวจสอบว่า package bind มีการติดตั้งหรือยัง ในกรณีที่ติดตั้งแล้วระบบจะบอกข้อมูลให้กับเราอย่างไม่ละเอียด ถ้าต้องการให้แสดงข้อมูล Package อย่างละเอียดให้เพิ่ม option i เข้าไปตรง -q เป็น -qi


การติดตั้งและอัพเดท package
ติดตั้งใช้คำสั่ง rpm -ivh
อัพเดทใช้คำสั่ง rpm -Uvh

การลบ package
rpm -e

ดูคำสั่งว่าอยู่ที่ไหนด้วย which
ถ้าเราพิมพ์ which ntpdate
จะได้ผล /urs/sbin/ntpdate


การใช้ ntpdate เพื่อ Synchronize time กับเครื่อง server
เป็นการอัพเดท เวลาของเครื่อง server ให้ตรงกัน ใช้คำสั่งดังนี้
ntpdate clock.nectec.or.th

Schedule update เวลา Crontab
ให้พิมพ์ crontab -e เพื่อทำการกำหนด schedule ให้รันคำสั่ง โปรแกรมจะเปิด vi ขึ้นมาให้เราพิมพ์

0 0,6,12,18 * * * /USR/SBIN/ntpdate clock.nectec.or.th

หมายความว่าให้ทำคำสั่ง
ntpdate clock.nectec.or.th
ทุกวัน ทุกเวลา 0.00,6.00,12.00,18.00

0 ตัวแรกหมายถึง นาที
0 ตัวที่สองเป็นชั่วโมง
6,12,18 เป็นชั่วโมงเหมือนกัน
* ถัดจาก 18 น่าจะเป็นวัน
* ตัวต่อมาน่าจะเป็นสัปดาห์
* ตัวถัดมาน่าจะเป็นเดือน

yum

yum list แสดงรายการ package ทุก package

yum update อัพเดท package ทุก package ที่ใหม่กว่า

yum install ติดตั้ง package ตามชื่อ package นั้น
yum -y install ตอบ yes ทั้งหมดในกรณีที่มีการถาม package ที่จะติดตั้ง

yum info แสดงข้อมูลพื้นฐานเกี่ยวกับ package นั้น

yum remove ถอน package นั้นออก

วันเสาร์ที่ 7 กรกฎาคม พ.ศ. 2550

Basic Linux Accouting : Part II

การใช้ VI

Mode


VI มี 2 โหมดการทำงาน คือ Insert mode และ command mode.
VI จะเริ่มต้นจาก Command mode และหากมีการปรับแก้จะเป็น Insert mode
การเปลี่ยนเป็น insert mode ให้กดปุ่ม i และเปลี่ยนกลับเป็น command mode โดยกด ctrl+c หรือ esc

เราสามารถเรียกคำสั่ง vimtutor เพื่อฝึกการใช้งาน vi ได้


การจัดการรายละเอียดของ User
เราสามารถจัดการข้อมูลของ user ด้วยคำสั่ง Chfn มีรูปแบบคำสั่งดังนี้
Chfn จะเป็นการเปลี่ยนข้อมูลของ user ที่กำลัง login
Chfn [username] จะเป็นการเปลี่ยนข้อมูลของ user นั้น


ในกรณีที่เราต้องการแสดงข้อมูลของ user เราใช้ คำสั่ง Finger -l [username]


กำหนดให้ user ทำคำสั่งบางอย่างแทน admin ด้วย visudo
เมื่อพิมพ์ visudo เราจะได้ sudoers file ซึ่งมีวิธีกำหนด command ดังนี้
=() NOPassword


wheel ALL=(ALL) ALL


group wheel สามารถ remote เข้าได้จากทุกเครื่อง และใช้ได้ทุกคำสั่งโดยไม่ต้องใส่ password



arn localhost=/sbin/shutdown -h now


user arn สามารถ login เข้าได้จากเครื่อง localhost(เครื่อง Server เอง)เท่านั้นและจะรันได้เฉพาะคำสั่ง shutdown -h now เท่านั้น

เมื่อกำหนด config เสร็จแล้ว user คนไหนจะพิมพ์คำสั่งให้พิมพ์ sudo ก่อนพิมพ์คำสั่งจริง

การบริหารจัดการ Disk Quoat
ก่อนอื่นพิมพ์ df เพื่อดู Report File system disk space ใช้ df -m เพื่อแสดงเป็น Megabyte

/etc/fstab
เป็นไฟล์ที่แสดงรายการของ partiton ใน linux ที่ทำการชี้มาอัตโนมัติเมื่อมีการ boot เราจำเป็นที่จะต้องบอกกับ linux ว่าเรามีการใช้งาน Disk Quota นะ โดยการแก้ไข Option ของ /home ด้วยการเพิ่ม usrquota ต่อท้ายดังนี้

LABEL=/home /home ext3 defaults,usrquota 1 2

เมื่อมีการแก้ไข config แล้วต้องสั่งให้ linux อ่านค่า config นี้อีกครั้งให้ logout user ทุกคนออกก่อน หรือเข้า mode sigle user (mode 1 ด้วยคำสั่ง init 1)
จากนั้น ใช้คำสั่ง
umout /home
mount /home


สร้างไฟล์กำหนดค่า Quota ของ Partion
ให้สร้างไฟล์ aquota.user ด้วยคำสั่ง touch ที่ directory /home


เริ่มทำ Quota Table
จากนั้นรัน quotacheck command ใน partition /home ด้วยคำสั่ง

quotacheck -v /dev/hdax,sdax
x หมายถึง ตัวเลข partition ของ /home นะ


แก้ไข user's quota

ทำการกำหนด quota ของ user แต่ละคน
edquota [username] เช่น edquota teerayut

เปิด quota ให้ user

ด้วยคำสั่ง

quotaon /dev/hdax,sdax
x หมายถึงตัวเลข partition ของ /home นะ

แสดงรายงานของ Disk Quota
พิมพ์ reqquota -a หรือ repquota /home

วันศุกร์ที่ 15 มิถุนายน พ.ศ. 2550

Basic Linux Accouting : Part I

เราควรจะทำอะไรเป็นบ้างเมื่อได้เรียนบทนี้

  1. มีความเข้าใจ Accounting ในระบบ Linux
  2. สามารถอธิบายการ Add user เข้า Group ได้
  3. สามารถอธิบายการ Swtich User
  4. มีความเข้าใจการใช้งาน VI
  5. ใช้งาน Remote อย่าง Putty และโปรแกรมอื่นๆได้
  6. จัดการข้อมูลรายละเอียดของ user ได้
  7. กำหนด user ให้ทำงานคำสั่งบางคำสั่งด้วย visudo ได้
  8. สามารถบริหารจัดการ Disk Quota ให้กับ user
  9. มีความเข้าใจในการใช้ sshd (deamon)
  10. มีความเข้าใจและใช้งาน Package ของ Linux

ก่อนอื่นให้ตรวจสอบก่อนว่าเครื่องเราสามารถใช้งาน Network ได้หรือไม่ให้พิมพ์ Cat ดูไฟล์ Config ของ Network ด้วยคำสั่ง cat /etc/sysconfig/network-script/ifcfg-eth0 จะปรากฏรายละเอียดของอุปกรณ์การ์ดเน็ตเวิร์ค ถ้า bootproto=dhcp หมายถึงให้เป็นการจ่าย ip อัตโนมัติ

นอกจากนี้เรายังใช้คำสั่ง ifconfig เพื่อดู config ของ interface card ได้ถ้า network ไม่ workเราสามารถ พิมพ์ setup เพื่อกำหนดค่าของ network ได้หรือจะใช้คำสั่ง system-config-network-tui ต่อมา จะเป็นการใช้ putty ในการ connect ก็แค่ใส่ ip ที่ hostname connect ด้วย port 22 ตัว putty จะเป็น Remote Desktop Connection ใน Linux

การ add user และ group

Linux นั้นถูกพัฒนาจาก Unix ซึ่งมีการใช้งานได้หลาย user บนเครื่องเดียวโดยมี root เป็น user ที่มีสิทธิ์ในการควบคุมระบบได้อย่างเต็มที่ โดยจะมีไฟล์ที่เกี่ยวข้องกับบัญชีรายชื่อผู้ใช้อยู่ 3 ไฟล์คือ

  1. /etc/passwd เก็บข้อมูลพื้นฐานของ user 7 คอลัมน์
  2. /etc/shadow เก็บรหัสผ่านของ user แต่ละคนโดยมีการ encrypted
  3. /etc/group เก็บรายชื่อกลุ่มไว้ มี 4 คอลัมน์

/etc/passwd

Username : Password : UID : GID : Description : Home Directory : Shell

username ชื่อ userในระบบ
password รหัสผ่านในที่นี้เป็น x
UID เป็นหมายเลข user ซึ่งไม่ซ้ำกันของ root เป็น 0 ถ้าสร้างใหม่จะมีตัวเลข 1000 ขึ้นไป
GID เป็นหมายเลข group อ้างอิงกับไฟล์ /etc/group
Description รายละเอียดของ user เราสามารถดูได้จากคำสั่ง finger <ชื่อผู้ใช้>
Home Directory เป็นคอลัมน์ที่กำหนดให้ user เมื่อเริ่มต้นเข้าสู่ระบบโดยมีสิทธิ์เต็มที่
Shell เชลล์เริ่มต้นของ user

/etc/shadow

Username : Password : Lastchg : Min : Max : Warn : Inactive : Expire : Flag

Lastchg บอกว่าเปลี่ยนรหัสผ่านล่าสุดเมื่อใด
Min จำนวนวันน้อยที่สุดที่อนุญาติให้เปลี่ยนรหัสผ่าน
Max จำนวนวันมากที่สุดที่รหัสผ่านยังใช้ได้
Warn จำนวนวันที่จะเตือน user ก่อนรหัสผ่านจะหมดอายุ
Inactive จำนวนวันที่อนุญาตให้ user ไม่ต้องปรับเปลี่ยน
Expire จำนวนวันหมดอายุของรหัสผ่าน

/etc/group

Group name : Password : GID : Members

Password รหัสผ่านของกลุ่มไม่ค่อยได้ใช้
Members เป็นสมาชิกที่อยู่ในกลุ่ม

คำสั่ง add user

useradd [-c comment] [-d home_dir] [-e expire_date] [-f inactive_time][-g initial_group] [-G group[,...]][-m [-k skeleton_dir] -M] [-n] [-o] [-p passwd] [-r] [-s shell] [-u uid] login

adduser -u 5001 -g 5000 arn
-u 5001 คือการกำหนด UID ให้เป็น 5001
-g 5000 คือการกำหนด GID ให้เป็น 5000 หมายความว่า user เข้าอยู่ใน group ที่มี gid=5000
arn เป็นชื่อผู้ใช้

อ.มีคำถามว่า การ add user โดยไม่ใส่ uid,gid นั้นไม่ดีอย่างไร ?
เท่าที่ไปดูมาในไฟล์ /etc/passwd และ etc/group
ได้ผลคือ

  1. user จะได้ uid ถัดจาก uid มากที่สุด
  2. จะนำ uid นั้นไปสร้าง group ชื่อเดียวกันกับ user
  3. มี gid=uid

การ Switch User

เราสามารถสลับ user ในการทำงานด้วยคำสั่ง su [-][username]
โดยค่าเริ่มต้นแล้วถ้าไม่ใส่ username หมายความว่าจะ switch ไปที่ root

อ.มีคำถามว่าคำสั่ง "su" กับ "su -" นั้นแตกต่างกันอย่างไร?

คำสั่ง su นั้นจะ switch user ธรรมดาแต่ถ้ามี "-", "-l", "--login" จะเปรียบเสมือน login ด้วย user นั้นจริงๆ ดังนั้นจะได้ environment ของ user นั้น สังเกตจากการอ่านไฟล์ .bash_profile ของ account หลังจาก login

การ switch user นั้นเราสามารถกำหนดค่าได้ว่าให้ user ใดที่ su ได้บ้าง และ ให้ถาม password หลังจาก su หรือไม่ โดยไปแก้ไขที่ไฟล์ /etc/group และ /etc/pam.d/su มีขั้นตอนดังนี้

  1. กำหนดให้ user ในกลุ่ม wheel เท่านั้นที่สามารถใช้ su ได้ ไปที่ไฟล์ /etc/group ทำการ add user ที่ต้องผ่าน VI แล้วไปที่ File /etc/pam.d/su เอานำ comment บรรทัดอยู่ถัดจาก
    # Uncomment the following line to require a user to be in the "wheel" group.
    auth required /lib/security/pam_wheel.so use_uid
  2. กำหนดให้ user ไม่ต้องใส่ password หลังจาก su ให้นำ comment บรรทัดที่อยู่ถัดจาก
    #Uncomment the following line to implicitly trust users in the "wheel" group.
    auth sufficient /lib/security/pam_wheel.so trust use_uid
    เป็นการไว้วางใจ user ที่อยู่ใน group wheel ให้ su ได้โดยไม่ต้องกรอก password