Oracle23ai新特性SCHEMA级授权

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
  • 28
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Oracle是一种关系型数据库管理系统,它使用表和视图来组织和存储数据。当我们创建一个的用户时,我们可以为该用户创建一个的模式(schema),以便该用户可以在该模式中创建和管理自己的表、视图和其他数据库对象。 在Oracle中,授权是指授予用户执行特定操作的权限。要将一个模式授权给一个用户,我们可以使用GRANT语句。例如,要将模式名为“myschema”的模式授权给用户“myuser”,可以执行以下命令: GRANT ALL PRIVILEGES ON myschema TO myuser; 上述命令将授予用户“myuser”在模式“myschema”中执行所有操作的权限。这包括创建、修改和删除表、视图和其他对象的权限。 除了授予所有权限之外,我们还可以根据具体需求来授予特定的权限。例如,要授予用户“myuser”在模式“myschema”中只读访问的权限,可以执行以下命令: GRANT SELECT ON myschema TO myuser; 上述命令将授予用户“myuser”在模式“myschema”中执行SELECT操作的权限,但不允许用户修改或删除表或其他对象。 要撤销用户对模式的授权,我们可以使用REVOKE语句。例如,要撤销用户“myuser”对模式“myschema”的所有权限,可以执行以下命令: REVOKE ALL PRIVILEGES ON myschema FROM myuser; 上述命令将从用户“myuser”中撤销在模式“myschema”中执行所有操作的权限。 通过这些授权和撤销命令,我们可以灵活地管理Oracle数据库中的用户和模式之间的访问权限,以满足不同用户的需求和安全要求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值