シナリオ: ExampleHMO における行および列アクセス制御の使用 - データベース表

このシナリオは、ExampleHMO データベースの 2 つの表 (PATIENT 表および PATIENTCHOICE 表) に注目します。

PATIENT 表には、患者の基本情報および健康情報が保管されます。 このシナリオでは、PATIENT 表内の次の列について検討します。
SSN
患者の保険番号。 患者の保険番号は、個人情報とみなされます。
NAME
患者の名前。 患者の名前は、個人情報とみなされます。
ADDRESS
患者の住所。 患者の住所は、個人情報とみなされます。
USERID
患者のデータベース ID。
PHARMACY
患者の医療情報。
ACCT_BALANCE
患者の請求書情報。
PCP_ID (PCP_ID)
患者の初期治療医のデータベース ID。
PATIENTCHOICE 表には、個々の患者のオプトインおよびオプトアウト情報が保管されています。この情報により、その患者が自分の健康情報を、この表に含まれている部外者に対して研究目的で開示するかどうかが決定されます。 このシナリオでは、PATIENTCHOICE 表内の次の列について検討します。
SSN
患者の保険番号を使用して、患者とその選択項目を突き合わせます。
CHOICE
患者が選択できる選択項目の名前。
VALUE
患者がその選択項目に対して行った決定。
例えば、123-45-6789, drug_research, opt-in の行は、SSN123-45-6789 である患者が、自分の情報を、医療研究の目的で開示することに同意していることを示します。

以下の SQL ステートメントの例は、PATIENT、PATIENTCHOICE、および ACCT_HISTORY の各表を作成します。 表に権限が付与され、データが挿入されます。

--Patient table storing information regarding patient 
CREATE TABLE PATIENT (
	SSN CHAR(11),
	USERID VARCHAR(18),
	NAME VARCHAR(128),
	ADDRESS VARCHAR(128),
	PHARMACY VARCHAR(250),
	ACCT_BALANCE DECIMAL(12,2) WITH DEFAULT,
	PCP_ID VARCHAR(18)
	);


--Patientchoice table which stores what patient opts 
--to expose regarding his health information

CREATE TABLE PATIENTCHOICE (
	SSN CHAR(11),
	CHOICE VARCHAR(128),
	VALUE VARCHAR(128)
);

--Log table to track account balance
CREATE TABLE ACCT_HISTORY(
	SSN 		CHAR(11),
	BEFORE_BALANCE	DECIMAL(12,2),
	AFTER_BALANCE	DECIMAL(12,2),
	WHEN 	DATE,
	BY_WHO	VARCHAR(20)
);


--Grant authority

GRANT SELECT, UPDATE ON TABLE PATIENT TO ROLE PCP;

GRANT SELECT ON TABLE PATIENT TO ROLE DRUG_RESEARCH;

GRANT SELECT, UPDATE ON TABLE PATIENT TO ROLE ACCOUNTING;
GRANT SELECT ON TABLE ACCT_HISTORY TO ROLE ACCOUNTING;

GRANT SELECT, UPDATE, INSERT ON TABLE PATIENT TO ROLE MEMBERSHIP;
GRANT INSERT ON TABLE PATIENTCHOICE TO ROLE MEMBERSHIP;

GRANT SELECT ON TABLE PATIENT TO ROLE PATIENT;

GRANT SELECT, ALTER ON TABLE PATIENT TO USER ALEX;

GRANT ALTER, SELECT ON TABLE PATIENT TO USER PAUL;
GRANT INSERT ON TABLE ACCT_HISTORY TO USER PAUL;

--Insert patient data

INSERT INTO PATIENT
  VALUES('123-55-1234', 'MAX', 'Max', 'First Strt', 'hypertension', 89.70,'LEE');
INSERT INTO PATIENTCHOICE
  VALUES('123-55-1234', 'drug-research', 'opt-out');


INSERT INTO PATIENT
  VALUES('123-58-9812', 'MIKE', 'Mike', 'Long Strt', null, 8.30,'JAMES');
INSERT INTO PATIENTCHOICE
  VALUES('123-58-9812', 'drug-research', 'opt-out');


INSERT INTO PATIENT
  VALUES('123-11-9856', 'SAM', 'Sam', 'Big Strt', null, 0.00,'LEE');
INSERT INTO PATIENTCHOICE
  VALUES('123-11-9856', 'drug-research', 'opt-in');


INSERT INTO PATIENT
  VALUES('123-19-1454', 'DUG', 'Dug', 'Good Strt', null, 0.00,'JAMES');
INSERT INTO PATIENTCHOICE
  VALUES('123-19-1454', 'drug-research', 'opt-in');