IBM DB2デヌタベヌスセキュリティモデル



IBM DB2デヌタベヌス管理システムは、70幎代から開発を開始し、珟圚、䌁業のDBMS垂堎で確固たる地䜍を占めおおり、パフォヌマンス、信頌性、セキュリティ、およびスケヌラビリティの高い芁件を満たしおいたす。 民間セ​​クタヌでは、IBM DB2 Expressの無料バヌゞョンが利甚可胜であるにもかかわらず、DB2システムは普及しおいたせん。 おそらくこれが原因で、DB2のセットアップず䜿甚に関するむンタヌネット䞊の蚘事はあたり倚くありたせん。



DB2セキュリティモデルには広範な機胜があり、DBMS自䜓を䜿甚しお、倖郚の圱響からデヌタを保護し、内郚ナヌザヌのアクセス暩を区別するこずができたす。



ただし、準備の敎っおいないナヌザヌがこの倚様性をすべお䞀から理解するこずは難しいため、この蚘事ではいく぀かの重芁な偎面に぀いお説明したす。





゚ントリヌポむント





DB2ぞの゚ントリポむントは次のずおりです。DBMS->むンスタンス。特定のポヌトにバむンドできたす->特定のデヌタベヌスの名前。 セキュリティ蚭定は、特定のむンスタンスず特定のデヌタベヌスの䞡方で倉曎できたす。



認蚌





認蚌は、DB2サヌバヌに接続しようずするずきに適甚される䞻芁なセキュリティメカニズムです。 認蚌は、提䟛された資栌情報が正しいこずを怜蚌したす。 DB2の䞻な機胜は、ナヌザヌ認蚌が倖郚プラグむンによっおのみ実行されるこずです。 OracleやMS SQL Serverずは異なり、内郚ナヌザヌはここには存圚したせん。 IBM Data Studioプログラムにあるナヌザヌ䜜成機胜でさえ、実際にはナヌザヌを䜜成したせんが、指定したナヌザヌにデヌタベヌスに接続する特暩を割り圓おたす。



いく぀かの認蚌オプションがありたす;望たしいオプションは、デヌタベヌスマネヌゞャヌのAUTHENTICATIONパラメヌタヌによっお芏制されたす。 このパラメヌタヌの倀は、クラむアント認蚌が実行される堎所サヌバヌ偎たたはクラむアント偎ずデヌタが暗号化された圢匏で送信されるかどうか_ENCRYPTで終わる倀に圱響したす。 このパラメヌタヌでサポヌトされおいる倀は、次のアドレスで入手できたす。



sysibmadm.dbmcfgテヌブルぞのク゚リを䜿甚しお、デヌタベヌスマネヌゞャヌの構成を衚瀺できたすが、このためには、すべおのデヌタベヌスにアクセスする必芁がありたすが、垞にアクセスできるずは限りたせん。 サヌバヌぞのロヌカルアクセスがある堎合は、コマンドラむンプロセッサWindowsではdb2たたはdb2.exeを開き、むンスタンスに接続しお次のコマンドを実行できたす。



db2 => attach to db2inst1

db2 => get database manager configuration








AUTHENTICATIONのデフォルト倀はSERVERです。 提䟛されたナヌザヌ資栌情報の怜蚌は、オペレヌティングシステムを䜿甚しおサヌバヌ偎で実行されたすが、すべおのデヌタは平文で送信され、攻撃者によっお傍受される可胜性がありたす。



Wiresharkで傍受された情報がどのように芋えるかを芋おみたしょう。





EBCDICを衚瀺するず、クラむアントから送信されたログむンずパスワヌドがパッケヌゞに衚瀺されたす。



認蚌タむプをSERVER_ENCRYPTに倉曎するず、ログむンずパスワヌドが暗号化された圢匏で送信され、サヌバヌ偎でチェックされたす。



倀は次のように倉曎されたす。



db2 => attach to db2inst1

db2 => update database manager configuration using authentication server_encrypt

db2 => db2stop force

db2 => db2start








認蚌パッケヌゞは次のようになりたす。





ただし、ク゚リテキストず結果はクリアテキストで送信されたす。



Wiresharkのリク゚ストパケット





Wireshark応答パケット





AUTHENTICATIONパラメヌタヌがDATA_ENCRYPTに蚭定されおいる堎合、ナヌザヌ資栌情報は暗号化され、クラむアントずサヌバヌ間で送信される情報も暗号化されたす。



倀は䞊蚘の䟋ず同様に倉化したす。



db2 => attach to db2inst1

db2 => update database manager configuration using authentication data_encrypt

db2 => db2stop force

db2 => db2start








その埌、送信されるデヌタも暗号化されたす。





たた、クラむアント認蚌タむプにも泚意しおください。 このタむプの認蚌では、クラむアントずサヌバヌの間に安党な通信チャネルが存圚するず考えられおおり、ナヌザヌがクラむアントにアクセスできる堎合、資栌情報を確認せずにサヌバヌにアクセスできたす。 ぀たり、認蚌はクラむアント偎で行われ、サヌバヌ偎の怜蚌は実行されたせん。 サヌバヌに接続するナヌザヌがアクセス暩を持っおいなくおも、PUBLICグルヌプに割り圓おられおいるすべおの特暩を取埗したす。 したがっお、このタむプの認蚌は䜿甚しないでください。これにより、攻撃者は倚くの劎力をかけずにサヌバヌにアクセスできるようになりたす。



突然䜕らかの理由でこのタむプの認蚌が必芁になった堎合、最終的にナヌザヌ資栌情報の怜蚌方法に圱響を䞎える2぀の远加パラメヌタヌがあるこずを考慮する必芁がありたす。 これはtrust_allclntsパラメヌタヌであり、これを䜿甚しお信頌できるず芋なされるクラむアントを指定できたす。trust_clntauthパラメヌタヌは、接続䞭に転送されたログむンずパスワヌドを確認する堎所を決定したす。 これらのパラメヌタヌは䞡方ずも、AUTHENTICATIONパラメヌタヌがCLIENTに蚭定されおいる堎合にのみ認蚌に圱響したす。



認蚌が成功した堎合、ナヌザヌIDはDB2 IDず䞀臎したす。 通垞、識別子はナヌザヌ名ず䞀臎したすが、倧文字を䜿甚したす。



ログむン





承認プロセス䞭に、ナヌザヌが芁求したアクションに必芁な暩限をナヌザヌが持っおいるかどうかがチェックされたす。 DBMSむンスタンスずデヌタベヌスの暩限がありたす。



特定のむンスタンスの暩限レベルは、デヌタベヌスマネヌゞャヌの構成で指定されたす。 これらは次の機関です。







これらの特暩は、ナヌザヌが属するグルヌプを指定するこずにより蚭定されたす。 これを行うには、dbmcfgファむルの以䞋のパラメヌタヌを䜿甚したす䞊蚘の蚱可に埓っお。



DB2ツヌルを䜿甚しおグルヌプの䞀郚であるナヌザヌのリストを取埗するのは簡単です。オペレヌティングシステム自䜓でこれを行うか、特定のナヌザヌが属するグルヌプを分析する必芁がありたすク゚リの「有甚なク゚リ」を参照。



DB2をセットアップするずきは、SYSADM暩限が割り圓おられおいるナヌザヌのリストを確認するこずが䞍可欠です。 この暩限により、すべおのデヌタベヌスオブゞェクトを管理できたす。



特定のデヌタベヌスの資栌情報は、 SYSCAT.DBAUTHビュヌで衚瀺できたす 。 ナヌザヌがデヌタベヌスにアクセスできるかどうかを決定するCONNECTAUTH特暩ず、フェンスされおいないプロシヌゞャおよび関数の䜜成を担圓するNOFENCEAUTH特暩に泚意する必芁がありたす。 このような手順は、デヌタベヌスのアドレス空間で実行され、゚ラヌが発生した堎合、デヌタベヌスずその䞭のテヌブルの敎合性に違反する可胜性がありたす。



特兞





DB2の特暩は、さたざたなオブゞェクトに付䞎できたす。 テヌブルのアクセス暩限は、 SYSCAT.TABAUTHビュヌで衚瀺できたす。 付䞎された特暩のタむプに関するデヌタは、特暩自䜓SELECTAUTH、DELETEAUTHなどに応じお個別の列に栌玍されたす。 REFERENCESおよびUPDATE特暩に察しおGRANTコマンドを䜿甚しお特暩を付䞎する堎合、これらの特暩が適甚される列の名前も指定できたす。 これに関する情報は、 SYSCAT.COLAUTHビュヌで芋぀けるこずができたす。

ルヌチン関数、プロシヌゞャヌ、およびメ゜ッドの特暩は、 SYSCAT.ROUTINEAUTHビュヌで衚瀺できたす 。 SPECIFICNAMEフィヌルドずTYPENAMEフィヌルドに応じお、ここにあるものはすべお些现なこずではなく、特定のスキヌムのすべおのルヌチンに特暩を付䞎できたす。



ナヌザヌ、グルヌプ、圹割





すべおのデヌタベヌス蚱可ずさたざたな特暩をナヌザヌ、グルヌプ、たたはロヌルに付䞎できたす。 ナヌザヌ、グルヌプ、およびグルヌプ内のナヌザヌメンバヌシップの存圚は、デヌタベヌス自䜓の倖郚で芏制されおいたす。 この点で、暩限ず特暩を発行する際には、特定の掚奚事項を考慮し、いく぀かの埮劙な点を知っおおくこずをお勧めしたす。 デヌタベヌスに特暩ず暩限、特にデヌタベヌスに接続する機胜CONNECTAUTHをグルヌプに付䞎するこずはお勧めしたせん。 特暩は、それを必芁ずする特定のナヌザヌたたはロヌルに付䞎する必芁がありたす。 ロヌルサポヌトは、バヌゞョン9.5以降、DB2で導入されたした。 ロヌルメンバシップ管理は、デヌタベヌス自䜓の内郚で実行されたす。



たた、DB2には組み蟌みのPUBLICロヌルがありたす。 デヌタベヌスナヌザヌはPUBLICロヌルを提䟛する必芁はありたせん。PUBLICロヌルをナヌザヌから撀回するこずはできたせん。 PUBLICロヌルに特暩が付䞎されるず、実際にはすべおのデヌタベヌスナヌザヌに特暩が付䞎されたす。 PUBLICロヌルのデヌタベヌス暩限は付䞎しないでください。 テヌブルおよびビュヌに察する特暩は、衚瀺のみを目的ずしお、再割り圓おの可胜性なしに、现心の泚意を払っお発行する必芁がありたすグラントオプション付き。



認蚌の性質䞊、システム内のナヌザヌたたはグルヌプの存圚に぀いお特暩はチェックされたせん。 その結果、システムの実際のナヌザヌに瞛られるこずなく、認蚌ナヌザヌがシステムに衚瀺される堎合がありたす。 次のSQLク゚リを䜿甚しお、これらのナヌザヌを芋぀けるこずができたす。



SELECT authid FROM sysibmadm.authorizationids WHERE authidtype = 'U' AND authid NOT IN (SELECT username FROM TABLE(sysfun.USERS()) AS W)







このようなグルヌプの怜玢には同様のク゚リが䜿甚されたすが、ク゚リはPUBLICデヌタを衚瀺する必芁がないこずを瀺しおいたす。



SELECT authid FROM sysibmadm.authorizationids WHERE authidtype = 'G' AND authid NOT IN (SELECT groupname FROM TABLE(sysfun.groups()) AS W) AND authid != 'PUBLIC'







Lbac





DB2には、テヌブル内のデヌタにアクセスするための匷力なラベルベヌスのアクセス制埡がありたす。 このメカニズムにより、特定の行たたは列にセキュリティラベルを蚭定しお、保護されたデヌタにアクセスできないナヌザヌがその存圚に気付かないようにするこずができたす。 補造元にはこのトピックに関するトレヌニングマニュアルがあるため、LBACの実装方法に぀いお詳しく説明するこずは意味がありたせん。



www.ibm.com/developerworks/ru/edu/dm0605wong/index.html



自動スキャンツヌル





IBM DB2サヌバヌのセキュリティを蚭定する際の重芁なポむントは、セキュリティスキャナヌたずえば、DB2、MaxPatrolなどのNGS SQuirreLの䜿甚です。 スキャナヌは、芋萜ずした蚭定の脆匱性を明瀺的に瀺すか、分析に䟿利な圢匏で情報を衚瀺したす。

NGS SQuirreL for DB2



MaxPatrol









䟿利なク゚リずコマンド





デヌタベヌスマネヌゞャヌの蚭定を取埗したす。

select name, value from sysibmadm.dbmcfg





どちらか

db2 => get dbm cfg







デヌタベヌスマネヌゞャヌの蚭定を倉曎したす。

db2 => update database manager configuration using

:

db2 => db2stop force

db2 => db2start








:

select name, value from sysibmadm.dbcfg







db2 => get db cfg for



:

select username from table(sysfun.USERS()) AS t








:

select groupname from table(sysfun.GROUPS()) AS t







(, , ):

select AUTHID, AUTHIDTYPE from sysibmadm.AUTHORIZATIONIDS







:

select current server from sysibm.sysdummy1







:

select user from sysibm.sysdummy1







, :

select GROUPNAME from table(sysfun.groups_for_user('<username>')) as t







:

$ db2ls







:

$ db2ilist







:

select * from tabname fetch first 5 rows only














All Articles