oracle grant 授权语句

本文详细介绍了在数据库中如何管理用户权限,包括创建、授权、收回权限,以及角色的创建、分配和权限转移等操作。

--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数据库中对表进行授权语句。结合引用[1]到[4],可以整理出以下信息: 1. **基本授权语法**: - 授予表权限:`GRANT 权限 ON 表名 TO 用户名;` - 撤销权限:`REVOKE 权限 ON 表名 FROM 用户名;` 2. **常见权限类型**: - `SELECT`:查询 - `UPDATE`:更新(可指定列) - `INSERT`:插入 - `DELETE`:删除 - `ALL`:所有权限 3. **特殊选项**: - `WITH GRANT OPTION`:允许被授权者将权限再授予其他用户(引用[4]) 4. **字段级授权**: - 例如只授权更新特定列:`GRANT UPDATE(列名) ON 表名 TO 用户名;`(引用[3]) 5. **存储过程授权**: - `GRANT EXECUTE ON 存储过程名 TO 用户名;`(引用[4]) 6. **查看权限**: - 查询其他用户对当前用户表的权限:`SELECT * FROM USER_TAB_PRIVS;`(引用[3]) - 查询字段级权限:`SELECT * FROM USER_COL_PRIVS;`(引用[3]) **用户需求明确为表授权语句**,因此重点整理表操作授权: ### 表授权语句总结: 1. **授予完整表权限**: ```sql GRANT SELECT, INSERT, UPDATE, DELETE ON 表名 TO 用户名; ``` 或使用`ALL`简化: ```sql GRANT ALL ON 表名 TO 用户名; ``` 2. **授予字段级权限**(如仅允许更新特定列): ```sql GRANT UPDATE(列1, 列2) ON 表名 TO 用户名; ``` 3. **允许权限传递**(使被授权用户可继续授权给他人): ```sql GRANT SELECT ON 表名 TO 用户名 WITH GRANT OPTION; ``` 4. **撤销表权限**: ```sql REVOKE SELECT, INSERT ON 表名 FROM 用户名; ``` 或撤销所有权限: ```sql REVOKE ALL ON 表名 FROM 用户名; ``` ### 示例场景: 假设用户`zhangsan`需要查询和更新用户`lisi`的表`employees`的`name`列: ```sql -- 登录lisi账户执行 GRANT SELECT, UPDATE(name) ON employees TO zhangsan; ``` ### 权限查询: 授权后,`lisi`可查看自己表的授权情况: ```sql SELECT * FROM USER_TAB_PRIVS; -- 查看表级权限 SELECT * FROM USER_COL_PRIVS; -- 查看列级权限 ``` ### 注意事项: - 执行授权操作的用户必须是表的所有者或有`GRANT ANY OBJECT PRIVILEGE`权限。 - 跨用户操作时需使用完整对象名(如`用户名.表名`),但授权时`ON`后直接写表名即可(因在所有者账户下执行)。 ### 引用说明: 上述语法参考了Oracle权限管理机制[^2][^3][^4]。 §§相关问题§§ 1. 如何撤销Oracle中已授予的表权限? 2. Oracle中`WITH GRANT OPTION`的作用是什么? 3. 如何查看某个用户对特定表的权限? </think> ### Oracle数据库授权语句详解 根据提供的引用内容,以下是Oracle数据库中对表进行授权的完整语句和操作指南: #### 1. **基本授权语法** ```sql GRANT 权限类型 ON 表名 TO 用户名; ``` - **示例**: ```sql GRANT SELECT, UPDATE ON employees TO userA; -- 授予查询和更新权限 GRANT ALL ON departments TO userB; -- 授予所有操作权限 ``` #### 2. **列级权限控制** ```sql GRANT 权限类型(列名) ON 表名 TO 用户名; ``` - **示例**: ```sql GRANT UPDATE(salary) ON employees TO userC; -- 仅允许修改salary列 ``` #### 3. **权限传递授权** ```sql GRANT 权限类型 ON 表名 TO 用户名 WITH GRANT OPTION; ``` - **示例**: ```sql GRANT SELECT ON orders TO userD WITH GRANT OPTION; -- 允许userD将权限转授他人 ``` #### 4. **撤销权限** ```sql REVOKE 权限类型 ON 表名 FROM 用户名; ``` - **示例**: ```sql REVOKE DELETE ON products FROM userE; -- 撤销删除权限 ``` #### 5. **存储过程授权** ```sql GRANT EXECUTE ON 存储过程名 TO 用户名; ``` - **示例**: ```sql GRANT EXECUTE ON calculate_bonus TO userF; ``` #### 6. **权限查询语句** ```sql -- 查看用户拥有的表权限 SELECT * FROM USER_TAB_PRIVS WHERE TABLE_NAME = '表名'; -- 查看列级权限 SELECT * FROM USER_COL_PRIVS WHERE TABLE_NAME = '表名'; ``` #### ⚠️ **注意事项** 1. 执行授权操作的用户需具备以下条件之一: - 表的所有者 - 拥有`GRANT ANY OBJECT PRIVILEGE`系统权限 - 被授予了`WITH GRANT OPTION`的权限[^2][^3] 2. 跨用户访问表时需使用完整名称:`所有者.表名`(例如:`SCOTT.employees`) 3. 权限生效无需提交(COMMIT),执行后立即生效 > 典型应用场景:用户A需要操作用户B的表时,用户B需执行`GRANT SELECT, UPDATE ON my_table TO userA`
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值