更新时间:2026-08-06 GMT+08:00
操作步骤与结果验证
示例1:user1用户查询表t1场景
- 管理员用户通过客户端登录数据库。
- 创建表t1,插入数据。
gaussdb=> CREATE TABLE public.t1(id int); CREATE TABLE gaussdb=> INSERT INTO public.t1 values(1); INSERT 0 1
- 赋予用户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
- 方法1:赋予用户user1表t1的查询权限。
- user1用户执行以下语句。返回结果查询成功,即user1拥有表t1的查询权限。
gaussdb=> SELECT * FROM public.t1; id ---- 1 (1 row)
示例2:强制访问控制
- 打开强制访问控制检查的开关,设置GUC参数enable_mac_check=on。
- 系统管理员通过客户端登录数据库。
- 创建表t1,插入数据。
gaussdb=> CREATE TABLE public.t1(id int); CREATE TABLE gaussdb=> INSERT INTO public.t1 values(1); INSERT 0 1
- 创建安全标签。
- 创建一个安全标签,标志信息等级为公开,范围为二层和四层。
gaussdb=# CREATE SECURITY LABEL label1 'L1:G2,G4'; - 创建一个安全标签,标志信息等级为秘密,范围为二层到四层。
gaussdb=# CREATE SECURITY LABEL label2 'L2:G2-G4'; - 创建一个安全标签,标志信息等级为绝密,范围为一层到五层。
gaussdb=# CREATE SECURITY LABEL label3 'L3:G1-G5';
- 创建一个安全标签,标志信息等级为公开,范围为二层和四层。
- 应用安全标签。
- 对用户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';
- 对用户user1应用安全标签label1,表示用户user1对应的信息等级为公开,范围为二层和四层。
- 授予用户user1和user2数据表t1的查询和插入操作权限。
gaussdb=# GRANT SELECT,INSERT ON t1 TO user1,user2; - 用户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
- 用户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