ST0105009
VIEWを使用したセキュリティー設定
Tips!
VIEWを効果的に使用することにより、セキュリティーを実装することができます。
アクセスするユーザーおよびアクセス時間によって参照可能データを制限する例を示します。
【事前準備】
(テスト用TABLE作成)
CREATE TABLE DBA.TESTTABLE_1
( TEST_ID INTEGER,
USER_NAME CHAR(128) );
(テスト用データ作成)
INSERT INTO DBA.TESTTABLE_1 VALUES ('1','USER_A');
INSERT INTO DBA.TESTTABLE_1 VALUES ('2','USER_A');
INSERT INTO DBA.TESTTABLE_1 VALUES ('3','USER_A');
INSERT INTO DBA.TESTTABLE_1 VALUES ('4','USER_B');
INSERT INTO DBA.TESTTABLE_1 VALUES ('5','USER_B');
INSERT INTO DBA.TESTTABLE_1 VALUES ('6','DBA');
(テスト用ユーザ作成)
GRANT CONNECT TO USER_A IDENTIFIED BY USER_A;
GRANT CONNECT TO USER_B IDENTIFIED BY USER_B;
【アクセスするユーザーによって制限する例】
WHERE句にUSER関数を利用し、現在アクセスしているユーザ名とUSER_NAMEフィールドの値が一致する
データのみを参照可能とします。
(VIEWの作成)
CREATE VIEW DBA.TESTVIEW_1 AS
SELECT *
FROM DBA.TESTTABLE_1
WHERE USER = USER_NAME;
(VIEWに対するSELECT権限付与(TABLEに対してのSELECT権限は与えません。))
GRANT SELECT ON DBA.TESTVIEW_1 TO PUBLIC;
ユーザ"DBA","USER_A","USER_B"でコネクト、以下のスクリプトを実行し、
それぞれの結果が異なることを確認してみてください。
SELECT * FROM DBA.TESTTABLE_1;
SELECT * FROM DBA.TESTVIEW_1;
【アクセスする時間によって制限する例】
WHERE句に、GETDATE関数を利用することにより、アクセス可能な時間を制限します。
(営業時間内のみアクセスを許可したい時等に応用可能です。)
以下の例では"TESTVIEW_2"が9:00->17:00まで参照可能、それ以外の
時間は"TESTVIEW_3"が参照可能とする例です。
(VIEWの作成)
CREATE VIEW DBA.TESTVIEW_2 AS
SELECT *
FROM DBA.TESTTABLE_1
WHERE DATEFORMAT(GETDATE(),'HH') BETWEEN 9 AND 17;
CREATE VIEW DBA.TESTVIEW_3 AS
SELECT *
FROM DBA.TESTTABLE_1
WHERE DATEFORMAT(GETDATE(),'HH') < 9
AND DATEFORMAT(GETDATE(),'HH') > 17 ;
ユーザ"DBA"でコネクト、以下のスクリプトを実行し、それぞれの結果が
異なることを確認してみてください。
SELECT * FROM TESTVIEW_2;
SELECT * FROM TESTVIEW_3;
|