该场景演示 ExampleBANK,这是一个拥有庞大客户群和许多分行的银行机构,它是行权限和列掩码的用户。ExampleBANK 使用行权限和列掩码来确保其数据库策略可以反映公司对隐私和安全性的要求,以及管理业务目标。这些要求可以概括如下:
• 柜员只可以看到自己的分行客户
• 客户服务代表和电话营销员可以看到所有客户
• 账户号码只能被客户服务代表在使用账户">更新应用程序时访问。此应用程序通过存储过程 ACTPROCS.PROCUPD 识别。否则,只有账户号码的最后四个数字是可见的。其余数字均用 X 替换。
客户信息存储在一个名为 CUSTOMER 的表中,而银行员工信息存储在一个名为 INTERNAL_INFO 的表中。创建这两个表的 SQL 语句如下:
CREATE TABLE EXAMPLEBANK.CUSTOMER ( ACCOUNT VARCHAR(19), NAME VARCHAR(20), INCOME INTGER, BRANCH CHAR(1) ); CREATE TABLE EXAMPLEBANK.INTERNAL_INFO ( HOME_BRANCH CHAR(1), EMP_ID VARCHAR(10) );
柜员、客户服务代表和电话营销员分别是数据库角色 TELLER、CSR 和 TELEMARKETER 的成员。对 CUSTOMER 表的 SELECT 特权被授予这三个角色。用户 Amy、Pat 和 Haytham 分别是柜员、客户服务代表和电话营销员。此外,过程 ACTPROCS.PROCUPD 上的 EXECUTE 特权被授予 CSR 角色。用于建立这些角色的 SQL 语句如下:
CREATE ROLE TELLER; GRANT SELECT ON EXAMPLEBANK.CUSTOMER TO ROLE TELLER; GRANT ROLE TELLER TO USER AMY; CREATE ROLE CSR; GRANT SELECT ON EXAMPLEBANK.CUSTOMER TO ROLE CSR; GRANT EXECUTE ON PROCEDURE ACTPROCS.PROCUPD TO ROLE CSR; GRANT ROLE CSR TO USER PAT; CREATE ROLE TELEMARKETER; GRANT SELECT ON EXAMPLEBANK.CUSTOMER TO ROLE TELEMARKETER; GRANT ROLE TELEMARKETER TO USER HAYTHAM;
我们假设表 CUSTOMER 和 INTERNAL_INFO 已被填充,并且其内容如下:
ACCOUNT NAME INCOME BRANCH 1111-2222-3333-4444 Alice 22,000 A 2222-3333-4444-5555 Bob 71,000 B 3333-4444-5555-6666 Carl 123,000 B 4444-5555-6666-7777 David 172,000 C
表 1:CUSTOMER 表
EMP_ID HOME_BRANCH Amy A Pat B Haytham C
表 2:INTERNAL_INFO 表