• 検索結果がありません。

JOHN

ドキュメント内 柔軟なセキュリティー (ページ 38-50)

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

自分の顧客情報はINSERT可能

PETER担当の顧客情報はINSERT

ドキュメント内 柔軟なセキュリティー (ページ 38-50)

関連したドキュメント