November 29, 2011

Access Control List

ကျွှန်တော် အီးဇီးဆာဗလက် ခေါင်းစဉ်ဖြင့် ဆာဗလက်၏ အခြေခံအကြောင်းအရာများကို ရေးသားလာခဲ့သည်မှာ ၇ကြိမ်ရှိခဲ့ပြီဖြစ်သည်။
  • ဆာဗလက်တစ်ခုကို မည်သို့ရေးသားရမည်၊ 
  • ဆာဗလက်အတွင်းမှ ပါရာမီတာများကို မည်သို့ရယူမည်၊ 
  • ဆာဗလက်အချင်းချင်း မည်သို့ပူးပေါင်းဆောင်ရွက်နိုင်သည်၊ 
  • ဆာဗလက်မှ အသုံးပြုသူကို မည်သို့မှတ်သားနိုင်သည်၊ 
  • ဆာဗလက်အတွင်းမှ အသုံးပြုလိုသည့်လော့ဂျစ်နှင့် မဆိုင်သော အကြောင်းအရာများကို မည်သို့ခွဲခြားပြီးရေးသားနိုင်သည်၊ 
  • ရေးထားသော အပလီကေးရှင်းကို စောင့်ကြည့်ပြီး အလိုအလျှောက်ရေးသားနိုင်သည်၊
အစရှိသည်တို့ကို လေ့လာခဲ့ပြီးဖြစ်၏။  ဆာဗလက်နှင့်ပတ်သက်၍ နောက်ရေးသားရန်မှာ ဤအခန်းအပါအဝင် နှစ်ခန်းသာကျန်တော့၏။ ဤတစ်ခေါက်တွင် Access Control List အကြောင်းကို ရေးသားပြီး နောက်တစ်ခန်းတွင်၊ Security နှင့်ပတ်သက်ပြီး ရေးသားရန်စီစဉ်ထားပါသည်။

Access Control List ဆိုသည်မှာ

သာမန် ကွန်မြူနတီ ဘလောဂ် များမှအစ ဝဘ်အပလီကေးရှင်းများသည် သတင်းအချက်အလက်၊ အရင်းအနှီးများကို ပိုင်ဆိုင်၏။ မည်သူမဆို အချက်အလက်များကို အလွယ်တကူပြောင်းလည်း နိုင်၍မဖြစ်ပေ။ ထို့အတွက် ထိုအရင်းအနှီးများကို မည်သူက ဘယ်အအထိအသုံးပြုနိုင်သည် ဆိုသည်ကို သတ်မှတ်ထားရန်လိုအပ်၏။ ဤကဲ့သို့ အဆင့်အလိုက် ဆက်သွယ်အသုံးပြုနိုင်ခွင့်ကို သတ်မှတ်ရေးသားထားသည့် စာရင်းကို Access Control List သို့မဟုတ် ACL ဟုခေါ်ပါသည်။ Enterprise Application အတော်များများသည် ACL ကို အသုံးပြု၍ အသုံးပြုနိုင်ခွင့်ကို ထိမ်းသိမ်းထားနိုင်ခြင်းဖြစ်၏။

JavaEE တွင်လည်း သတ်မှတ်ထားသော အသုံးပြုသူက၊ ခွင့်ပြုထားသော လုပ်ပိုင်ခွင့်များကို ရရှိစေရန် သတ်မှတ်ရေးသားနိုင်ပါသည်။ ထိုသို့ရေးသားရာတွင် web.xml ကို အသုံးပြုရေးသားနိုင်ပြီး၊ ထိုနေရာတွင် အောက်ပါ အချက်အလက်များကို သတ်မှတ်ရေးသားရန် လိုအပ်ပါသည်။

  1. အသုံးပြုသူအမျိုးအစား (ROLE) သတ်မှတ်ချက်
  2. အသုံးပြုခွင့်ကန့်သတ်ထားသော ရင်းမြစ်များ
  3. ကန့်သတ်ထားသော ရင်းမြစ်များနင့် အသုံးပြုခွင့်ရသော Role ၏သက်မှတ်ချက်
  4. ကန့်သတ်ထားသော ရင်းမြစ်များအား ဆက်သွယ်ခွင့်စစ်ဆေးရေးစနစ် သက်မှတ်ချက်
မည်သူက ဘယ်အဆင့်အထိအသုံးပြုနိုင်သည်၊ တဖန် စစ်ဆေးရေးစနစ်တွင် အသုံးပြုသော လျှို့ဝှက်နံပါတ် သိမ်းဆည်းရေးစနစ်မှာမှု အပလီကေးရှင်း ဆာဗာအပေါ်တွင် မှုတည်၍ အမျိုးမျိုးကွဲပြားခြားနား၏။ သို့ရာတွင် ဤဘလောဂ်တွင်မှု အခြေခံ JavaEE လုံခြုံရေးစနစ်ကို အသုံးပြု၍ ရှင်းလင်းရေးသားသွားပါမည်။

<web-app>
  ...
  <security-constraint>
    ...
  </security-constraint>
  <login-config>
    ...
  </login-config>
  <security-role>
    ...
  </security-role>
</web-app>
အထက်ပါ နမှုနာ web.xml တွင် ရေးသားထားသည့်အတိုင်း အနည်းဆုံး အချက်သုံးချက်ကို သက်မှတ်ရန်လိုအပ်ပါသည်။

အမည် အသုံးပြုနိုင်ပုံ ရှင်းလင်းချက်
security-constraint ကန့်သတ်ချက်ရှိသော ဆားဗစ်များနှင့်၊ ထိုဆာဗစ်များအား ဆက်သွယ် အသုံးပြုနိုင်သည့် အသုံးပြုသူ အမျိုးအစားများကို သတ်မှတ် ရေးသားရန် လိုအပ်ပါသည်။
login-config ကန့်သတ်ချက်ရှိသည့် ဆာဗစ်များကို အသုံးပြုလိုသည့်အခါတွင် အသုံးပြုမည့် စစ်ဆေးရေးစနစ်ကို သတ်မှတ်ရေးသား ရန်လိုအပ်ပါသည်။
security-role ဤစစ္စတမ်တွင် အသုံးပြုမည့် အသုံးပြုသူအမျိုးအစားများကို သတ်မှတ်ရေးသားရန် လိုအပ်ပါသည်။

အထက်ပါ Tag များကို taglib နှင့် resource-ref Tag များ၏ နောက်တွင် ရေးသားရန်လိုအပ်ပါသည်။

<security-role>

<security-role>တဂ်အတွင်းတွင် အသုံးပြုသူအမျိုးအစား(Role) ကို သတ်မှတ်ရေးသားနိုင်၏။ ရေးသားပုံနမှုနာမှာ အောက်ပါအတိုင်းဖြစ်၏။
<security-role>
  <role-name>admin</role-name>
</security-role>
<security-role>
  <role-name>support</role-name>
</security-role>
<role-name>တွင် အသုံးပြုမည့် အဆင့်၏ အမည်ကို သတ်မှတ်ရေးသားရပါမည်။ ထို့အပြင် <security-role>တဂ်အတွင်းတွင် <role-name> တစ်ခုသာ ရေးသားနိုင်ပြီး၊ Role အမျိုးမျိုးကို အသုံးပြုလိုပါက၊ အသုံးပြုလိုသည့် Role တိုင်းကို <security-role>တဂ် တစ်ခုချင်း ရေးသားရန်လိုအပ်ပါသည်။ တဖန် မည်သူက ဘယ်အဆင့်ရှိသည်ဆိုသည်ကို သတ်မှတ်ပုံမှာ အသုံးပြုသည့် အပလီကေးရှင်း ဆာဗာအပေါ်တွင် မှုတည်ပြီး အမျိုးမျိုး ကွဲခြားပါသည်။

<security-constriant>

<security-constriant>တဂ်သည် အသုံးပြုခွင့်ကို ကန့်သတ်လိုသည့် ရင်းမြစ်များနှင့်၊ ကန့်သတ်သားသော ရင်းမြစ်များအား အသုံးပြုနိုင်သည့်၊ အသုံးပြုသူအမျိုးအစားများကို သတ်မှတ်ရန် အသုံးပြုပါသည်။ ကန့်သတ်လိုသည့် ရင်းမြစ်များကိုရေးသားရန် <web-resource-collection>၊ အသုံးပြုနိုင်သည့် အသုံးပြုသူအမျိုးအစားများအား သတ်မှတ်နိုင်သည့် <auth-constraint>နှင့်၊ အသုံးပြုသူနှင့် အကြားတွင်အသုံးပြုမည့် ဆက်သွယ်ရေးစနစ်ကို သတ်မှတ်ပေးနိုင်သည့် <user-data-constraint> တို့ဖြင့် ဖွဲ့စည်းထားပါသည်။

<security-constraint>
  <web-resource-collection>
    <web-resource-name>admin page</web-resource-name>
    <url-pattern>/admin/*</url-pattern>
    <url-pattern>/root/*</url-pattern>
    <http-method>GET</http-method>
  </web-resource-collection>
  <web-resource-collection>
    <web-resource-name>support page</web-resource-name>
    <url-pattern>/support/*</url-pattern>
  </web-resource-collection>
  <auth-constraint>
    <role-name>admin</role-name>
  </auth-constraint>
  <user-data-constraint>
    <transport-guarantee>NONE</transport-guarantee>
  </user-data-constraint>
</security-constraint>
<web-resource-collection> အတွင်းတွင် <web-resource-name><url-pattern><http-method> အစရှိသည့် တဂ် ၃မျိုးကို ရေးသားနိုင်၏။ <web-resource-name> မှာ ကန့်သတ်လိုသည့် ရင်းမြစ်၏ အမည် ဖြစ်၏။ <web-resource-collection>တစ်ခုအတွင်းတွင်<web-resource-name> တစ်ခုတည်းသာ ရေးသားနိုင်ပါသည်။

<url-pattern>အထဲမှာတော့ အပလီကေးရှင်းအတွင်းတွင် ဖော်ပြနိုင်သည့် ရင်းမြစ်၏ လိပ်စာပုံစံကို ရေးသားရန်လိုအပ်ပါသည်။ <web-resource-collection> တစ်ခုအတွင်းတွင် <url-pattern>ကို တစ်ခုထက်မက ရေးသားနိုင်ပြီး၊ <servlet-mapping> နှင့်<filter-mapping>တို့တွင် အသုံးပြုခဲ့သော <url-pattern> နှင့် ရေးသားပုံမှာ အတူတူပင်ဖြစ်၏။

<user-data-constraint> သည် အသုံးပြုသူနှင့် အကြားတွင် လိုအပ်သည့် ဆက်သွယ်ရေးပုံစံ ကို သတ်မှတ်ပေးနိုင်ပြီး၊ <security-constraint> တစ်ခုအတွင်းတွင် <user-data-constraint>တစ်ခုတည်းသာ အသုံးပြုနိုင်၏။ တဖန် <user-data-constraint> အတွင်းတွင် <transport-guarantee> ကို ရေးသားရန် လိုအပ်ပြီး၊ ဆက်သွယ်ရေးစနစ်၏ လုံခြုံရေးစနစ်ကို ဖော်ပြရေးသားရန်လိုအပ်ပါသည်။ အသုံးပြုနိုင်သည်မှာ အောက်ပါအတိုင်းဖြစ်၏။

အမျိုးအစား ရှင်းလင်းချက်
NONE လုံခြုံရေး စနစ်အား သတ်မှတ်တောင်းဆိုခြင်း မရှိပါ။
INTEGRAL ပြုပြင်ပြောင်းလည်း ရေးသား၍မရနိုင်သော ဆက်သွယ်ရေး စနစ်ဖြင့် ဆက်သွယ်ရန် လိုအပ်ပါသည်။
CONFIDENTIAL ကြားဖြတ်ပြီး ခိုးနားမထောင်နိုင်သော ဆက်သွယ်ရေးစနစ်ဖြင့် ဆက်သွယ်ရန် လိုအပ်ပါသည်။

INTEGRAL သို့မဟုတ် CONFIDENTIAL ကို အသုံးပြုပါက၊ SSL (HTTPS) ဖြင့် ဆက်သွယ်ရန် လိုအပ်ပါသည်။ တဖန် <user-data-constraint> ကို ရေးသားထားခြင်းမရှိပါက အလိုအလျှောက် NONE ကို သတ်မှတ်သွားမည် ဖြစ်၏။ အထက်ပါ နမှုနာထဲတွင် NONE ဟု သတ်မှတ် ရေးသား ထားပါသော်လည်း၊ မရေးသားထားရင်လည်း NONE ဟု သတ်မှတ်သွားမည် ဖြစ်၏။

<login-config>

<login-config>တွင် အသုံးပြုသူအား စစ်ဆေးသည့် Login စနစ်ကို သတ်မှတ်ရေးသားရပါမည်။
<login-config>
  <auth-method>BASIC</auth-method>
  <realm-name>admin page</realm-name>
</login-config>
<web-app> တစ်ခုတွင် <login-config>တစ်ခုတည်းသာ ရေးသားနိုင်၏။ တစ်နည်းဆိုရသော် ဝဘ်အပလီကေးရှင်း တစ်ခုတွင် Log in လုပ်နည်း တစ်နည်းသာ အသုံးပြုနိုင်သည်ဟု ဆိုနိုင်၏။ <login-config> အတွင်းတွင် မဖြစ်မနေ ရေးသားရန် လိုအပ်သည်မှာ <auth-method> ဖြစ်ပြီး၊ <auth-method> အတွင်းတွင် စစ်ဆေးရေးပုံစံကို ရေးသားရပါမည်။

အမည် ရှင်းလင်းချက်
BASIC HTTP Basic နည်းစနစ်ကို အသုံးပြုပါသည်။
FORM HTML Form ကို အသုံးပြု၍ အသုံးပြုသူကို စစ်ဆေးမည်ဟု သတ်မှတ်နိုင်ပါသည်။
DIGEST HTTP Digest နည်းစနစ်ကို အသုံးပြုပါသည်။ BASIC နှင့် DIGEST တွင် ကွာခြားသည်မှာ အသုံးပြုသူနှင့် Password အား စကားဝှက်ကို အသုံးပြု၍ ဆက်သွယ်ခြင်းဖြစ်၏။ DIGEST ကို အသုံးပြုပါက စကားဝှက်နည်းကို အသုံးပြု၍ ဆက်သွယ်နိုင်မည် ဖြစ်၏။
CLIENT-CERT SSL(HTTPS) တွင် အသုံးပြုသော Digital Signature ကို အသုံးပြု၍ အသုံးပြုသူ အားခွဲခြား သတ်မှတ်နိုင်ပါသည်။


<realm-name> တဂ်သည် BASIC နည်းစနစ်ကို အသုံးပြုသည့်အခါတွင် အသုံးပြုနိုင်သည့် တဂ်တစ်မျိုးဖြစ်ပြီး၊ log in dialog အတွင်း ဆက်သွယ်သည့် နယ်မြေနေရာတွင် တဂ်ထဲတွင် ရေးသားထားသော အမည်ကို ဖော်ပြပေးမည် ဖြစ်သည်။
ဤအခန်းအတွက် လက်တွေ့လေ့ကျင့်ခန်းများကို နောက်ရက်များတွင် ရေးသားပါမည်။

လေးစားစွာဖြင့် 
မင်းလွင် 

ကိုးကားများ
http://www.techscore.com/tech/Java/JavaEE/Servlet/10/

1 comment:

  1. It's actually a great and helpful piece of info. I am satisfied that you shared this helpful information with us.
    Please keep us informed like this. Thanks for sharing.

    ReplyDelete