Oracle权限及角色管理

本文详细介绍了Oracle数据库中如何进行权限管理,包括分配系统权限、对象权限,以及使用GRANT和REVOKE命令。此外,还讨论了角色的概念,如何创建角色、赋予角色权限,并将其分配给用户。通过角色,可以更集中地管理和分配数据库权限,提高安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分配数据库权限
拥有数据库系统权限才能执行连接数据库,创建和修改对象之类的任务。Oracle中有数百种系统权限。查询DBA_SYS_PRIVS视图可以查看系统权限:

     select distinct privilege from dba_sys_privs;

可以将权限赋予其他用户或角色。要拥有赋予权限的能力,必须拥有GRANT ANY PRIVILEGE 权限,或者通过with admin option 子句获得系统权限。
使用GRANT语句可以为用户赋予系统权限。
赋予用户CREATE SESSION 权限:

     grant create seesion to scott;

通常,除了连接数据库外,用户还需要执行其他任务。例如,用户可能需要创建表和其他数据库对象。赋予CREATE TABLE 和 CREATE DATABASE LINK 系统权限:

     grant create table ,create database link to scott;

回收权限,可以使用REVOKE命令:

     revoke create table from scott;

Oracle 允许DBA将系统权限赋予用户,还允许用户拥有管理权限的能力。使用WITH ADMIN OPTION 子句可以做到这一点:

     grant create table to scott with admin option ;  --慎用 with admin option 

还可以将系统权限赋予public用户组。可以将create session 权限赋予所有需要连接数据库的用户:

     grant create session to public ;

所有的用户都会自动获取连接数据库的权限。–慎用
–分配数据库对象权限
拥有数据库对象权限可以访问和操作其他用户的对象。可以赋予的数据库对象权限包括:表,视图,物化视图,序列,软件包,函数,过程用户自定义类型和目录的权限。
要获得这些权限的能力,必须符合下列条件之一:
拥有对象;
已经通过with grant option 子句获得了对象权限;
拥有grant any object privilege 系统权限。

下面的例子将对象权限赋予用户scott;

      grant insert,update,delete,select on registrations to scott;

grant all命令的作用为赋予对象insert,update,delete和select权限。下面的语句的作用是上面语句的作用相同:

      grant all on registrations to scott;

可以将列级的inser和update权限赋予表。

      grant inser(inv_id,inv_name,inv_desc) on inventory to scott;

如果想要使获得了对象权限的用户,能够以级联方式将相同的对象权限赋予其他用户,可以使用WITH GRANT OPTION 子句:

      grant insert on registrations to scott with grant option;

也可以将对象那权限赋予pulic组。

      grant select on registrations to public;

这样所有的用户都可以选择registrations表。

回收对象权限:

      revoke insert,update,delete,select on registrations from scott;

–以集中方式分配权限
角色是一种数据库对象,使用它可以为系统权限和对象权限分组,这样就可以通过一次操作为一个用户赋予多个权限。使用角色可以帮助你管理数据库安全,他们可以
通过集中方式分配权限。可以将角色分配给多个用户,也可以分配给其他角色。
创建一个角色:

     create role jr_dba;

将多个系统权限赋予新建的角色:

      grant select any table to jr_dba;
      grant create any table to jr_dba;
      grant create any view to jr_dba;
      grant create synonym to jr_dba;;
      grant create database link to jr_dba;

将这个角色分给想要赋予这些权限的用户:

      grant jr_dba to scott;
      grant jr_dba to test;

查看用户获得了哪些角色:

  select grantee,granted_role from dba_role_privs order by 1 ;

查看当前数据库的用户拥有哪些角色:

       select * from user_role_privs;

回收角色的权限:

      revoke create database link from jr_dba;

回收用户的角色

      revoke jr_dba to scott;

如果使用PL/SQL,在编译过程函数时会出现一下错误:
ORA-00942:table or view does not exist(表或视图不存在)
但是可以描述表,在sql窗口可以查询表,
原因是没有权限,去表的拥有者赋予相关权限

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值