安全版普通用户获取系统对象的访问权限

文章目录

环境

系统平台:Linux x86-64 Red Hat Enterprise Linux 7

版本:4.3.4.7

文档用途

三权分立下,普通用户无权访问系统对象(表、视图、方法等),并且无法单独的进行赋权操作,本文档介绍通过暂时关闭secure_level后按需赋权,再打开secure_level的方式解决该问题。 但是由于需要暂时关闭强制访问和三权分立,届时所有普通用户可以访问系统对象,存在一定的安全风险,需谨慎操作。

详细信息

问题

复制代码
三权分立下,普通用户无权访问系统对象(表、视图、方法等),并且无法单独的进行赋权操作。
sql 复制代码
   Login User: testu 

    highgo=> select * from user_tab_columns;

    ERROR:  permission denied for relation user_tab_columns

    

    Login User: sysdba 

    STATEMENT:  grant select on user_tab_columns to testu;

    ERROR:  Can't grant it to other role.

    

    Login User: syssso 

    STATEMENT:  grant select on user_tab_columns to testu;

    ERROR:  Can't grant it to other role.

分析

oracle_catalog模式下user_table_column视图,是记录表字段信息的系统视图,三权分立和强制访问控制开启下,sysdba之外的所有用户无权访问该模式下的对象并且无法进行授权操作,对于普通用户来说,此时的权限就是自己所拥有的对象的访问和控制权限。

瀚高安全数据库的安全策略,是由安全管理员配置的。安全策略中包含多个安全相关配置项,如下所示:

sql 复制代码
  highgo=> select show_secure_param();

              show_secure_param      

           -----------------------------/

         Secure level = table,    + -- 可选级别table\row\off。

         hg_SepOfPowers = on,    + --三权分立开关。

         hg_MAControl = on,      + --强制访问控制开关。

         hg_RowSecure = off,     + -- 行安全开关。

         hg_PwdValidUntil = 7,    + -- 密码有效期设置参数。

         hg_PwdErrorLock = 5,    + --密码错误次数设置参数。

         hg_ShowLoginInfo = on,   + -- 用户登陆信息开关。

         hg_ClientNoInput = 30 min, + --超时断开设置参数。

         hg_PwdRule = on,       + --密码复杂度开关。

        (1 row)

三权分立开关、强制访问控制开关、行安全开关不能单独开启或者关闭,由Secure level统一管理,三个可选的参数,其中table代表行安全开关关闭,其余两个开启,row代表三个都开启,off代表三个都关闭。

处理

syssso登陆,关闭secure_level。

sql 复制代码
 highgo=> select set_secure_level('off');

          set_secure_level              

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

         Set security level to 'off' successfully.

        (1 row)

sysdba登陆,按需赋权。

sql 复制代码
  highgo=> \c highgo sysdba

        highgo=# grant select on user_tab_columns to testu;

        GRANT

注:如果使用grant select on user_tab_columns to PUBLIC;可以对所有已存在的用户赋权,并对后来创建的所有用户仍然有效。

syssso登陆,开启secure_level。

sql 复制代码
  highgo=> \c highgo syssso  --可能需要reload或重启

        You are now connected to database "highgo" as user "syssso".

        highgo=> select set_secure_level('table');

                      set_secure_level               

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

         Set security level to 'table' successfully.

        (1 row)

测试。

sql 复制代码
Login User: testu 

Login time: 2020-03-31 22:38:19.631527-07 

Login Address: [local] 

Last Login Status: SUCCESS 

Login Failures: 0 

Valied Until: 2020-04-07 18:53:42-07 

-------------------------------------------/

psql (4.3.4.7)

Type "help" for help.

highgo=> select * from user_tab_columns;

table_name    |column_name   | data_type         | data_length | data_precision | data_scale | nullable | column_id | data_upgraded |   table_schema    

---------------------------------------+-------------------------------------+------

 pg_proc     | proname | name   |   |      |     | NO       |         1 | YES    | pg_catalog

 pg_proc     | pronamespace     | oid   |       |    |     | NO   |   2 | YES    | pg_catalog

select show_secure_param()查询安全管理参数,关闭前和开启后没有区别。

相关推荐
我是一颗柠檬7 小时前
【MySQL全面教学】MySQL面试高频考点汇总Day15(2026年)
数据库·后端·mysql·面试
凯瑟琳.奥古斯特8 小时前
高阶子查询题目精炼
开发语言·数据库·python·职场和发展·数据库开发
身如柳絮随风扬8 小时前
数据库读写分离:从原理到实战,构建高并发系统
数据库·mysql
提笔了无痕9 小时前
RAG存储策略中.md格式的切片与存储怎么处理
数据库·ai·rag
陳土9 小时前
DuckDB精读——基于Getting started with DuckDB
数据库·oracle
凯瑟琳.奥古斯特10 小时前
数据库原理选择题精选
数据库·python·职场和发展
码农小旋风10 小时前
使用 ChatGPT 聚合站前,先看安全和隐私判断清单
人工智能·安全·自然语言处理·chatgpt·claude
曹牧10 小时前
C#:主线程能够捕获到子线程中的异常
开发语言·数据库·c#
Bruce_Liuxiaowei10 小时前
2026年5月第5周网络安全形势周报
人工智能·安全·web安全·ai·智能体