TECHNOLOGY

Tips !(使用上のテクニック)

対象バージョン : Adaptive Server Anywhere 6.0、7.0
対象OS : Windows95/98/ME ,WindowsNT/2000

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;