暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 19C入门到精通之用户权限管理

ITPro进化论 2024-01-05
206

用户已被成功创建,仅表示该用户在Oracle系统中进行了注册,这样的用户不能连接到数据库,更谈不上进行查询、建表等操作了。要使该用户能够连接到Oracle系统并使用Oracle的资源,如查询表的数据、创建自己的表结构等,则必须让具有DBA角色的用户对该用户进行授权。

1. 权限简介

根据系统管理方式的不同,在Oracle数据库中将权限分为两大类,即系统权限和对象权限

系统权限是在系统级对数据库进行存取和使用的机制。例如,用户是否能够连接到数据库系统(SESSION权限)上,以及是否能够执行系统级的DDL语句(如CREATE、ALTER和DROP)等。

对象权限是指某一个用户对其他用户的表、视图、序列、存储过程、函数、包等进行操作的权限。不同类型的对象具有不同的对象权限,对于某些模式对象,如簇、索引、触发器、数据库链接等没有相应的实体权限,这些权限由系统权限进行管理。

2. 授权操作

在Oracle中含有200多种系统特权,并且所有的这些系统特权均被列举在system_privilege_map数据目录视图中。授权操作使用GRANT命令,其语法格式如下:

GRANT sys_privi | role TO user | role | PUBLIC [WITH ADMIN OPTION]

  • sys_privi:表示Oracle系统权限,是一组约定的保留字。例如,若能够创建表,则为CREATE TABLE。
  • role:角色。
  • user:具体的用户,或者是一些列的用户。
  • PUBLIC:保留字,代表Oracle系统的所有用户。
  • WITH ADMIN OPTION:表示被授权者可以再将权限授予另外的用户。

为用户mr授予连接和开发系统权限,并尝试使用mr连接数据库,代码如下:

--授权mr连接数据库和开发系统权限
grant connect,resource to mr;
--使用mr用户登录数据库NEWPDB
connect mr/123456@NEWPDB

在创建用户dongfang和xifang后,首先system将创建SESSION和创建TABLE的权限授权给dongfang,然后dongfang再将这两个权限传递给xifang,最后通过xifang这个用户创建一个数据表,代码如下:

--创建用户dongfang
create user dongfang identified by mrsoft default tablespace users quota 10on users;
--创建用户xifang
create user xifang identified by mrsoft default tablespace users quota 10on users;
--授权用户dongfang连接数据和创建表的权限并可以再将授权授予其他用户
grant create session,create table to dongfang with admin option;
--通过dongfang用户登录NEWPDB数据库
connect dongfang/mrsoft@NEWPDB;
--授权用户xifang连接数据库和创建表的权限
grant create session,create table to xifang;
--通过xifang连接NEWPDB数据库
connect xifang/mrsoft@NEWPDB;
--创建表
create table tb_xifang ( id number,name varchar2(20));

3. 撤销系统权限

普通用户若被授予过高的权限就可能给Oracle系统带来安全隐患。作为Oracle系统的管理员,应该能够查询当前Oracle系统各个用户的权限,并且能够使用REVOKE命令撤销用户的某些不必要的系统权限。REVOKE命令的语法格式如下:

REVOKE sys_privi | role FROM user | role | PUBLIC

  • sys_privi:系统权限或角色。
  • role:角色。
  • user:具体的用户。
  • PUBLIC:保留字,代表Oracle系统所有的用户。

撤销mr用户的resource系统权限,代码如下:

revoke resource from mr;

如果数据库管理员用GRANT命令给用户A授予系统权限时带有WITH ADMIN OPTION选项,则用户A有权将系统权限再次授予用户B。在这种情况下,如果数据库管理员使用REVOKE命令撤销用户A的系统权限,则用户B的系统权限仍然有效。

4. 对象授权

对象授权与将系统权限授予用户基本相同,将对象权限授予用户或角色也使用GRANT命令,其语法格式如下:

GRANT obj_privi | ALL COLUMN ON schema.object TO user | role | PUBLIC [WITH ADMIN OPTION] | [WITH HIERARCHY OPTION]

  • obj_privi:表示对象的权限,可以是ALTER、EXECUTE、SELECT、UPDATE和INSERT等。
  • role:角色名。
  • user:被授权的用户。
  • WITH ADMIN OPTION:表示被授权者可再将系统权限授予其他的用户。
  • WITH HIERARCHY OPTION:在对象的子对象(在视图上再建立视图)上授权给用户。

给用户xifang授予SELECT、INSERT、DELETE和UPDATE表scott.emp的权限,代码如下:

grant select,insert,delete,update on scott.emp to xifang;

5. 撤销对象权限

从用户或角色中撤销对象权限,仍然要使用REVOKE命令,其语法格式如下:

REVOKE obj_privi | ALL ON schema.object FROM user | role | PUBLIC CASCADE CONSTRAINTS

  • obj_privi:表示对象的权限。
  • PUBLIC:保留字,代表Oracle系统的所有权限。
  • CASCADE CONSTRAINTS:表示有关联关系的权限也被撤销。

从xifang用户撤销scott.emp表的UPDATE和DELETE权限,代码如下:

revoke delete,update on scott.emp from xifang;

如果数据库管理员使用GRANT命令给用户A授予对象权限时带有WITH ADMIN OPTION选项,则用户A有权将权限再次授予另外的用户B。在这种情况下,如果数据库管理员用REVOKE命令撤销用户A的对象权限,则用户B的对象权限也将被撤销。在进行系统权限撤销和对象权限撤销时,效果是不同的。

6. 查询用户与权限

用户被授予的系统权限或对象权限都被记录在Oracle的数据字典里,了解某个用户被授予哪些系统权限和对象权限是确保应用系统安全的重要工作。下表是Oracle用于存储用户、系统权限、对象权限有关的数据字典及其说明。

今天的文章就到这里,如果对你有用,记得点个【】和【在看】,感谢阅读~

文章转载自ITPro进化论,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论