oracle 数据库精简,Oracle角色精简总结
本帖最后由 zcs0237 于 2013-5-19 19:23 编辑
a.欢迎对本帖补充、建议、更正
b.测试环境rhel5.4+Ora10.2.0.1.0
c.为节省篇幅,部分输出结果做了精简
************************************************
第01部分 角色基础知识
角色是非模式对象,它不由任可用户拥有,也不属于任何方案。
01.1-角色是一个集合一、证明ROLE是一个Privilege Set
SQL> select grantee,privilege from dba_sys_privs where grantee='RESOURCE';
GRANTEE PRIVILEGE//查看resource角色拥有的权限
-------------------- ------------------------------
RESOURCE CREATE TRIGGER
RESOURCE CREATE SEQUENCE
RESOURCE CREATE TYPE
RESOURCE CREATE PROCEDURE
RESOURCE CREATE CLUSTER
RESOURCE CREATE OPERATOR
RESOURCE CREATE INDEXTYPE
RESOURCE CREATE TABLE
8 rows selected.二、证明ROLE是一个Role Set(角色可以嵌套)
SQL>create role role5;
Role created. //创建新的角色role5
SQL> select * from dba_roles where role='CONNECT';
ROLE PASSWORD //证明resource是一个role
--------------- --------
RESOURCE NO
SQL>grant connect to role5;
Grant succeeded. //将connect角色关联到role5
01.2-角色用来高效管理权限
有一组人,他们的所需的权限是一样的,则可以:一、首先将角色赋给组内的各个用户
SQL>grant role1 to zcs1;
SQL>grant role1 to zcs1 ;
……二、其次针对角色进行管理(将权限、角色授给某个角色)
SQL>grant privilege1 to role1;
SQL>grant privilege1 to role1;
SQL>revoke privilege1 from role1;
……************************************************
第02部分 预定义角色一、预定义角色是系统自动创建的一些常用的角色
SQL>select count(*) from dba_roles;
COUNT(*)
----------
33 //预定义角色的总数二、角色所包含的权限可以用以下语句查询:
sql>select * from role_sys_privs where role='角色名';三、兼容角色:CONNECT, RESOURCE, DBA
oracle建议用户自己设计数据库管理和安全的权限规划,而不要简单的使用这些预定角色。1、主要是简化数据库管理而提供的
对于DBA用户:直接授予dba角色。
对于普通用户:一般授予connect, resource角色。2、这些预定义角色主要是为了向后兼容,将来的版本中这些角色可能不会作为预定义角色
SQL>select * from dba_roles where role='DBA';
ROLE PASSWORD
------- --------
DBA NO //通过此查询证明DBA是角色名
02.1-Connect Role
临时用户,通常只赋予他们CONNECT role。一、查看CONNECT角色的权限
SQL>select grantee,privilege from dba_sys_privs where grantee='CONNECT';
CONNECT CREATE SESSION二、新建用户zcs3
SQL>create user zcs3 identified by zcs3;
User created.
SQL>conn zcs3/zcs3
ERROR:
ORA-01045: user ZCS3 lacks CREATE SESSION privilege; logon denied三、关联CONNECT角色到zcs3
角色就像权限:可将其授给用户或其它角色。
SQL>conn / as sysdba
Connected.
SQL>grant connect to zcs3;
Grant succeeded. //关联connect角色到zcs3
SQL>conn zcs3/zcs3
Connected.
SQL>select * from session_privs;
PRIVILEGE
---------------
CREATE SESSION
SELECT ANY TABLE //查询当前会话的最终权限
02.2-Resource Role
正式、可靠的用户,如开发人员正式的数据库用户可以授予RESOURCE role。一般创建用户时,如果没有特殊需求只要将resource和connect角色赋予用户即可。一、提供创建对象的权限
SQL> select grantee,privilege from dba_sys_privs where grantee='RESOURCE';
GRANTEE PRIVILEGE
------------ --------------------
RESOURCE CREATE TRIGGER触发器
RESOURCE CREATE SEQUENCE序列
RESOURCE CREATE TYPE类型
RESOURCE CREATE PROCEDURE过程
RESOURCE CREATE CLUSTER簇
RESOURCE CREATE OPERATOR
RESOURCE CREATE INDEXTYPE索引
RESOURCE CREATE TABLE表
8 rows selected.二、也会授予UNLIMITED TABLESPACE系统权限
1、创建用户,指定密码
SQL> create user zcs identified by zcs;
User created.
SQL> select username,default_tablespace from dba_users where username='ZCS';
USERNAME DEFAULT_TABLESPACE
-------- --------------------
ZCS USERS2、关联connect、resource角色到zcs
SQL> grant connect,resource to zcs;
Grant succeeded.
SQL>select GRANTEE, GRANTED_ROLE from dba_role_privs where GRANTEE='ZCS';
GRANTEE GRANTED_ROLE //查看用户所具有的角色
------------ -------------
ZCS RESOURCE
ZCS CONNECT3、自动授予UNLIMITED TABLESPACE系统权限
此系统权限会覆盖所有的单个表空间限额,并向用户提供所有表空间(包括SYSTEM和SYSAUX)的无限制限额,这对数据库系统管理是一大隐患。
SQL>select GRANTEE, PRIVILEGE from dba_sys_privs where GRANTEE='ZCS';
GRANTEE PRIVILEGE //查询用户所具有的系统权限
-------- ------------------
ZCS UNLIMITED TABLESPACE
SQL>select TABLESPACE_NAME,USERNAME,BYTES,MAX_BYTES from dba_ts_quotas;
TABLESPACE_NAME USERNAME BYTES MAX_BYTES //查询表空间限制
--------------- ---------- ---------- ----------
SYSAUX OLAPSYS 16318464 -1
SYSAUX SYSMAN 50790400 -1
SYSAUX DMSYS 262144 209715200
SQL>conn zcs/zcs
Connected.
SQL>create table zcs(id int);
Table created.
02.3-DBA Role
除非真正需要,dba role(数据库管理员角色)权限不应随便授予那些不是很重要的用户。SQL>SELECT GRANTEE, GRANTED_ROLE FROM dba_role_privs WHERE granted_role = 'DBA';
GRANTEE GRANTED_ROLE //查看角色授予了哪些用户
------------ ------------
SYS DBA
SYSMAN DBA
ZCS1 DBA
SYSTEM DBA
SQL>select * from v$pwfile_users;
USERNAME SYSDBA SYSOPER //查SYSDBA/SYSOPER权限的用户
------------ ----- -----
SYS TRUE TRUE
TEST TRUE FALSE
一、DBA role拥有所有的系统权限,可以操作全体用户的任意基表(包括删除)
SQL>select count(*) from dba_sys_privs where grantee='DBA';
COUNT(*)
----------
160
SQL>create user zcs1 identified by zcs1;
User created.
SQL>grant dba to zcs1;
Grant succeeded.
SQL>CONN ZCS1/ZCS1
Connected.
SQL>select count(*) from session_privs;
COUNT(*)
----------
161
SQL> SET PAGESIZE 999
SQL>select * from SESSION_ROLES order by ROLE;
ROLE
------------------------------
DBA
DELETE_CATALOG_ROLE
EXECUTE_CATALOG_ROLE
EXP_FULL_DATABASE
GATHER_SYSTEM_STATISTICS
HS_ADMIN_ROLE
IMP_FULL_DATABASE
JAVA_ADMIN
JAVA_DEPLOY
OLAP_DBA
SCHEDULER_ADMIN
SELECT_CATALOG_ROLE
WM_ADMIN_ROLE
XDBADMIN
XDBWEBSERVICES
15 rows selected.二、DBA role包括无限制的空间限额
SQL>conn zcs1/zcs1
Connected.
SQL>select GRANTEE, PRIVILEGE from dba_sys_privs where GRANTEE='ZCS1';
GRANTEE PRIVILEGE
------------ ----------------------------------------
ZCS1 UNLIMITED TABLESPACE
SQL>select TABLESPACE_NAME,USERNAME,BYTES,MAX_BYTES from dba_ts_quotas where USERNAME='ZCS1';
no rows selected //zcs1无限额三、给其他用户授予各种权限的能力
一个具有DBA角色的用户可以撤消任何别的用户甚至别的DBA的CONNECT、RESOURCE和DBA的其他权限。************************************************
第03部分 自定义角色
修改(grant)角色关联的权限,则授予该角色所有的用户都会立即自动获得修过的权限。自定义角色一般是有dba来完成的,如果一般的用户想建立,则需要有create role的系统权限。
03.1-建用户ZCS1(zcs1无角色,无权)
SQL> create user zcs1 identified by zcs1;
User created. //创建用户
SQL> select USERNAME from dba_users where USERNAME='ZCS1';
ZCS1 //说明zcs1是否存在
SQL> select * from dba_sys_privs where GRANTEE='ZCS1';
no rows selected //新建用户默认不拥有任何权限
SQL> select * from dba_role_privs where GRANTEE='ZCS1';
no rows selected//新建用户默认不拥有任何角色
SQL> conn zcs1/zcs1
ERROR: //新建用户默认不能连接到数据
ORA-01045: user ZCS1 lacks CREATE SESSION privilege; logon denied
03.2-建角色ROLE1(ROLE1无权)
SQL> create role role1;
Role created. //创建无任何权限的角色
SQL>SELECT role,password_required FROM dba_roles where ROLE='ROLE1';//验证新建角色是否已存在
ROLE PASSWORD
-------------------- --------
ROLE1 NO
SQL> select grantee,privilege from dba_sys_privs where grantee='ROLE1'; //ROLE1角色不包含任何权限
no rows selected
03.3-ROLE1联ZCS1(zcs1角色=role1,无权)
SQL>grant role1 to zcs1;
Grant succeeded. //将角色授矛给用户
SQL>select * from dba_role_privs where GRANTEE='ZCS1';
GRANTEE GRANTED_ROLE ADM DEF
------------ ------------ --- ---
ZCS1 ROLE1 NO YES //zcs1用户有角色
SQL>select * from dba_sys_privs where GRANTEE='ZCS1';
no rows selected //zcs1用户无权限
SQL>conn zcs1/zcs1
ERROR: //此时zcs1还是不能登陆
ORA-01045: user ZCS1 lacks CREATE SESSION privilege; logon denied
03.4-Role1联create session(zcs1=create session)
SQL>conn / as sysdba
Connected.
SQL>grant create session to role1;
Grant succeeded.
SQL>select grantee,privilege from dba_sys_privs where grantee='ROLE1';
GRANTEE PRIVILEGE
------------ ---------------
ROLE1 CREATE SESSION
SQL>conn zcs1/zcs1
Connected.
SQL>select * from SESSION_ROLES order by ROLE;
ROLE1 //查看当前会话拥有的角色
SQL>select * from USER_ROLE_PRIVS;
USERNAME GRANTED_ROLE ADM DEF OS_
-------- ------------ --- --- ---
ZCS1 ROLE1 NO YES NO //查看当前用户的角色
SQL>conn / as sysdba;
Connected.
SQL>drop role role1;
Role dropped. //删除角色
SQL>select * from dba_sys_privs where GRANTEE='ZCS1';
no rows selected //角色删除后,原来拥用该角色的用户不再拥有该角色及相应的权限。
************************************************第04部分 开关自定义角色
SQL>show parameter MAX_ENABLED_ROLES
max_enabled_roles integer 150 //最大可生效角色数04.1-SYS永久减小ZCS的权限(默认角色)
1、核心命令alter user zcs3 DEFAULT ROLE ALL EXCEPT RESOURCE;
alter user zcs3 DEFAULT ROLE ALL;
2、经测试有以下两点规律
Shutdown/startup以上结果不会自动恢复
必须用DBA用户alter user才能恢复正常
一、创建用户zcs3并授予resource,connect角色
SQL>grant resource,connect to zcs3;
Grant succeeded. //只影响使用GRANT直接授予用户的角色
SQL>conn zcs3/zcs3;
Connected.
SQL>conn / as sysdba
Connected.
SQL>select GRANTEE,GRANTED_ROLE,DEFAULT_ROLE from dba_role_privs where GRANTEE='ZCS3';
GRANTEE GRANTED_ROLE DEF
------------ --------------- ------
ZCS3 RESOURCE YES
ZCS3 CONNECT YES二、设置缺省的角色为NONE后,无法登陆
SQL>alter user zcs3 DEFAULT ROLE NONE;
User altered.
SQL>select GRANTEE,GRANTED_ROLE,DEFAULT_ROLE from dba_role_privs where GRANTEE='ZCS3';GRANTEE GRANTED_ROLE DEFAULT_ROLE
------------ ------------ ------------
ZCS3 RESOURCE NO //resource已禁用
ZCS3 CONNECT NO //connect已禁用
SQL> conn zcs3/zcs3;
ERROR:
ORA-01045: user ZCS3 lacks CREATE SESSION privilege; logon denied
SQL> conn / as sysdba;
Connected.
三、重置角色后可以正常登陆
1、重启数据不会自动恢复正常
SQL>shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>startup
ORACLE instance started.
SQL>select GRANTEE,GRANTED_ROLE,DEFAULT_ROLE from dba_role_privs where GRANTEE='ZCS3';
GRANTEE GRANTED_ROLE DEFAULT_ROLE
------------ ------------ ------------
ZCS3 RESOURCE NO
ZCS3 CONNECT NO
2、alter user手动重置正常
SQL>conn / as sysdba
Connected.
SQL>alter user zcs3 DEFAULT ROLE ALL;
User altered.
';SQL> select GRANTEE,GRANTED_ROLE,DEFAULT_ROLE from dba_role_privs where GRANTEE='ZCS3';
GRANTEE GRANTED_ROLE DEFAULT_ROLE
------------ ------------ ------------
ZCS3 RESOURCE YES
ZCS3 CONNECT YES
SQL>CONN zcs3/zcs3;
Connected.
四、默认角色为除resource之外的所有角色
SQL>alter user zcs3 DEFAULT ROLE ALL EXCEPT RESOURCE;
User altered.
SQL> select GRANTEE,GRANTED_ROLE,DEFAULT_ROLE from dba_role_privs where GRANTEE='ZCS3';
GRANTEE GRANTED_ROLE DEFAULT_ROLE
------------ ------------ ------------
ZCS3 RESOURCE NO //resource已禁用
ZCS3 CONNECT YES;
04.2-ZCS给自已临时减小权限
1、核心命令
set role none;
set role all;
set role role1,role2;2、经测试有以下两点规律
自已禁用自已的ROLE
临时:set role all 或重新conn即恢复一、用SYS操作:关联权限到角色role1
1、创建role1,并关联create session系统权限
SQL>create role role1;
Role created.
SQL>grant create session to role1;
Grant succeeded.
SQL>select grantee,privilege from dba_sys_privs where grantee='ROLE1';
GRANTEE PRIVILEGE
------------ ----------------------------------------
ROLE1 CREATE SESSION2、创建role2,并关联select any table系统权限
SQL>create role role2;
Role created.
SQL>grant select any table to role2;
Grant succeeded.SQL>select grantee,privilege from dba_sys_privs where grantee='ROLE2';
GRANTEE PRIVILEGE
------------ -----------------
ROLE2 SELECT ANY TABLE
二、用SYS操作:关联角色role1到用户zcs
SQL> create user ZCS identified by ZCS;
User created. //创建用户ZCS
SQL>grant role1,role2 to ZCS;
Grant succeeded. //关联role1,role2到ZCS
SQL>select * from dba_role_privs where GRANTEE='ZCS';
GRANTEE GRANTED_ROLE ADM DEF //查看ZCS拥有的角色
------------ ------------ --- ---
ZCS ROLE1 NO YES
ZCS ROLE2 NO YES三、用ZCS操作:二.结果的验证
SQL>conn ZCS/ZCS
Connected.
SQL>conn ZCS/ZCS
Connected.
SQL>select empno,ename,deptno,mgr from scott.emp where empno in(7499,7788);
EMPNO ENAME DEPTNO MGR
---------- ---------- ---------- ----------
7499 ALLEN 30 7698
7788 SCOTT 20 7566
SQL>select * from SESSION_ROLES order by ROLE;
ROLE //查看当前会话拥有的角色
--------------
ROLE1
ROLE2SQL>select USERNAME, GRANTED_ROLE from USER_ROLE_PRIVS;
USERNAME GRANTED_ROLE //查看当前会话拥有的角色
------------ ------------
ZCS ROLE1
ZCS ROLE2
SQL>select * from user_sys_privs;
no rows selected //直接授权为空
SQL>select * from session_privs;
PRIVILEGE
---------------
CREATE SESSION
SELECT ANY TABLE //查询当前会话的最终有效权限四、用ZCS操作:开关角色可暂时开关权限
1、set role禁用本用户拥有的角色
SQL>conn ZCS/ZCS
SQL>set role none;
Role set. //none=所有失效, all=所有生效
SQL>select empno,ename,deptno,mgr from scott.emp where empno in(7499,7788);
ERROR at line 1:
ORA-00942: table or view does not exist
SQL>select * from session_privs;
no rows selected //查询当前会话的最终权限2、恢复方法1:重新conn即恢复
SQL>conn zcs/zcs
Connected.
SQL>select empno,ename,deptno,mgr from scott.emp where empno in(7499,7788);
EMPNO ENAME DEPTNO MGR
---------- ---------- ---------- ----------
7499 ALLEN 30 7698
7788 SCOTT 20 75662、恢复方法2:重新set role 即恢复
SQL>set role role1,role2;
Role set.//使role1,role2生效
SQL>select * from session_privs;
PRIVILEGE //查询当前会话的最终权限
-------------------
CREATE SESSION
SELECT ANY TABLE04.3-带密码的角色
SQL>create role role5 identified by roles;
Role created.
SQL>alter role role5 not identified;
Role altered.
SQL>alter role role5 identified by role5;
Role altered.
SQL>set role role5;
ERROR at line 1:
ORA-01979: missing or invalid password for role 'ROLE5'
SQL>set role role5 identified by role5;
Role set. //使用带有口令的role1生效
********************END***************************
oracle 数据库精简,Oracle角色精简总结相关推荐
- Oracle数据库:oracle外连接left/right/full outer join on,oracle扩展的左右外连接展示符号(+)
Oracle数据库:oracle外连接left/right/full outer join on,oracle扩展的左右外连接展示符号(+) 2022找工作是学历.能力和运气的超强结合体,遇到寒冬,大 ...
- Oracle数据库:oracle内连接inner join on,多表查询各种自链接、内连接、外连接的练习示例
Oracle数据库:oracle内连接inner join on,多表查询各种自链接.内连接.外连接的练习示例 2022找工作是学历.能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得 ...
- Oracle数据库:oracle数据表格dmp,sql,pde格式导入与导出,视图、序列、索引等对象的导出,oracle完结,后续开启mysql的学习
Oracle数据库:oracle数据表格dmp,sql,pde格式导入与导出,视图.序列.索引等对象的导出,oracle完结,后续开启mysql的学习 2022找工作是学历.能力和运气的超强结合体,遇 ...
- Oracle数据库:oracle函数嵌套,nvl函数,nvl2函数,nullif函数,coalesce合并函数
Oracle数据库:oracle函数嵌套,nvl函数,nvl2函数,nullif函数,coalesce合并函数 2022找工作是学历.能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得 ...
- Oracle数据库:oracle启动,oracle客户端工具plsql安装教程和使用方法
Oracle数据库:oracle启动,oracle客户端工具plsql安装教程和使用方法 2022找工作是学历.能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开 测开的 ...
- oracle insert汉字出错,Oracle数据库之Oracle批量插入数据SQL语句太长出错:无效的主机/绑定变量名...
本文主要向大家介绍了Oracle数据库之Oracle批量插入数据SQL语句太长出错:无效的主机/绑定变量名,通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助. Oracle数据库,用 ...
- oracle数据库gold,Oracle数据库之Oracle GoldenGate 12.2.0.1 安装、升级和删除
本文主要向大家介绍了Oracle数据库之Oracle GoldenGate 12.2.0.1 安装.升级和删除,通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助. 1.准备工作 选择 ...
- oracle set feedback off,Oracle数据库之Oracle导出数据中的prompt,set feedback 等是什么意思...
本文主要向大家介绍了Oracle数据库之Oracle导出数据中的prompt,set feedback 等是什么意思,通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助. mpt 输出 ...
- jsp oracle 登录页面,Oracle数据库之ORACLE+Myeclipse+jsp实现简单登录功能
本文主要向大家介绍了Oracle数据库之ORACLE+Myeclipse+jsp实现简单登录功能,通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助. Oracle数据库表的建立: c ...
- oracle表还原truncate,Oracle数据库之Oracle表恢复(truncate)
本文主要向大家介绍了Oracle数据库之Oracle表恢复(truncate),通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助. 一.模拟truncate操作: SQL> c ...
最新文章
- 播放此电影需要以下插件,但尚未安装: MPEG-4 AAC decoder
- 设计模式 — 行为型模式 — 访问者模式
- 鸿蒙不算安卓系统吗,加入鸿蒙≠使用鸿蒙,鸿蒙不属于华为也仅限于华为
- The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone
- 27个机器学习图表翻译_使用机器学习的信息图表信息组织
- Python自动化运维之13、异常处理及反射(__import__,getattr,hasattr,setattr)
- Spring Boot文档阅读笔记-Creating Asynchronous Methods解析
- 微信 小程序布局 scroll-view
- Flutter进阶—质感设计之弹出菜单
- SOAP(Simple Object Access Protocol )简单对象访问协议
- PAT A1053 Path of Equal Weight [树的DFS遍历]
- xvidcore.dll not found视频播放问题
- linux 怎么查看谁登过这台服务器,如何查看linux服务器是否被入侵
- 使用CSS动画实现 时钟转动效果
- 浅谈缓存-注解驱动的缓存 Spring cache介绍
- 【PCL】NDT点云配准(Registration)
- 安卓手机格式化怎么弄_安卓手机怎么格式化
- Nolan的分形分布估计软件Stable使用教程
- 西门子S7-300 PLC 的50个经典问题
- 手机4k屏幕测试软件,索尼Z5 Premium 4K屏幕测试:1080p屏是王道!