oracle的授权问题,sys timer createe session只能由sys用户授权吗

Oracle 用户权限管理方法
字体:[ ] 类型:转载 时间:
Oracle 用户权限管理方法,对于想要学习oracle安全的朋友,是个入门级的资料。
//系统管理员,拥有最高权限 //本地管理员,次高权限 //普通用户,密码默认为tiger,默认未解锁 //系统管理员,拥有最高权限 //本地管理员,次高权限 //普通用户,密码默认为tiger,默认未解锁 二、登陆 sqlplus ///登陆sys帐户 s//同上 sqlplus scott///登陆普通用户scott sqlplus ///登陆sys帐户 s//同上 sqlplus scott///登陆普通用户scott 三、管理用户 //在管理员帐户下,创建用户zhangsan alert user scott//修改密码 //在管理员帐户下,创建用户zhangsan alert user scott//修改密码 四,授予权限 1、默认的普通用户scott默认未解锁,不能进行那个使用,新建的用户也没有任何权限,必须授予权限 /*管理员授权*/ grant create//授予zhangsan用户创建session的权限,即登陆权限 grant unlimited//授予zhangsan用户使用表空间的权限 grant crea//授予创建表的权限 grante dr//授予删除表的权限 grant inse//插入表的权限 grant upda//修改表的权限 //这条比较重要,授予所有权限(all)给所有用户(public) /*管理员授权*/ grant create//授予zhangsan用户创建session的权限,即登陆权限 grant unlimited//授予zhangsan用户使用表空间的权限 grant crea//授予创建表的权限 grante dr//授予删除表的权限 grant inse//插入表的权限 grant upda//修改表的权限 //这条比较重要,授予所有权限(all)给所有用户(public) 2、oralce对权限管理比较严谨,普通用户之间也是默认不能互相访问的,需要互相授权 /*oralce对权限管理比较严谨,普通用户之间也是默认不能互相访问的*/ grant select on t//授予zhangsan用户查看指定表的权限 grant drop on t//授予删除表的权限 grant insert on t//授予插入的权限 grant update on t//授予修改表的权限 grant insert(id) on t grant update(id) on t//授予对指定表特定字段的插入和修改权限,注意,只能是insert和update grant alert a//授予zhangsan用户alert任意表的权限 /*oralce对权限管理比较严谨,普通用户之间也是默认不能互相访问的*/ grant select on t//授予zhangsan用户查看指定表的权限 grant drop on t//授予删除表的权限 grant insert on t//授予插入的权限 grant update on t//授予修改表的权限 grant insert(id) on t grant update(id) on t//授予对指定表特定字段的插入和修改权限,注意,只能是insert和update grant alert a//授予zhangsan用户alert任意表的权限 五、撤销权限 基本语法同grant,关键字为revoke 基本语法同grant,关键字为revoke 六、查看权限 select * from user_sys_//查看当前用户所有权限 select * from user_tab_//查看所用用户对表的权限 select * from user_sys_//查看当前用户所有权限 select * from user_tab_//查看所用用户对表的权限 七、操作表的用户的表 /*需要在表名前加上用户名,如下*/ select * from zhangsan.tablename /*需要在表名前加上用户名,如下*/ select * from zhangsan.tablename 八、权限传递 即用户A将权限授予B,B可以将操作的权限再授予C,命令如下: grant alert table on tablename to zhangs//关键字 with admin option grant alert table on tablename to zhangs//关键字 with grant option效果和admin类似 grant alert table on tablename to zhangs//关键字 with admin option grant alert table on tablename to zhangs//关键字 with grant option效果和admin类似 九、角色 角色即权限的集合,可以把一个角色授予给用户 //创建角色 grant crea//将创建session的权限授予myrole gran//授予zhangsan用户myrole的角色 删除角色 /*但是有些权限是不能授予给角色的,比如unlimited tablespace和any关键字*/
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具oracle创造新用户及授予常用权限
&来源:读书人网&【读书人网():综合教育门户网站】
oracle创建新用户及授予常用权限创建用户create user usernameidentified by usernamedefault tablespace
oracle创建新用户及授予常用权限
创建用户create user usernameidentified by usernamedefault tablespace tablespace_授予一般权限grant connect,resource,create any table,drop any table,create sequence, ????? select any table, create any index, drop any index,????? alter any trigger, create any trigger, drop any trigger,????? alter any type, create any type, drop any type,????? create any view, drop any view, create any directory, ????? create procedure, query rewrite, create授予DBA权限grant select on sys.v_$grant select on sys.v_$pgrant execute on dbms_grant select on sys.v_$grant select on sys.v_$grant select on sys.v_$grant select on sys.v_$session_grant select on dba_grant select on sys.v_$grant select on sys.slog$grant altergrant select on dba_undo_grant select on dba_tabgrant select on dba_free_grant select on dba_data_
你这里给用户授予的权限太多,一般只要connect,resource,足够。
michael8335
mikixiyou 写道你这里给用户授予的权限太多,一般只要connect,resource,足够。嗯,这里有限权限是不需要的,例如一些DBA的视图等,希望以后关于方面的知识多多指教ORACLE用户、角色、权限 - 推酷
ORACLE用户、角色、权限
用了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:可以在当前用户下建立SEQUENCE
CREATE 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 SEQUENCE
CREATE PROCEDURE
CREATE TRIGGER
现在我们看看urp所具有的权限
SQL& select * from user_sys_
USERNAME&&&&&&&&&&&&&&&&&&&&&& PRIVILEGE&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ADM
------------------------------ ---------------------------------------- ---
URP&&&&&&&&&&&&&&&&&&&&&&&&&&& CREATE SESSION&&&&&&&&&&&&&&&&&&&&&&&&&& NO
URP&&&&&&&&&&&&&&&&&&&&&&&&&&& UNLIMITED TABLESPACE&&&&&&&&&&&&&&&&&&&& NO
URP&&&&&&&&&&&&&&&&&&&&&&&&&&& CREATE SEQUENCE&&&&&&&&&&&&&&&&&&&&&&&&& NO
URP&&&&&&&&&&&&&&&&&&&&&&&&&&& CREATE TRIGGER&&&&&&&&&&&&&&&&&&&&&&&&&& NO
URP&&&&&&&&&&&&&&&&&&&&&&&&&&& CREATE PROCEDURE&&&&&&&&&&&&&&&&&&&&&&&& NO
URP&&&&&&&&&&&&&&&&&&&&&&&&&&& 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用户、角色、权限还有很多知识点,有时间再写写
完全原创,如有转载希望保留出处及作者
已发表评论数()
已收藏到推刊!
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
没有分页内容
图片无法显示
视频无法显示
与原文不一致随笔 - 68&
文章 - 0&评论 - 53&trackbacks - 0
  create session
  create table
  unlimited tablespace
  connect
  resource
  #sqlplus /nolog
  SQL& conn /
  SQL&create user username identified by password
  SQL& g
  SQL& conn username/password
  SQL& select * from user_sys_
  我们将从创建Oracle用户权限表开始谈起,然后讲解登陆等一般性动作,使大家对Oracle用户权限表有个深入的了解。
  一、创建
  //系统管理员,拥有最高权限
  //本地管理员,次高权限
  //普通用户,密码默认为tiger,默认未解锁
  二、登陆
  sqlplus ///登陆sys帐户
  s//同上
  sqlplus scott///登陆普通用户scott
  三、管理用户
  //在管理员帐户下,创建用户zhangsan
  alert user scott//修改密码
  四,授予权限
  1、默认的普通用户scott默认未解锁,不能进行那个使用,新建的用户也没有任何权限,必须授予权限
  grant create//授予zhangsan用户创建session的权限,即登陆权限
  grant unlimited ta//授予zhangsan用户使用表空间的权限
  grant crea//授予创建表的权限
  grante dr//授予删除表的权限
  grant inse//插入表的权限
  grant upda//修改表的权限
  //这条比较重要,授予所有权限(all)给所有用户(public)
  2、oralce对权限管理比较严谨,普通用户之间也是默认不能互相访问的,需要互相授权
  grant select on t//授予zhangsan用户查看指定表的权限
  grant drop on t//授予删除表的权限
  grant insert on t//授予插入的权限
  grant update on t//授予修改表的权限
  grant insert(id) on t
  grant update(id) on t//授予对指定表特定字段的插入和修改权限,注意,只能是insert和update
  grant alert a//授予zhangsan用户alert任意表的权限
  五、撤销权限
  基本语法同grant,关键字为revoke
  六、查看权限
  select * from user_sys_//查看当前用户所有权限
  select * from user_tab_//查看所用用户对表的权限
  七、操作表的用户的表
  select * from zhangsan.tablename
  八、权限传递
  即用户A将权限授予B,B可以将操作的权限再授予C,命令如下:
  grant alert table on tablename to zhangs//关键字 with admin option
  grant alert table on tablename to zhangs//关键字 with grant option效果和admin类似
  九、角色
  角色即权限的集合,可以把一个角色授予给用户
  //创建角色
  grant crea//将创建session的权限授予myrole
  gran//授予zhangsan用户myrole的角色
  删除角色
  编辑特别推荐:
阅读(...) 评论()当前位置:&>&&>&
oracle数据库用户授权的问题
时间: 12:20:02    来源:服务器之家    投稿:root
Oracle用户授权看起来是很简单的事情,但是如果做过头了,很可能引发大问题。所以我们在做Oracle用户授权时,需要谨慎又谨慎。
看到有人提问关于Oracle用户授权的问题. 不由得想多说几句. Oracle 9i
以及以下版本的数据库,默认的数据库角色有些不太合理的地方. DBA 管理的过程中,如果不太注意的话,可能会带来麻烦或者潜在的隐忧.
比如最常见的 CONNECT 角色.
User&=&&FOO&has&been&granted&the&following&privileges&
====================================================================
&&&&&&&&ROLE&=&&CONNECT&which&contains&=&
&&&&&&&&SYS&PRIV&=&&ALTER&SESSION&&&grantable&=&&NO&
&&&&&&&&SYS&PRIV&=&&CREATE&CLUSTER&&&grantable&=&&NO&
&&&&&&&&SYS&PRIV&=&&CREATE&DATABASE&LINK&&grantable&=&&NO&
&&&&&&&&SYS&PRIV&=&&CREATE&SEQUENCE&&&grantable&=&&NO&
&&&&&&&&SYS&PRIV&=&&CREATE&SESSION&&&grantable&=&&NO&
&&&&&&&&SYS&PRIV&=&&CREATE&SYNONYM&&&grantable&=&&NO&
&&&&&&&&SYS&PRIV&=&&CREATE&TABLE&&&grantable&=&&NO&
&&&&&&&&SYS&PRIV&=&&CREATE&VIEW&&&grantable&=&&NO&
这里面的 ALTER SESSION 就是一个问题. 恶意的用户很容易利用这个权限给系统带来麻烦.举两个例子,一个是 修改当前
Session 的 cursor_sharing 参数值为 FORCE ,然后提交可触发 Oracle Bug
的查询(cursor_sharing 在 FORCE 模式下 Bug 很多) , 很容易让数据库崩溃. 或者恶意用户提交 alter
session set hash_area_size ... 的修改语句, 给自己设定一个超大的 HASH_AREA_SIZE ,
再提交一定的查询,也会给系统性能造成很糟糕的影响.
这个 CONNECT 角色在 Oracle 10g 中已经修改了,只有 create session 的权限.
再来一个角色的问题. 比如 REOURCE 角色, 包含的权限如下所示:
User&=&&FOO&has&been&granted&the&following&privileges&
====================================================================
&&&&&&&&ROLE&=&&RESOURCE&which&contains&=&
&&&&&&&&SYS&PRIV&=&&CREATE&CLUSTER&&&&grantable&=&&NO&
&&&&&&&&SYS&PRIV&=&&CREATE&INDEXTYPE&&&grantable&=&&NO&
&&&&&&&&SYS&PRIV&=&&CREATE&OPERATOR&&&&grantable&=&&NO&
&&&&&&&&SYS&PRIV&=&&CREATE&PROCEDURE&&&grantable&=&&NO&
&&&&&&&&SYS&PRIV&=&&CREATE&SEQUENCE&&&&grantable&=&&NO&
&&&&&&&&SYS&PRIV&=&&CREATE&TABLE&&&&grantable&=&&NO&
&&&&&&&&SYS&PRIV&=&&CREATE&TRIGGER&&&&grantable&=&&NO&
&&&&&&&&SYS&PRIV&=&&CREATE&TYPE&&&&grantable&=&&NO&
&&&&&&&&SYS&PRIV&=&&UNLIMITED&TABLESPACE&&&grantable&=&&NO&
注意是包含 UNLIMITED TABLESPACE
权限的(实际上是隐含的一个权限,Oracle为什么这样做,没有明确的文档说明,在 10g 中为了向后兼容,也是这样的.),
恶意用户利用这个造成麻烦很容易:在 SYSTEM 建立一个足够大的表即可让数据库宕机.
所以,DBA 在给用户授权的时候还是谨慎为是,建议利用"最小授权原则", 只给用户必须的权限.
转载请注明原文地址:

我要回帖

更多关于 sys timer create 的文章

 

随机推荐