シナリオ: 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
- 患者がその選択項目に対して行った決定。
以下の 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');