更新时间:2026-08-06 GMT+08:00
分享

操作步骤与结果验证

示例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

相关文档