Oracle的对象权限、角色权限、系统权限
2014-05-17 23:16
477 查看
ORACLE用户权限在全局数据库ORCL下创建一个用户 首先在开始--》运行——》sqlplus,然后输入sys/change_on_installassysdba 以system权限登陆进去 然后可以进行操作: 创建用户createusertestindentifiedbytest; 这样就创建了一个用户名密码都为test的用户 但这个时候test还是不能登陆成功的,我们需要赋予相应的权限 首先赋予createsession的权限 grantcreatesessiontotest; 这样test用户就能成功登陆进去 但是此时用户还是不能创建表我们需要赋予用户创建表的权限: grantcreatetabletotest; 但是用户此时还不能创建表因为需要有使用表空间的权限(相当于用户有了进房间的钥匙但是没有进大门的钥匙) 所以也应该赋予相应的权限 grantunlimitedtablespacetotest; 这个时候用户就拥有了创建表的权限由于表是用户test的相应的他就拥有了对创建的表的增删查改的权限了 我们要查看用户拥有什么权限可以通过查询一个系统的视图(数字字典) select*fromuser_sys_privs; 这样就可以知道当前用户的权限 撤销权限revokecreatetablefromtest; 场景: 用户test用户test1 test1的用户创建了个表mytab并且插入了一些数据 那么test用户是否可以访问到test1的mytab怎么访问? 答:不可以,必须先授权 test1必须授权给test:grantselectonmytabtotest; 那么这个时候test可以通过select*fromtest1.mytab;来访问mytab中的数据 如果想把某个表(对象)的所有权限都赋予给test那么可以: grantallonmytabtotest; 撤销所有权限 revokeallonmytabtotest; 总结: 对于系统权限由sys来做 对于对象权限由谁拥有谁授权 系统权限: grantcreatesessiontotest; grantcreatetabletotest; grantunlimitedtablespacetotest; revokecreatesessionfromtest; revokecreatetablefromtest; revokeunlimitedtablespasefromtest; grantcreatesessiontopublic;//表示把创建表的权限赋予所有人 select*fromuser_sys_privs;//返回当前用户的所有系统权限 grantselectonmytabtotest; grantallonmytabtotest; revokeselectonmytabfromtest; revokeallonmytabfromtest; 对象权限可以控制到列(更新和插入操作) grantupdate(name)onmytabtotest; grantinsert(id)onmytabtotest; select*fromuser_col_privs; 注意:查询和删除不能控制到列 需要有commit的insertupdateinsert 权限的传递 系统权限的传递: grantaltertabletoAwithadminoption; 那么A可以通过把该权限传递给B,如果想B也可以传递下去那么可以也带上withadminoption grantaltertabletoB; 对象权限的传递: grantselectonmytabtoAwithgrantoption; 那么A可以把在表mytab的select权限赋予给B,如果B想也能传递该select权限也可以带上withgrantoption grantselectonmytabtoB; -------------------------------------------------------------------------------------------------- --创建用户 createuserkeeltestidentifiedbykeeltest; --分配权限 grantcreatesession,createtable,createview,createanyindextokeeltest; grantunlimitedtablespacetokeeltest;
--系统权限:是针对oracle系统操作而言,例如登陆createsession,创建表:createtable等;
--对象权限:是针对对象操作的,例如:查询select,更新update等;
--角色权限:角色其实是特定系统权限和对象权限的组合,是一组权限的组合,便于对用户授权,Oracle内置了一些角色,如经常使用的connnet,reseource和dba等。
关于几种常见的角色权限的理解:
1.dba角色的权限很大,不要给普通用户。一般的用户,只要给connect和resource权限就可以,sql语句授权是
grantconnect,resource,unlimitedtablespacetouser1;
如果权限不够,需要用到其他的权限,则可另外授权,如这个用户需要执行某些特别的包,比如DBMS_ADVISOR,这时可以再授权:
grantexecuteondbms_advisortouser1;
2.对象权限主要是insert,select,delete,update,exec几种,关键是你允许人家干什么,就授权人家做什么就可以了。 (本人疑问:当user1创建的table1以后,系统初始化了一部分数据,现在只想允许user1查询数据,不可增删改数据时怎么处理?网上网友给的建议多数倾向于使用触发器来解决这个问题,可以用oralce中的权限来解决这个问题吗?待研究!)
3.如果加了:withadmin,就是允许被授权者可以将得到的权限再授给别人。一般不要加上这样的授权语法,不然无限授权下去很麻烦。
--下面的sql是查看oracle的角色拥有的哪些权限的sql,前提是当前用户有查看dba_sys_privs的权限,我用的用户有dba的角色权限,
selectgrantee,privilegefromdba_sys_privswheregrantee='RESOURCE'orderbyprivilege;--无dba的角色权限时提示表或试图不存在!
selectgrantee,privilegefromdba_sys_privswheregrantee='CONNECT'orderbyprivilege;
--下面的sql是查看用户拥有的角色,拥有的系统权限的sql,我测试时当前用户只有connect角色
select*fromuser_role_privs;--用户所拥有的oracle角色
select*fromuser_sys_privs;--用户所用户的系统权限
select*fromtable_privilege_map;
select*fromsession_privs;
--用户user1和user2,使用用户user1创建表table1(下面的是本人按照顺序依次执行测试的):
(1)当user2拥有dba角色时,执行sql:select*fromuser2.teble1;不会出错,而且可以修改表数据,可以修改表结构等操作;
(2)当去掉user2的dba角色时,设置很低的权限,执行上述的sql,提示“ORA-01031权限不足”;
(3)当user1登录oracle,使用sql:grantselectontaleb1touser1后,user2执行上述的查询语句ok;不能修改,修改后提交时提示“权限不足!”;
(4)当user1执行sql:revokeselectontable1fromuser2后,user2执行table1查询的sql时报错,提示“权限不足”。
(5)当user1使用revoke或者grant语句为自己授权时,提示“ORA-01749用户不能为自己revoke/grant权限”
(6)当sys用户使用revokeselectonuser1.table1fromuser1时,oracle系统提示“ORA-无法REVOKE您未授权的权限”,此时再用user1执行把表table1的任何权限(也就是select,inseert,update,delete,references,alter,index)授予sys或者用用dba角色的用户,再使用sys执行:revokeselectonuse1.table1fromuser1时,仍是提示“ORA-无法REVOKE您未授权的权限”.
【结论】:use1创建的对象(如表),user1永久对此表拥有权限,不可删除。
--如何查看对表table1有访问权限的用户
方法1:使用plsql工具查看表对象时在最后一栏中有Privileges(权限的意思)标签页,点开可以看到所用用户对此表的权限,如
如Grantee(承授人),select,inseert,update,delete,references,alter,index
user1Yes
user2YesYesYesYes
方法2:具有一定权限的用户(我测试时是DBA)使用select*fromdba_tab_privsawherea.table_name='TABLE1'查看,否则在无权限时提示“表或视图不存在”;
相关文章推荐
- oracle 对象权限 系统权限 角色权限
- Oracle 用户、角色、权限(系统权限、对象权限)的数据字典表
- Oracle 用户、角色、权限(系统权限、对象权限)的数据字典(细节版)
- Oracle 用户、角色、权限(系统权限、对象权限)的数据字典表
- Oracle 用户、角色、权限(系统权限、对象权限)的数据字典表
- oracle角色权限,系统权限和对象权限
- Oracle 用户、角色、权限(系统权限、对象权限)的数据字典表
- oracle查询 :一个角色包括的系统权限,对象权限,Oracle有多少种角色,某个用户有什么角色
- oracle对象权限、系统权限与角色对比
- Oracle的对象权限、角色权限、系统权限
- 【oracle】系统权限、对象权限、角色
- Oracle 系统权限、对象权限、角色权限
- Oracle 用户、对象权限、系统权限、角色、配置文件
- Oracle sys和system用户、sysdba 和sysoper系统权限、sysdba和dba角色的区别 .
- Oracle 用户、对象权限、系统权限
- oracle的系统和对象权限
- Oracle PL/SQL之对象权限与系统权限的撤销差异
- --Oracle 用户、对象权限、系统权限
- Oracle 用户、对象权限、系统权限
- Oracle查出一个用户具有的所有系统权限和对象权限