CData Virtualityには、インストール版とフルマネージドクラウド(SaaS)版がございます。入手および初期設定方法は以下の記事をご参照ください。
- CData Virtuality - 製品のインストール、および、初期設定方法 (Windows版)
- CData Virtuality - 無償トライアル、および、初期設定方法 (SaaS版)
ロールベースでのアクセス制御について
CData Virtualityでは、任意の「ロール(Role)」を任意の「ユーザ(User)」に割り当てることが出来ます。
一方で、仮想データベース内の任意の「リソースパス(Resoure Path)」に対して「アクセス権(Access right)」を設定した「許可(Permission)」を作成することが出来ます。
作成した「ロール(Role)」に「許可(Permission)」を割り当てることでシンプルで運用を実現するとともに、行ベースでの許可やカラムマスキングなど、強力なデータガバナンスを効かせたアクセス制御を実現することが出来ます。
ロールの作成
CData Virtuality Web Interfaceにてユーザやロールの作成、アクセス権限の設定を行うには、右上のログインユーザのアイコンから「User Management」にアクセスします。
ロールを新規に作成するにはRole Managementボタンをクリックします。
Role Management画面が開き、ビルトインされているロールのリストが表示されます。「New Role」ボタンをクリックします。
ロール名を入力(本例では「Sales01」)してSaveします。
リストに作成したロールが追加されていればロールの作成は成功です。
ユーザの作成
「User Management」画面を開きます。ビルトインされているユーザのリストが表示されます。「+New User」ボタンをクリックします。
Create new userダイアログが表示されるので以下の項目をセットしてSaveします。
- Name : ユーザ名(本例では「YamadaTaro」)
- Password
- Role : 「ロールの作成」の章で作成したロール(本例では「Sales01」)
リストに作成したユーザが追加されていればユーザの作成は成功です。
許可(Permission)の作成
作成したロールに許可(Permission)を作成していきます。本手順では上記「ロールの作成」の章で作成したロール(本例では「Sales01」)に対してサンプルデータベースの「PostgreSQL」の「Read(R)」権限を付与します。
「Role Management」画面を開き、「ロールの作成」の章で作成したロール(本例では「Sales01」)右横のアイコンで開くと同ロールに火もつく許可(Permission)が表示されますので「+New Permission」ボタンをクリックします。
「Add a new Permission」ダイアログが表示されます。「Resource Name」右横の検索ボタンをクリックします。
「Select Resource」ダイアログが表示されるので「Search」ボックスに「Postgres」と入力します。キーワードに合致するメタデータがツリーとして表示されます。
本手順では「psotgres(schema)」を選択してください。「Add a new Permission」ダイアログに戻り、「Resource Name」に選択した「postgres」がセットされていることを確認して、アクセス権(Permission)を選択します。今回は「READ」のみのチェックをONにしてSaveボタンをクリックします。
Permissionが追加されました。これにより、「Sales01」ロールのユーザは、PostgreSQLに対して読み取り(READ)のみアクセス可能となります。
実際に「Sales01」ロールを持つユーザ(本例では「YamadaTaro」)でJDBCドライバでアクセスしてみましょう。DBVisualizerからのアクセス方法はこちらの記事をご参照ください。
スキーマリストを表示すると、「SYS」「pg_catalog」「postgres」のみが表示されます。もう一つのサンプルデータベースの「mysql」やその他のシステムスキーマ(「INFOMATION_SCHEMA」や「SYSADMIN」など)にはアクセス出来なくなっています。
行レベルセキュリティの作成
次に「Sales01」ロールのユーザがサンプルのPostgreSQL内のCustomerテーブルに対して「Country」カラムが「Japan」がセットされている行のみアクセス出来るようにしてみましょう。まず初めに、本設定を行う前に「Customer」テーブルにアクセスしてみます。「Country」カラムの値を見ると複数の国名のデータが格納されていることを確認できます。
「Role Management」画面を開き、ロール(本例では「Sales01」)の許可(permission)リストを開き、「+New Permission」ボタンをクリックします。
「Add a new Pwemission」ダイアログでResource Nameの検索ボタンをクリック、「Select Resource」ダイアログの検索ボックスに「psotgres」と入力して、PostgreSQL内の「cusotomer(table)」を選択します。
「Resource Name」に「postgres.Customers」がセットされます。テーブルを選択すると「Row-base security」ボックスが追加されます。アクセス権(Permissions)に読み取り(READ)のみをセットして「Row-base security」ボックスに「country='Japan'」条件をセットしてSaveボタンをクリックします。
許可(Permission)が追加されていることを確認します。
これで想定では、日本の顧客のみが参照できるようになります。再度、DBVisualizerからJDBC Driver経由でPostgreSQLのCustomerテーブルにアクセスしてみましょう。
「country='Japan'」条件が効いた日本の顧客のみが参照できていることが確認できたら成功です。
カラムマスキングの作成
次に「Sales01」ロールのユーザがサンプルのPostgreSQL内の「bankinginfocustomer」テーブルに含まれる「bankaccount(口座番号)」を条件に応じて秘匿化(マスキング)してみます。まず初めに、本設定を行う前に「bankinginfocustomer」テーブルにアクセスしてみます。「bankaccount」カラムの値を参照することが出来て参照可否を制御できる「showbankaccount」というカラムが存在することを確認できます。
本手順では、個人情報保護用の新しいロール(本例では「pii」)を作成します。
「+New Permission」で「postgres(schema) > bankinginfocustomer(table)>bankaccount(column)」を選択します。
アクセス権(Permissions)は読み取り(READ)のみ、Column masking内の項目には以下のテキストをセットします。
- Condition : showbankaccount='false'
- Mask : repeat('*', length(bankaccount))
- Mask Order : 0
これにより、showbankaccoutがfalseのレコードのみ、口座番号として登録されている文字数をアスタリスク(*)に置換して表示されるようになるはずです。「Save」ボタンをクリックして作成したロール(本例では「pii」)内のPermissionとして追加されていることを確認します。
ユーザ(本例では「YamadaTaro」)に作成したロール(本例では「pii」)を追加します。
再度、DBVisualizerからJDBC Driver経由でPostgreSQLのbankinginfocustomerテーブルにアクセスしてみましょう。
「showbankaccount='false'」のレコードのbankaccountがアスタリスクに置換されて秘匿化されていることが確認できたら成功です。
まとめ
本記事では、ユーザに割り当てたロールで仮想データベース内のデータへのアクセス権を制御する方法をご紹介しました。CData Virtualityはフルマネージドクラウド(SaaS)版、および、インストール版で無償トライアルを提供しています。無償トライアルを始められたい方や設定を進める中でご不明な点が出てきた際には弊社テクニカルサポートまでお問い合わせください。