CUSTID EMPNAME CUSTNAME ACCOUNT BALANCE
シンプル・シナリオ 実行結果 ( 1/12 )
• ユーザーを OS ユーザーに作成する(例は Windows )
シンプル・シナリオ 実行結果 ( 2/12 )
• 権限の付与
C:¥labscript¥rcac>db2 -tvf 01crtuser.sql connect to rcacdb user Administrator using データベース接続情報
<省略>
grant secadm,dbadm on database to user adam DB20000I SQL コマンドが正常に完了しました。
select substr(grantor,1,10)grantor, substr(grantee,1,10)grantee, connectauth, CREATETABAUTH, dbadmauth, securityadmauth from syscat.dbauth
GRANTOR GRANTEE CONNECTAUTH CREATETABAUTH DBADMAUTH SECURITYADMAUTH --- --- --- --- --- --- SYSIBM ADMINISTRA N N Y Y
SYSIBM PUBLIC Y Y N N ADMINISTRA ADAM N N Y Y 3 レコードが選択されました。
シンプル・シナリオ 実行結果 ( 3/12 )
• ロールの作成
C:¥labscript¥rcac>db2 -tvf 02crtrole.sql connect to rcacdb user adam using
データベース接続情報
<省略>
create role ACCOUNTANT
DB20000I SQL コマンドが正常に完了しました。
create role CUSTOMER
DB20000I SQL コマンドが正常に完了しました。
create role MANAGER
DB20000I SQL コマンドが正常に完了しました。
grant role ACCOUNTANT to user BOB
DB20000I SQL コマンドが正常に完了しました。
grant role CUSTOMER to user MARY
DB20000I SQL コマンドが正常に完了しました。
grant role MANAGER to user JOHN
DB20000I SQL コマンドが正常に完了しました。
シンプル・シナリオ 実行結果 ( 4/12 )
• テスト表の作成とデータの挿入
C:¥labscript¥rcac>db2 -tvf 03crttbl.sql connect to rcacdb user db2admin using
<省略>
create table sales(custid char(3), empname char(10), customer char(10), account char(10), balance int)
DB20000I SQL コマンドが正常に完了しました
insert into sales values('001','MARY','SALLY','0123-88888',100000) DB20000I SQL コマンドが正常に完了しました。
insert into sales values('002','MARY','MICHAEL','0124-99999',5000) DB20000I SQL コマンドが正常に完了しました。
insert into sales values('003','PETER','EMILY','0125-33333',0) DB20000I SQL コマンドが正常に完了しました。
select * from sales
CUSTID EMPNAME CUSTOMER ACCOUNT BALANCE --- --- --- --- --- 001 MARY SALLY 0123-88888 100000 002 MARY MICHAEL 0124-99999 5000
シンプル・シナリオ 実行結果 ( 5/12 )
• 行のフィルタリング
C:¥labscript¥rcac>db2 -tvf 04crtrcac.sql connect to rcacdb user adam using
<省略>
create permission cust on db2admin.sales for rows where ( verify_role_for_user(SESSION_USER,‘ACCOUNTANT’)=1 ) OR
( verify_role_for_user(SESSION_USER,‘CUSTOMER’) =1 AND
db2admin.sales.empname=SESSION_USER ) OR
( verify_role_for_user(SESSION_USER,'MANAGER')=1 ) enforced for all access enable
DB20000I SQL コマンドが正常に完了しました。
alter table db2admin.sales activate row access control DB20000I SQL コマンドが正常に完了しました。
表にアクセスしたユーザーのロールがCUSTOMERの場合は、“SALES表のEMPNAME = アクセスした ユーザー” の行のみ表示する。
表にアクセスしたユーザーのロールがACCUNTANTやMANAGERであれば全てを表示する。
シンプル・シナリオ 実行結果 ( 6/12 )
• 列のマスキング
create mask account_mask on db2admin.sales for column account return case when verify_role_for_user(SESSION_USER,'ACCOUNTANT')=1
then 'XXXX-XXXXX‘ else account end enable
DB20000I SQL コマンドが正常に完了しました。
alter table db2admin.sales activate column access control DB20000I SQL コマンドが正常に完了しました。
表にアクセスしたユーザーのロールがACCOUNTANTの場合はSALES表のACCOUNT列 を’XXXX-XXXXX’で表示する。
その他のロールに対しては、マスキングは行わない。
MASK作成後、ALTER TABLE文にて列のマスキングを有効にします。
シンプル・シナリオ 実行結果 ( 7/12 )
• テスト表へのアクセス権限
C:¥labscript¥rcac>db2 -tvf 05grant.sql connect to rcacdb user adam using
<省略>
grant select on db2admin.sales to role CUSTOMER DB20000I SQL コマンドが正常に完了しました。
grant update on db2admin.sales to role CUSTOMER DB20000I SQL コマンドが正常に完了しました。
grant insert on db2admin.sales to role CUSTOMER DB20000I SQL コマンドが正常に完了しました。
grant delete on db2admin.sales to role CUSTOMER DB20000I SQL コマンドが正常に完了しました。
grant select on db2admin.sales to role MANAGER DB20000I SQL コマンドが正常に完了しました。
<省略>
grant select on db2admin.sales to role ACCOUNTANT DB20000I SQL コマンドが正常に完了しました。
<省略>
シンプル・シナリオ 実行結果 ( 8/12 )
• データの参照
• 各ユーザーが全て同じ SQL を実行。ロール別に列フィルタリングや マスキングが行われているため、同じ SQL を実行しても、ユーザー に応じて見えるデータが異なる 。
C:¥labscript¥rcac>db2 -tvf 06runsql.sql connect to rcacdb user john using
<省略>
select * from db2admin.sales
CUSTID EMPNAME CUSTOMER ACCOUNT BALANCE --- --- --- --- --- 001 MARY SALLY 0123-88888 100000 002 MARY MICHAEL 0124-99999 5000 003 PETER EMILY 0125-33333 0
3 レコードが選択されました。
管理者のJOHNがSALES表に 対して「SELECT * 」を実行。
管理者のため、全てのデータ
を見ることができる。
シンプル・シナリオ 実行結果 ( 9/12 )
• データ参照
connect to rcacdb user mary using
<省略>
select * from db2admin.sales
CUSTID EMPNAME CUSTOMER ACCOUNT BALANCE --- --- --- --- --- 001 MARY SALLY 0123-88888 100000 002 MARY MICHAEL 0124-99999 5000
2 レコードが選択されました。
顧客担当のMARYがSALES表に 対して「SELECT * 」を実行。
MARYは自分が担当する顧客の
情報しか見れない。
シンプル・シナリオ 実行結果 ( 10/12 )
• データ参照
connect to rcacdb user bob using
<省略>
select * from db2admin.sales
CUSTID EMPNAME CUSTOMER ACCOUNT BALANCE --- --- --- --- --- 001 MARY SALLY XXXX-XXXXX 100000 002 MARY MICHAEL XXXX-XXXXX 5000 003 PETER EMILY XXXX-XXXXX 0
3 レコードが選択されました。
経理担当のBOBがSALES表に対 して「SELECT * 」を実行。
BOBは顧客の口座番号を見ること は許されていないため、
ACCOUNT 列が「 XXXX-XXXXX 」
にマスキングされている。
シンプル・シナリオ 実行結果 ( 11/12 )
• データの更新
• PERMISSIONを作成するだけで、許可の無いデータに対して更新ができ なくなる
• 例では、 MARY が自分の担当する顧客データを表に挿入することはできる が、自分の顧客以外のデータを挿入しようとした場合や、自分の顧客以外 のデータを更新した場合にエラーになる。
C:¥labscript¥rcac>db2 -tvf 07insert.sql connect to rcacdb user mary using
<省略>
insert into db2admin.sales values(‘020’,‘MARY’,‘SAM’,‘0125-33666’,9000) DB20000I SQL コマンドが正常に完了しました。
insert into db2admin.sales values('010','PETER','SCOTT','0125-33444',500)
DB21034E コマンドが、有効なコマンド行プロセッサー・コマンドでないため、 SQLステートメ ントとして処理されました。 SQL 処理中に、次のエラーが返されました。SQL20471N INSERT または UPDATE ステートメントは、結果の行が行の許可を満たさないため失敗しました。
SQLSTATE=22542