Oracle23ai新特性SCHEMA级授权

csdn推荐

Oracle23ai新特性SCHEMA级授权 1、需求简介

Oracle23ai之前的版本,想要实现一个用户可以访问另一个用户下的所有表,需要把该用户下所有的表的访问权限依次授权给该用户。这一方式存在的问题是,每当源端用户新创建一个表时,还需要额外地给相关用户做授权。

Oracle 23ai的SCHEMA级授权特性较简单易用的解决了以上问题。通过把SELECT ANY TABLE ON SCHEMA给到另外一个用户,来将原始用户查询的任何权限给到新的用户。

2、用户TESTUSER的表及查询信息

TESTUSER@FREEPDB1> select tname from tab;
TNAME
--------------------------------------------------------------------------------
PERSONNEL
T_MULTIROWS
T_IDENTITY
TESTUSER@FREEPDB1> select * from T_MULTIROWS;
        ID INFONAME
---------- ------------------------------
         1 oracle23c
         2 oracle23ai
         3 mysql8.4
TESTUSER@FREEPDB1> select * from T_IDENTITY;
        ID NAMEINFO                       SYSGUID
---------- ------------------------------ ------------------------------------
         1 generated by                   18EFA5E23DDC0BA1E063E650A8C05A76
         2 DEFAULT                        18EFA5E23DDD0BA1E063E650A8C05A76
         3 AS identity                    18EFA5E23DDE0BA1E063E650A8C05A76
         4 values meger                   18EFA5E23DE10BA1E063E650A8C05A76
         5 䶮中国字                        18EFA5E23DE00BA1E063E650A8C05A76
         7 table                          18EFA5E23DE20BA1E063E650A8C05A76
         8 expressions                    18EFA5E23DE30BA1E063E650A8C05A76
7 rows selected.

3、创建devuser1用户

SYS@FREEPDB1> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
/opt/oracle/oradata/FREE/FREEPDB1/system01.dbf
/opt/oracle/oradata/FREE/FREEPDB1/sysaux01.dbf
/opt/oracle/oradata/FREE/FREEPDB1/undotbs01.dbf
/opt/oracle/oradata/FREE/FREEPDB1/users01.dbf
/opt/oracle/oradata/FREE/FREEPDB1/testusertbs1.dbf
-- 创建表空间
SYS@FREEPDB1> create tablespace devuser1tbs datafile '/opt/oracle/oradata/FREE/FREEPDB1/devuser1tbs.dbf' size 8M autoextend off;
Tablespace created.
-- 创建devuser1 用户
SYS@FREEPDB1> create user devuser1 identified by oracle default tablespace devuser1tbs ;
User created.
-- 授权create session
SYS@FREEPDB1> grant create session to devuser1;
Grant succeeded.
-- 通过把SELECT ANY TABLE ON SCHEMA给到新建的用户devuser1
SYS@FREEPDB1> grant select any table on schema testuser to devuser1;
Grant succeeded.

4、登陆检查角色及权限

SYS@FREEPDB1> conn devuser1/oracle@FREEPDB1
Connected.
DEVUSER1@FREEPDB1> select * from session_privs;
PRIVILEGE
------------------------------
CREATE SESSION
DEVUSER1@FREEPDB1> select * from session_roles;
no rows selected
-- 用户devuser1查看testuser.T_MULTIROWS
DEVUSER1@FREEPDB1> select * from testuser.T_MULTIROWS;
        ID INFONAME
---------- ------------------------------
         1 oracle23c
         2 oracle23ai
         3 mysql8.4
-- 发现可以正常访问

5、授权后新增表及视图确认能否正常访问

授权后,用户devuser1除了获得CREAT SESSION的系统权限外,没有被授予任何其他系统权限和系统角色。

SCHEMA级授权是通过对象级的继承权限获得。此时,被授权的用户可以看到原始授权用户下所有的表以及数据。

-- testuser用户创建一个视图v_grant_s_a和一个表t_grant_s_a
-- 视图v_grant_s_a创建
TESTUSER@FREEPDB1> create view v_grant_s_a as  select * from (values(1,'grant'),(2,'select any table'),(3,'on schema')) T (id,nameinfo);
View created.
TESTUSER@FREEPDB1> select * from v_grant_s_a;
        ID NAMEINFO
---------- ------------------------------
         1 grant
         2 select any table
         3 on schema
-- 表t_grant_s_a创建
TESTUSER@FREEPDB1> create table t_grant_s_a as  select * from (values(1,'grant'),(2,'select any table'),(3,'on schema')) T (id,nameinfo);
Table created.
TESTUSER@FREEPDB1> select * from t_grant_s_a;
        ID NAMEINFO
---------- ------------------------------
         1 grant
         2 select any table
         3 on schema
-- devuser1用户查询testuser用户的新建的视图
TESTUSER@FREEPDB1> conn DEVUSER1/oracle@FREEPDB1
Connected.
DEVUSER1@FREEPDB1> select * from testuser.t_grant_s_a;
        ID NAMEINFO
---------- ------------------------------
         1 grant
         2 select any table
         3 on schema
DEVUSER1@FREEPDB1> select * from testuser.v_grant_s_a;
        ID NAMEINFO
---------- ------------------------------
         1 grant
         2 select any table
         3 on schema

Oracle 23ai中,Oracle引入了架构级(SCHEMA级别)授权。这允许你以更简单、更直观的方式对整个Schema进行授权。简化之前版本授权这个权限的过程。

此外,Oracle 23ai还提供了其他与Schema级别授权相关的功能和视图,如 ROLE_SCHEMA_PRIVS、USER_SCHEMA_PRIVS 和 SESSION_SCHEMA_PRIVS,这些可以帮助你更好地管理和查看Schema级别的权限。

DEVUSER1@FREEPDB1> select * from USER_SCHEMA_PRIVS;
USERNAME                       PRIVILEGE                      SCHEMA                         ADMIN_OPT COMMON    INHERITED
------------------------------ ------------------------------ ------------------------------ --------- --------- ---------
DEVUSER1                       SELECT ANY TABLE               TESTUSER                       NO        NO        NO
DEVUSER1@FREEPDB1> select * from SESSION_SCHEMA_PRIVS;
PRIVILEGE                      SCHEMA
------------------------------ ------------------------------
SELECT ANY TABLE               TESTUSER

文章来源:https://blog.csdn.net/zxrhhm/article/details/139091307



微信扫描下方的二维码阅读本文

© 版权声明
THE END
喜欢就支持一下吧
点赞5 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容