oracle grant权限

本文详细介绍了Oracle数据库中的权限管理机制,包括系统权限和对象权限的授予与撤销,以及如何通过查询视图了解当前用户的权限情况。

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

 oracle的权限管理

  首先在开始--》运行——》cmd,然后输入 sqlplus sys/密码 as sysdba

  以sys权限登陆进去

  然后可以进行操作、:

  创建用户 create user test indentified by test;

  这样就创建了一个用户名密码都为test的用户

  但这个时候test还是不能登陆成功的,我们需要赋予相应的权限

  首先赋予create session的权限

  grant create session to test;

  这样test用户就能成功登陆进去

  但是此时用户还是不能创建表 我们需要赋予用户创建表的权限:

  grant create table to test;

  但是用户此时还不能创建表 因为需要有使用表空间的权限(相当于 用户有了进房间的钥匙 但是没有进大门的钥匙。。。)

  所以也应该赋予相应的权限

  grant unlimited tablespace to test;

  这个时候用户就拥有了创建表的权限 由于表是用户test的 相应的他就拥有了对创建的表的增删查改的权限了

  我们要查看用户拥有什么权限可以通过查询一个系统的视图(数字字典)

  select * from user_sys_privs;

  这样就可以知道当前用户的权限

  撤销权限 revoke create table from test;

  场景:

  用户test 用户test1

  test1的用户创建了个表mytab 并且插入了一些数据

  那么 test用户是否可以访问到test1的mytab怎么访问?

  答:不可以,必须先授权

  test1必须授权给test :grant select on mytab to test;

  那么这个时候test可以通过 select * from test1.mytab;来访问mytab中的数据

  如果想把某个表(对象)的所有权限都赋予给test那么可以:

  grant all on mytab to test;

  撤销所有权限

  revoke all on mytab to test;

  总结

  对于系统权限由sys来做

  对于对象权限由 谁拥有谁授权

  系统权限:

  grant create session to test;

  grant create table to test;

  grant unlimited tablespace to test;

  revoke create session from test;

  revoke create table from test;

  revoke unlimited tablespase from test;

  grant create session to public; //表示把创建表的权限赋予所有人

  select * from user_sys_privs; //返回当前用户的所有系统权限

  对象权限

  grant select on mytab to test;

  grant all on mytab to test;

  revoke select on mytab from test;

  revoke all on mytab from test;

  select * from user_tab_privs; //返回当前用户所有的对象权限

  对象权限可以控制到列

  grant update(name) on mytab to test;

  grant insert(id) on mytab to test;

  select * from user_col_privs;

  注意、:查询和删除不能控制到列

  需要有commit的 insert update insert

  权限的传递

  系统权限的传递:

  grant alter table to A with admin option;

  那么A可以通过把该权限传递给B,如果想B也可以传递下去那么可以也带上with admin option

  grant alter table to B;

  对象权限的传递:

  grant select on mytab to A with grant option;

  那么A可以把在表mytab的select权限赋予给B,如果B想也能传递该select权限也可以带上with grant option

  grant select on mytab to B;

 

 

 

 

 

 

--select * from dba_users; 查询数据库中的所有用户

  --alter user TEST_SELECT account lock; 锁住用户

  --alter user TEST_SELECT account unlock; 给用户解锁

  --create user xujin identified by   xujin; 建立用户

  --grant create tablespace to xujin; 授权

  --grant select on tabel1 to xujin; 授权查询

  --grant update on table1 to xujin;

  --grant execute on procedure1 to xujin 授权存储过程

  --grant update on table1 to xujin with grant option; 授权更新权限转移给xujin用户,许进用户可以继续授权;

  --收回权限

  --revoke select on table1 from xujin1; 收回查询select表的权限;

  --revoke all on table1 from xujin;

  /*grant connect to xujin;

  revoke connect from xujin

  grant select on xezf.cfg_alarm to xujin;

  revoke select on xezf.cfg_alarm from xujin;*/

  --select table_name,privilege from dba_tab_privs where grantee='xujin' 查询一个用户拥有的对象权限

  --select * from dba_sys_privs where grantee='xujin' 查询一个用户拥有的系统权限

  --select * from session_privs --当钱会话有效的系统权限

  --角色

  --create role xujin1;--建立xujin1角色

  --grant insert on xezf.cfg_alarm to xujin1; 将插入表的信息

  --revoke insert on xezf.cfg_alarm from xujin1; 收回xujin1角色的权限

  --grant xujin1 to xujin ; 将角色的权限授权给xujin;

  -- create role xujin2;

  --grant xujin1 to xujin2; 将角色xujin1授权给xujin2;

  --alter user xujin default xujin1,xujin2; 修改用户默认角色

  -- DROP ROLE xujin1;删除角色1;

  --select * from role_sys_privs where role=xujin1;

  --查看许进1角色下有什么系统权限;

  --select granted_role,admin_option from role_role_privs where role='xujin2';

  --查看xujin1角色下面有什么角色权限

  --select * from role_sys_privs where role='xujin2';

  --select table_name,privilege from role_tab_privs where role='xujin1';

  --select * from dba_role_privs where grantee='xujin' --查看用户下面有多少个角色;

 

<think>我收到了用户的查询,是关于在Oracle数据库中收回已授予的权限的问题。用户明确问如何使用REVOKE命令撤销GRANT权限,这属于DCL权限管理的范围。根据引用的信息,我需要整理REVOKE的使用方法。参考[1]描述了回收权限的基础语法,包括回收系统权限和表对象权限的示例。[2]提供了更多上下文,解释了权限类型如CREATESESSION或DBA,以及表级权限的回收方式。[3]补充了对象权限的细节,说明序列只能有SELECT和ALTER权限,这会影响REVOKE的操作限制。用户的焦点是REVOKE语法应用。我将结构化回答:从基本语法开始,解释系统权限和对象权限的撤销区别。要包括示例场景:回收单个用户或所有用户的权限。还需强调注意事项,如撤销"WITHGRANTOPTION"的复杂性。在组织内容时,确保清晰步骤:系统权限回收、表对象权限回收、可选子句的使用。最后添加相关问题,引导学习,如级联回收或查看权限的方法。</think> 在 Oracle 数据库中,您可以使用 `REVOKE` 命令来撤销(收回)之前通过 `GRANT` 授予的权限。操作步骤如下: ### 📌 一、撤销系统权限 ```sql REVOKE <系统权限名1>, <系统权限名2>, ... FROM <用户名1>, <用户名2>, ...; ``` **示例**: ```sql -- 撤销用户的 DBA 和 CREATE TABLE 权限 REVOKE DBA, CREATE TABLE FROM user1, user2; ``` > **说明**: > 常见系统权限包括 `CREATE SESSION`(连接数据库)、`CREATE TABLE`(创建表)、`DBA`(管理员权限)等[^2]。 --- ### 📌 二、撤销表对象权限 ```sql REVOKE <权限名> ON [<方案名>.]<对象名> FROM <用户名1>, <用户名2>, ... [CASCADE CONSTRAINTS]; ``` **权限类型**: | 权限名 | 作用 | |-----------|---------------| | SELECT | 查询数据 | | INSERT | 插入数据 | | UPDATE | 修改数据 | | DELETE | 删除数据 | | ALTER | 修改表结构 | | ALL | 所有权限 | **示例**: ```sql -- 撤销 user1 对 emp 表的 UPDATE 和 DELETE 权限 REVOKE UPDATE, DELETE ON scott.emp FROM user1; ``` > **注意**: > - `CASCADE CONSTRAINTS` 用于级联撤销引用完整性约束(如外键)[^1]。 > - 对象可以是表、视图、序列等(序列仅支持 `SELECT` 和 `ALTER` 权限[^3])。 --- ### 🛠 三、撤销 `WITH GRANT OPTION` 传递的权限权限通过 `GRANT ... WITH GRANT OPTION` 传递,需级联撤销: ```sql REVOKE <权限名> ON <对象名> FROM <用户名> CASCADE CONSTRAINTS; ``` > **重点**: > 此操作会收回该用户及其通过 `WITH GRANT OPTION` 授权的所有下游用户的权限[^1]。 --- ### 📊 四、操作示例 **场景**:撤销用户 `dev_user` 对表 `orders` 的所有权限及其传递的权限: ```sql REVOKE ALL ON hr.orders FROM dev_user CASCADE CONSTRAINTS; ``` 🔍 **验证操作**: 可通过查询数据字典确认权限状态: ```sql SELECT * FROM USER_TAB_PRIVS_MADE; -- 查看已授予的权限 SELECT * FROM USER_TAB_PRIVS_RECD; -- 查看已接收的权限 ``` 💎 **核心注意事项**: 1. 执行 `REVOKE` 需要拥有 `GRANT ANY PRIVILEGE` 或对象所有者权限[^2]; 2. 撤销系统权限时,若用户已存在对象(如表),需手动清理; 3. 级联撤销 (`CASCADE`) 会影响依赖该权限的所有用户和约束[^3]。 --- 🔍 **
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值