方案:使用行和列访问控制的 ExampleHMO - 数据查询

借助行和列访问控制,具有不同角色的人可以从相同的数据库查询中获得不同的结果集。 例如,具有 DATAACCESS 权限的数据库管理员 Peter 无法查看 PATIENT 表中的任何数据。

Peter、Bob、Dr. Lee、Tom、Jane 和 John 各自连接至数据库并尝试执行以下 SQL 查询:
SELECT SSN, USERID, NAME, ADDRESS, PHARMACY, ACCT_BALANCE, PCP_ID FROM PATIENT;
查询结果将随运行该查询的用户而有所不同。 由 Alex 创建的行和列访问控制将应用于这些查询。
以下是 Peter 看到的结果集:
SSN         USERID    NAME      ADDRESS     PHARMACY    ACC_BALANCE PCP_ID

----------- --------- --------- ----------- ----------- ----------- -----------

  0 record(s) selected.
即使该表中有数据并且 Peter 是数据库管理员,但他并不具有查看所有数据的权限。
以下是 Bob 看到的结果集:
SSN         USERID    NAME     ADDRESS     PHARMACY    ACC_BALANCE PCP_ID

----------- --------- --------- ----------- ----------- ----------- ------
123-45-6789 BOB       Bob      123 Some St.XXXXXXXXXXX 0.00        LEE

1 record(s) selected.
Bob 作为患者只能看到他自己的数据。 Bob 属于 PATIENT 角色。 已对他隐藏 PHARMACY 和 ACC_BALANCE 列数据。
以下是 Dr. Lee 看到的结果集:
SSN         USERID   NAME     ADDRESS     PHARMACY            ACC_BALANCE PCP_ID

----------- -------- -------- ----------- ------------------- ----------- ------
123-55-1234 MAX      Max      First Strt  hypertension        0.00        LEE
123-11-9856 SAM      Sam      Big Strt    High blood pressure 0.00        LEE
123-45-6789 BOB      Bob      123 Some St.codeine             0.00        LEE

3 record(s) selected.
Dr. Lee 只能看到他主治的患者的数据。 Dr. Lee 属于 PCP 角色。 对他隐藏了 ACC_BALANCE 列数据。
以下是 Tom 看到的结果集:
SSN         USERID   NAME     ADDRESS     PHARMACY    ACC_BALANCE PCP_ID

----------- -------- -------- ----------- ----------- ----------- -----------
123-55-1234 MAX      Max      First Strt  XXXXXXXXXXX 0.00        LEE
123-58-9812 MIKE     Mike     Long Strt   XXXXXXXXXXX 0.00        JAMES
123-11-9856 SAM      Sam      Big Strt    XXXXXXXXXXX 0.00        LEE
123-19-1454 DUG      Dug      Good Strt   XXXXXXXXXXX 0.00        JAMES
123-45-6789 BOB      Bob      123 Some St.XXXXXXXXXXX 0.00        LEE

5 record(s) selected.
Tom 可以看到所有成员。 Tom 属于 MEMBERSHIP 角色。 他不具有查看 PHARM ACY 和 ACC_BALANCE 列中的任何数据的特权。
以下是 Jane 看到的结果集:
SSN         USERID   NAME     ADDRESS     PHARMACY            ACC_BALANCE PCP_ID

----------- -------- -------- ----------- ------------------- ----------- -------
XXX-XX-1234 MAX      Max      First Strt  XXXXXXXXXXX         0.00        LEE
XXX-XX-9812 MIKE     Mike     Long Strt   XXXXXXXXXXX         0.00        JAMES
XXX-XX-9856 SAM      Sam      Big Strt    High blood pressure 0.00        LEE
XXX-XX-1454 DUG      Dug      Good Strt   Influenza           0.00        JAMES
XXX-XX-6789 BOB      Bob      123 Some St.codeine             0.00        LEE

5 record(s) selected.
Jane 可以看到所有成员。 她属于 DRUG_RESEARCH 角色。 对她隐藏了 SSN 和 ACC_BALANCE 列数据。 仅当患者同意与药品研究公司共享他们的数据时,才会提供 PHARMACY 数据。
以下是 John 看到的结果集:
SSN         USERID   NAME     ADDRESS     PHARMACY    ACC_BALANCE PCP_ID

----------- -------- -------- ----------- ----------- ----------- --------
123-55-1234 MAX      Max      First Strt  XXXXXXXXXXX 89.70       LEE
123-58-9812 MIKE     Mike     Long Strt   XXXXXXXXXXX 8.30        JAMES
123-11-9856 SAM      Sam      Big Strt    XXXXXXXXXXX 0.00        LEE
123-19-1454 DUG      Dug      Good Strt   XXXXXXXXXXX 0.00        JAMES
123-45-6789 BOB      Bob      123 Some St.XXXXXXXXXXX 9.00        LEE

5 record(s) selected.
John 可以看到所有成员。 他属于 ACCOUNTING 角色。 对他隐藏了 PHARMACY 列数据。