oracle创建角色命令角色授权问题:创建教师角色...

posts - 22,&
comments - 9,&
trackbacks - 0
用了ORACLE很久,但对用户、角色、权限还是很模糊,认真看书,查资料整理文档,做下记录,希望从日常使用的角度去看ORACLE的用户、角色与权限
理论性的知识再此省略,建议还是翻翻书透彻点
先放一张图,可以跳过图,读完文章再回头看看图
说明:双箭头表示用户与角色查那张表,单虚线箭头表示包含关系,角色除了系统自带的dba_roles里定义的以外还可以自己创建定义
正式开工:创建一个表空间,命名为ts_urp指定空间为100M创建一个用户urp密码urp,默认表空间ts_urp,临时表空间为temp
SQL& create user urp identified by urp default tablespace ts_urp temporary tablespace temp;
User created.
创建后尝试使用该用户连接数据库
SQL& connect urp/urp
ORA-01045: user URP lacks CREATE SESSION logon denied
Warning: You are no longer connected to ORACLE.
提示用户不具有CREATE SESSION权限,查看下此时用于与权限对应表,grantee为URP的记录为空
SQL& connect / as sysdba
Connected.
SQL& select * from dba_sys_privs where grantee='URP';
no rows selected
我们给用户urp赋予CREATE SESSION权限
SQL& grant CREATE SESSION to
Grant succeeded.
再查看一次用户与权限对应表,此时看到URP具有CREATE SESSION权限
SQL& select * from dba_sys_privs where grantee='URP';
------------------------------ ---------------------------------------- ---
CREATE SESSION
那我们试试用这个用户连接数据库
SQL& connect urp/urp
Connected.
赋予权限后连接成功创建表试试
SQL& create table emp(id number,username varchar2(30));
create table emp(id number,username varchar2(30))
ERROR at line 1:
ORA-01031: insufficient privileges
再次提示权限不足我们来看看那些权限是于table有关系的
select privilege from dba_sys_privs where privilege like '%TABLE%' group by
----------------------------------------
UNLIMITED TABLESPACE
CREATE TABLE
ALTER ANY TABLE
DROP TABLESPACE
UNDER ANY TABLE
COMMENT ANY TABLE
MANAGE TABLESPACE
UPDATE ANY TABLE
DELETE ANY TABLE
BACKUP ANY TABLE
CREATE ANY TABLE
----------------------------------------
DROP ANY TABLE
FLASHBACK ANY TABLE
INSERT ANY TABLE
CREATE TABLESPACE
LOCK ANY TABLE
SELECT ANY TABLE
ALTER TABLESPACE
18 rows selected.
给个权限后再建表看看
SQL& grant CREATE TABLE to
Grant succeeded.
SQL& connect urp/urp
Connected.
SQL& create table emp(id number,username varchar(30));
create table emp(id number,username varchar(30))
ERROR at line 1:
ORA-01950: no privileges on tablespace 'TS_URP'
提示没有权限在表空间TS_URP上老办法,回到dba看看tablespace有那些权限
select privilege from dba_sys_privs where privilege like '%TABLESPACE%' group by
----------------------------------------
UNLIMITED TABLESPACE
DROP TABLESPACE
MANAGE TABLESPACE
CREATE TABLESPACE
ALTER TABLESPACE
看起来只能是UNLIMITED TABLESPACE,赋权看看
SQL& connect / as sysdba
Connected.
SQL& grant UNLIMITED TABLESPACE to
Grant succeeded.
SQL& connect urp/urp
Connected.
SQL& create table emp(id number,username varchar(30));
Table created.
看起来成功了也就是说如果一个用户需要连接数据库并且创建表必须有三个权限CREATE SESSION&& &&& &&& &--连接数据库权限UNLIMITED TABLESPACE&& &--表空间无限制权限(空间配额)CREATE TABLE&& &&& &&& &--建立数据表权限
继续测试有了数据表,我们插入、修改、删除等基本权限:
SQL& connect urp/urp
Connected.
SQL& create table emp(id number,username varchar(30));
Table created.
SQL& insert into emp values(1,'urp');
1 row created.
SQL& commit;
Commit complete.
SQL& update emp set username='urp1' where id=1;
1 row updated.
SQL& commit;
Commit complete.
SQL& select * from
ID USERNAME
---------- ------------------------------
SQL& delete from emp where id=1;
1 row deleted.
SQL& commit;
Commit complete.
看起来没什么问题了我们试试一些常用的操作:非空约束
SQL& alter table emp modify (id constraints id_not_null NOT NULL);
Table altered.
SQL& alter table emp add constraint pk_id primary key (id);
Table altered.
SQL& alter table emp add constraint uk_username unique(username);
Table altered.
SQL& alter table emp add dep varchar(30);
Table altered.
create index idx_emp_dep on emp(dep);
Index created.
建立sequence
SQL& create sequence seq_emp_id
minvalue 1
start with 5000
increment by 1
create sequence seq_emp_id
ERROR at line 1:
ORA-01031: insufficient privileges
提示没有权限,继续老办法,回到dba用户执行
SQL& select privilege from dba_sys_privs where privilege like '%SEQUENCE%' group by
----------------------------------------
CREATE ANY SEQUENCE
ALTER ANY SEQUENCE
DROP ANY SEQUENCE
SELECT ANY SEQUENCE
CREATE SEQUENCE
备注:CREATE SEQUENCE & CREATE ANY SEQUENCE 主要区别在于:CREATE SEQUENCE:可以在当前用户下建立SEQUENCECREATE ANY SEQUENCE:可以在其他用户下建立SEQUENCE,权限表中其他有关ANY的权限也是这样。赋予用户CREATE SEQUENCE权限
SQL& grant CREATE SEQUENCE to
Grant succeeded.
SQL& connect urp/urp
Connected.
SQL& create sequence seq_emp_id
minvalue 1
maxvalue 500000
start with 5000
increment by 1
Sequence created.
SQL& select seq_emp_id.nextval from
----------
select seq_emp_id.nextval from
----------
SQL& select seq_emp_id.currval from
----------
SQL& insert into emp values(seq_emp_id.nextval,'john','system');
1 row created.
SQL& commit;
Commit complete.
SQL& insert into emp values(seq_emp_id.nextval,'tom','hr');
1 row created.
SQL& commit;
Commit complete.
SQL& select * from
ID USERNAME
---------- ------------------------------ ------------------------------
存储过程测试(一样遇到问题,赋予权限后ok)
SQL& CREATE OR REPLACE PROCEDURE TEST
create or replace procedure TEST
ERROR at line 1:
ORA-01031: insufficient privileges
SQL& connect / as sysdba
Connected.
SQL& select privilege from dba_sys_privs where privilege like '%PROCEDURE%' group by
----------------------------------------
DROP ANY PROCEDURE
EXECUTE ANY PROCEDURE
ALTER ANY PROCEDURE
CREATE ANY PROCEDURE
CREATE PROCEDURE
DEBUG ANY PROCEDURE
6 rows selected.
SQL& grant CREATE PROCEDURE to
Grant succeeded.
SQL& connect urp/urp
Connected.
SQL& CREATE OR REPLACE PROCEDURE TEST
Procedure created.
PL/SQL procedure successfully completed.
触发器测试(继续遇到权限问题,同样方法解决)
SQL& alter table emp drop constraint pk_
Table altered.
update emp set id=5003 ;
2 rows updated.
SQL& commit;
Commit complete.
SQL&CREATE OR REPLACE TRIGGER trg_del_emp_info
BEFORE DELETE
FOR EACH ROW
-- local variables here
INSERT INTO emp1(id,username,dep)
seq_emp_id.NEXTVAL,
:OLD.username,
:OLD.dep);
Trigger created.
SQL& select * from
ID USERNAME
---------- ------------------------------ ------------------------------
SQL& select * from emp1;
no rows selected
delete from emp where id=5003;
2 rows deleted.
SQL& commit;
Commit complete.
SQL& select * from emp1;
ID USERNAME
---------- ------------------------------ ------------------------------
.....基本是这些了把那由此见得我们日常使用还需要CREATE SEQUENCECREATE PROCEDURECREATE TRIGGER....等等现在我们看看urp所具有的权限SQL& select * from user_sys_USERNAME&&&&&&&&&&&&&&&&&&&&&& PRIVILEGE&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ADM------------------------------ ---------------------------------------- ---URP&&&&&&&&&&&&&&&&&&&&&&&&&&& CREATE SESSION&&&&&&&&&&&&&&&&&&&&&&&&&& NOURP&&&&&&&&&&&&&&&&&&&&&&&&&&& UNLIMITED TABLESPACE&&&&&&&&&&&&&&&&&&&& NOURP&&&&&&&&&&&&&&&&&&&&&&&&&&& CREATE SEQUENCE&&&&&&&&&&&&&&&&&&&&&&&&& NOURP&&&&&&&&&&&&&&&&&&&&&&&&&&& CREATE TRIGGER&&&&&&&&&&&&&&&&&&&&&&&&&& NOURP&&&&&&&&&&&&&&&&&&&&&&&&&&& CREATE PROCEDURE&&&&&&&&&&&&&&&&&&&&&&&& NOURP&&&&&&&&&&&&&&&&&&&&&&&&&&& CREATE TABLE&&&&&&&&&&&&&&&&&&&&&&&&&&&& NO
折腾了那么多为了就是说明用户&-&权限方式对oracle的管理非常麻烦
oracle还有一个角色管理可以方便的授权,角色是一组权限的集合(也可以是一组角色的组合,也就是角色可以有包含关系)
用户--角色1_____角色2&& &&& &&&& |___权限1&
给用户授予角色1这个role,用户就同时拥有了角色2及权限1的权限属性
之前看了很多文档,昏昏的,我自己觉得很抽象,一些常用的其他操作
出处:/blog/1304934
查询用户拥有哪里权限:
SQL& select * from dba_role_
SQL& select * from dba_sys_
SQL& select * from role_sys_
查自己拥有哪些系统权限
SQL& select * from session_
SQL& drop user 用户名 cascade;
//加上cascade则将用户连同其创建的东西全部删除
系统权限传递:
增加WITH ADMIN OPTION选项,则得到的权限可以传递。
SQL& grant connect, resorce to user50 with admin option;
//可以传递所获权限。
系统权限回收:系统权限只能由DBA用户回收
SQL& Revoke connect, resource from user50;
查询用户拥有哪里权限:
SQL& select * from dba_role_
SQL& select * from dba_sys_
SQL& select * from role_sys_
查自己拥有哪些系统权限
SQL& select * from session_
SQL& drop user 用户名 cascade;
//加上cascade则将用户连同其创建的东西全部删除
系统权限传递:
增加WITH ADMIN OPTION选项,则得到的权限可以传递。
SQL& grant connect, resorce to user50 with admin option;
//可以传递所获权限。
系统权限回收:系统权限只能由DBA用户回收
SQL& Revoke connect, resource from user50;
继续上个图,其实几个关于用户、权限、角色的表只是分布在了dba字典表,user字典表
role相关的管理角色,sys相关的管理系统权限
总结如图...往上,往上,回去上图看看用户、角色、权限的关系关于oracle用户、角色、权限还有很多知识点,有时间再写写
完全原创,如有转载希望保留出处及作者
阅读(...) 评论()Oracle_角色_权限详细说明 - 推酷
Oracle_角色_权限详细说明
一、Oracle内置角色connect与resource的权限
grant connect,&
CONNECT角色: --是授予最终用户的典型权利,最基本的&
ALTER SESSION --修改会话&
CREATE CLUSTER --建立聚簇&
CREATE DATABASE LINK --建立数据库链接&
CREATE SEQUENCE --建立序列&
CREATE SESSION --建立会话&
CREATE SYNONYM --建立同义词&
CREATE VIEW --建立视图&
RESOURCE 角色: --是授予开发人员的&
CREATE CLUSTER --建立聚簇&
CREATE PROCEDURE --建立过程&
CREATE SEQUENCE --建立序列&
CREATE TABLE --建表&
CREATE TRIGGER --建立触发器&
CREATE TYPE --建立类型&
从dba_sys_privs里可以查到(注意这里必须以DBA角色登录):&
select grantee,privilege from dba_sys_privs&
where grantee='RESOURCE'&
=================================================&
一、何为角色?&
在前面的篇幅中说明权限和用户。慢慢的在使用中你会发现一个问题:如果有一组人,他们的所需的权限是一样的,当对他们的权限进行管理的时候会很不方便。因为你要对这组中的每个用户的权限都进行管理。 有一个很好的解决办法就是:角色。角色是一组权限的集合,将角色赋给一个用户,这个用户就拥有了这个角色中的所有权限。那么上述问题就很好处理了,只要第一次将角色赋给这一组用户,接下来就只要针对角色进行管理就可以了。&
以上是角色的一个典型用途。其实,只要明白:角色就是一组权限的集合。
下面分两个部分来对oracle角色进行说明。&
二、系统预定义角色&
预定义角色是在数据库***后,系统自动创建的一些常用的角色。下介简单的介绍一下这些预定角色。角色所包含的权限可以用以下语句查询:&
sql&select * from role_sys_privs where role='角色名';&
1.CONNECT, RESOURCE, DBA&
这些预定义角色主要是为了向后兼容。其主要是用于数据库管理。
oracle建议用户自己设计数据库管理和安全的权限规划,而不要简单的使用这些预定角色。 将来的版本中这些角色可能不会作为预定义角色。&
2.DELETE_CATALOG_ROLE, EXECUTE_CATALOG_ROLE, SELECT_CATALOG_ROLE&
这些角色主要用于访问数据字典视图和包。&
3.EXP_FULL_DATABASE, IMP_FULL_DATABASE&
这两个角色用于数据导入导出工具的使用。&
4.AQ_USER_ROLE, AQ_ADMINISTRATOR_ROLE&
AQ:Advanced Query。这两个角色用于oracle高级查询功能。&
5.SNMPAGENT&
用于oracle enterprise manager和Intelligent Agent&
6.RECOVERY_CATALOG_OWNER&
用于创建拥有恢复库的用户。关于恢复库的信息,参考oracle文档《Oracle9i User-Managed Backup and Recovery Guide》&
7.HS_ADMIN_ROLE&
A DBA using Oracle's heterogeneous services feature needs this role to access appropriate tables in the data dictionary.&
二、管理角色&
1.建一个角色&
sql&create role role1;&
2.授权给角色&
sql&grant create any table,create procedure to role1;&
3.授予角色给用户&
sql&grant role1 to user1;&
4.查看角色所包含的权限&
sql&select * from role_sys_&
5.创建带有口令以角色(在生效带有口令的角色时必须提供口令)&
sql&create role role1 identified by password1;&
6.修改角色:是否需要口令&
sql&alter role role1&
sql&alter role role1 identified by password1;&
7.设置当前用户要生效的角色&
(注:角色的生效是一个什么概念呢?
假设用户a有b1,b2,b3三个角色,那么如果b1未生效,则b1所包含的权限对于a来讲是不拥有的,
只有角色生效了,角色内的权限才作用于用户,最大可生效角色数由参数MAX_ENABLED_ROLES设定;
在用户登录后,oracle将所有直接赋给用户的权限和用户默认角色中的权限赋给用户。)&
sql&set role role1;//使role1生效&
sql&set role role,role2;//使role1,role2生效&
sql&set role role1 identified by password1;//使用带有口令的role1生效&
sql&//使用该用户的所有角色生效&
sql&//设置所有角色失效&
sql&set role all except role1;//除role1外的该用户的所有其它角色生效。&
sql&select * from SESSION_ROLES;//查看当前用户的生效的角色。&
8.修改指定用户,设置其默认角色&
sql&alter user user1 default role role1;&
sql&alter user user1 default role all except role1;&
详见oracle参考文档&
9.删除角色&
sql&drop role role1;&
角色删除后,原来拥用该角色的用户就不再拥有该角色了,相应的权限也就没有了。&
============================================================&
一、权限分类:&
系统权限:系统规定用户使用数据库的权限。(系统权限是对用户而言)。&
实体权限:某种权限用户对其它用户的表或视图的存取权限。(是针对表或视图而言的)。&
二、系统权限管理:&
1、系统权限分类:&
DBA: 拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构。&
RESOURCE:拥有Resource权限的用户只可以创建实体,不可以创建数据库结构。&
CONNECT:拥有Connect权限的用户只可以登录Oracle,不可以创建实体,不可以创建数据库结构。&
对于普通用户:授予connect, resource权限。&
对于DBA管理用户:授予connect,resource, dba权限。&
2、系统权限授权命令:&
[系统权限只能由DBA用户授出:sys, system(最开始只能是这两个用户)]&
授权命令:SQL& grant connect, resource, dba to 用户名1 [,用户名2]...;&
[普通用户通过授权可以具有与system相同的用户权限,但永远不能达到与sys用户相同的权限,system用户的权限也可以被回收。]&
查询用户拥有哪里权限:&
SQL& select * from dba_role_&
SQL& select * from dba_sys_&
SQL& select * from role_sys_&
删除用户:SQL& drop user 用户名 //加上cascade则将用户连同其创建的东西全部删除&
3、系统权限传递:&
增加WITH ADMIN OPTION选项,则得到的权限可以传递。&
SQL& grant connect, resorce to user50 //可以传递所获权限。&
4、系统权限回收:系统权限只能由DBA用户回收&
命令:SQL& Revoke connect, resource from user50;&
1)如果使用WITH ADMIN OPTION为某个用户授予系统权限,那么对于被这个用户授予相同权限的所有用户来说,取消该用户的系统权限并不会级联取消这些用户的相同权限。
2)系统权限无级联,即A授予B权限,B授予C权限,如果A收回B的权限,C的权限不受影响;系统权限可以跨用户回收,即A可以直接收回C用户的权限。&
三、实体权限管理&
1、实体权限分类:select, update, insert, alter, index, delete, all //all包括所有权限 ,execute //执行存储过程权限&
SQL& grant select, update, insert on product to user02;&
SQL& grant all on product to user02;&
SQL& select * from user01.&
// 此时user02查user_tables,不包括user01.product这个表,但如果查all_tables则可以查到,因为他可以访问。&
2. 将表的操作权限授予全体用户:&
SQL& grant all
// public表示是所有的用户,这里的all权限不包括drop。&
[实体权限数据字典]:&
SQL& select owner, table_name from all_ // 用户可以查询的表&
SQL& select table_name from user_ // 用户创建的表&
SQL& select grantor, table_schema, table_name, privilege from all_tab_ // 获权可以存取的表(被授权的)&
SQL& select grantee, owner, table_name, privilege from user_tab_ & // 授出权限的表(授出的权限)&
3. DBA用户可以操作全体用户的任意基表(无需授权,包括删除):&
DBA用户:&
SQL& Create table stud02.product(&
id number(10),&
name varchar2(20));&
SQL& drop table stud02.&
SQL& create table stud02.employee&
select * from scott.&
4. 实体权限传递(with grant option):&
SQL& grant select, update on product to user02 // user02得到权限,并可以传递。&
5. 实体权限回收:&
SQL&Revoke select, update on product from user02; //传递的权限将全部丢失。&
1)如果取消某个用户的对象权限,那么对于这个用户使用WITH GRANT OPTION授予权限的用户来说,同样还会取消这些用户的相同权限,也就是说取消授权时级联的。&
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致

参考资料

 

随机推荐