
# 操作步骤与结果验证
#### 示例1：user1用户查询表t1场景
1. 管理员用户通过客户端登录数据库。
2. 创建表t1，插入数据。 
   ```
   gaussdb=> CREATE TABLE public.t1(id int);
   CREATE TABLE
   gaussdb=> INSERT INTO public.t1 values(1);
   INSERT 0 1
   ```
   
   
3. 赋予用户user1访问表t1的权限。 
   - 方法1：赋予用户user1表t1的查询权限。
     ```
     gaussdb=>GRANT SELECT ON table public.t1 TO user1;
     GRANT
     ```
     
   
   
   
   - 方法2：创建角色role1。
     ```
     gaussdb=> CREATE ROLE role1 password '********';
     CREATE ROLE
     ```
     赋予角色role1表t1的查询权限。
     ```
     gaussdb=> GRANT SELECT ON table public.t1 TO role1;
     GRANT
     ```
     赋予角色role1给user1。
     ```
     gaussdb=> GRANT role1 TO user1;
     GRANT ROLE
     ```
     
   
   - **方法3：** 赋予user1系统管理员权限（三权分立关闭场景下）。
     ```
     gaussdb=> ALTER USER user1 sysadmin;
     ALTER ROLE
     ```
     
   
   - **方法4：** 赋予user1用户SELECT ANY TABLE权限。
     ```
     gaussdb=> GRANT SELECT ANY TABLE TO user1;
     GRANT
     ```
     
   
   
   
   
4. user1用户执行以下语句。返回结果查询成功，即user1拥有表t1的查询权限。 
   ```
   gaussdb=> SELECT * FROM public.t1;
   id
   ----
   1
   (1 row)
   ```
   
   
 
#### 示例2：强制访问控制
1. 打开强制访问控制检查的开关，设置GUC参数enable_mac_check=on。
2. 系统管理员通过客户端登录数据库。
3. 创建表t1，插入数据。 
   ```
   gaussdb=> CREATE TABLE public.t1(id int);
   CREATE TABLE
   gaussdb=> INSERT INTO public.t1 values(1);
   INSERT 0 1
   ```
   
   
4. 创建安全标签。 
   - 创建一个安全标签，标志信息等级为公开，范围为二层和四层。
     ```
     gaussdb=# CREATE SECURITY LABEL label1 'L1:G2,G4';
     ```
     
   
   - 创建一个安全标签，标志信息等级为秘密，范围为二层到四层。
     ```
     gaussdb=# CREATE SECURITY LABEL label2 'L2:G2-G4';
     ```
     
   
   - 创建一个安全标签，标志信息等级为绝密，范围为一层到五层。
     ```
     gaussdb=# CREATE SECURITY LABEL label3 'L3:G1-G5';
     ```
     
   
   
   
   
5. 应用安全标签。 
   - 对用户user1应用安全标签label1，表示用户user1对应的信息等级为公开，范围为二层和四层。
     ```
     gaussdb=# SECURITY LABEL ON USER user1 is 'label1';
     ```
     
   
   - 对用户user2应用安全标签label3，表示用户user2对应的信息等级为绝密，范围为一层到五层。
     ```
     gaussdb=# SECURITY LABEL ON USER user2 is 'label3';
     ```
     
   
   - 对表t1应用安全标签label2，表示表t1对应的信息等级为秘密，范围为二层到四层。
     ```
     gaussdb=# SECURITY LABEL ON TABLE t1 is 'label2';
     ```
     
   
   
   
   
6. 授予用户user1和user2数据表t1的查询和插入操作权限。 
   ```
   gaussdb=# GRANT SELECT,INSERT ON t1 TO user1,user2;
   ```
   
   
7. 用户user1登录数据库执行SELECT和INSERT操作，查询失败，插入成功，符合强制访问控制策略规则。 
   ```
   gaussdb=> SELECT * FROM t1;
   ERROR:  The operation permission on relation t1 is denied.
   DETAIL:  N/A
   gaussdb=> INSERT INTO t1 VALUES (1);
   INSERT 0 1
   ```
   
   
8. 用户user2登录数据库执行SELECT和INSERT操作，查询成功，插入失败，符合强制访问控制策略规则。 
   ```
   gaussdb=> SELECT * FROM t1;
   id
   -----
   1
   (1 row)
   gaussdb=> INSERT INTO t1 VALUES (1);
   ERROR:  The operation permission on relation t1 is denied.
   DETAIL:  N/A
   ```
   
   
 
