zoukankan      html  css  js  c++  java
  • 文章标题

    在全局数据库ORCL下创建一个用户
    首先在开始–》运行——》sqlplus,然后输入 sys/change_on_install as sysdba
    以system权限登陆进去
    然后可以进行操作:
    创建用户 create user test identified by test;
    这样就创建了一个用户名密码都为test的用户
    但这个时候test还是不能登陆成功的,我们需要赋予相应的权限
    首先赋予create session的权限
    grant create session to test;
    这样test用户就能成功登陆进去
    但是此时用户还是不能创建表 我们需要赋予用户创建表的权限:
    grant create table to test;
    但是用户此时还不能创建表 因为需要有使用表空间的权限(相当于 用户有了进房间的钥匙 但是没有进大门的钥匙)
    所以也应该赋予相应的权限
    grant unlimited tablespace to test;
    这个时候用户就拥有了创建表的权限 由于表是用户test的 相应的他就拥有了对创建的表的增删查改的权限了
    我们要查看用户拥有什么权限可以通过查询一个系统的视图(数字字典)
    select * from user_sys_privs;
    这样就可以知道当前用户的权限
    撤销权限 revoke create table from test;

    场景:
    用户test 用户test1
    test1的用户创建了个表mytab 并且插入了一些数据
    那么 test用户是否可以访问到test1的mytab怎么访问?
    答:不可以,必须先授权
    test1必须授权给test :grant select on mytab to test;
    那么这个时候test可以通过 select * from test1.mytab;来访问mytab中的数据
    如果想把某个表(对象)的所有权限都赋予给test那么可以:
    grant all on mytab to test;
    撤销所有权限
    revoke all on mytab to test;

    总结:
    对于系统权限由sys来做
    对于对象权限由 谁拥有谁授权
    系统权限:
    grant create session to test;
    grant create table to test;
    grant unlimited tablespace to test;
    revoke create session from test;
    revoke create table from test;
    revoke unlimited tablespase from test;
    grant create session to public; //表示把创建表的权限赋予所有人
    select * from user_sys_privs; //返回当前用户的所有系统权限
    grant select on mytab to test;
    grant all on mytab to test;
    revoke select on mytab from test;
    revoke all on mytab from test;

    对象权限可以控制到列 (更新和插入操作)
    grant update(name) on mytab to test;
    grant insert(id) on mytab to test;
    

    select * from user_col_privs;
    注意:查询和删除不能控制到列
    需要有commit的 insert update insert
    权限的传递
    系统权限的传递:
    grant alter table to A with admin option;
    那么A可以通过把该权限传递给B,如果想B也可以传递下去那么可以也带上with admin option
    grant alter table to B;
    对象权限的传递:
    grant select on mytab to A with grant option;
    那么A可以把在表mytab的select权限赋予给B,如果B想也能传递该select权限也可以带上with grant option
    grant select on mytab to B;

    –创建用户
    create user keeltest identified by keeltest;
    –分配权限
    grant create session,create table,create view ,create any index to keeltest;
    grant unlimited tablespace to keeltest;

    –系统权限:是针对oracle系统操作而言,例如登陆create session,创建表:create table等;
    –对象权限:是针对对象操作的,例如:查询select,更新update等;
    –角色权限:角色其实是特定系统权限和对象权限的组合,是一组权限的组合,便于对用户授权,Oracle内置了一些角色,如经常使用的 connnet,reseource和dba等。

    关于几种常见的角色权限的理解:
    1.dba角色的权限很大,不要给普通用户。一般的用户,只要给connect和resource权限就可以,sql语句授权是
    grant connect,resource,unlimited tablespace to user1;
    如果权限不够,需要用到其他的权限,则可另外授权,如这个用户需要执行某些特别的包,比如DBMS_ADVISOR,这时可以再授权:
    grant execute on dbms_advisor to user1;
    2.对象权限主要是insert,select,delete,update,exec几种,关键是你允许人家干什么,就授权人家做什么就可以了。
    (本人疑问:当user1创建的table1以后,系统初始化了一部分数据,现在只想允许user1查询数据,不可增删改数据时怎么处理?网上网友给的建议多数倾向于使用触发器来解决这个问题,可以用oralce中的权限来解决这个问题吗?待研究!)
    3.如果加了:with admin,就是允许被授权者可以将得到的权限再授给别人。一般不要加上这样的授权语法,不然无限授权下去很麻烦。

    –下面的sql是查看oracle的角色拥有的哪些权限的sql,前提是当前用户有查看dba_sys_privs的权限,我用的用户有dba的角色权限,
    select grantee,privilege from dba_sys_privs where grantee=’RESOURCE’ order by privilege;–无dba的角色权限时提示 表或试图不存在!
    select grantee,privilege from dba_sys_privs where grantee=’CONNECT’ order by privilege;

    –下面的sql是查看用户拥有的角色,拥有的系统权限的sql,我测试时当前用户只有connect角色
    select * from user_role_privs;–用户所拥有的Oracle角色
    select * from user_sys_privs; –用户所用户的系统权限
    select * from table_privilege_map;
    select * from session_privs;

    –用户user1和user2,使用用户user1创建表table1(下面的是本人按照顺序依次执行测试的):
    (1)当user2拥有dba角色时,执行sql:select * from user2.teble1;不会出错,而且可以修改表数据,可以修改表结构等操作;
    (2)当去掉user2的dba角色时,设置很低的权限,执行上述的sql,提示“ORA-01031 权限不足”;
    (3)当user1登录oracle,使用sql:grant select on taleb1 to user1后,user2执行上述的查询语句ok;不能修改,修改后提交时提示“权限不足!”;
    (4)当user1执行sql:revoke select on table1 from user2后,user2执行table1查询的sql时报错,提示“权限不足”。
    (5)当user1使用revoke或者grant 语句为自己授权时,提示“ORA-01749 用户不能为自己revoke/grant权限”
    (6)当sys用户使用revoke select on user1.table1 from user1时,oracle系统提示“ORA-无法REVOKE您未授权的权限”,此时再用user1执行把表table1的任何权限(也就是select,inseert,update,delete,references,alter,index)授予sys或者用用dba角色的用户,再使用sys执行:revoke select on use1.table1 from user1时,仍是提示“ORA-无法REVOKE您未授权的权限”.
    【结论】:use1创建的对象(如表),user1永久对此表拥有权限,不可删除。

    –如何查看对表table1有访问权限的用户
    方法1:使用plsql工具查看表对象时在最后一栏中有Privileges(权限的意思)标签页,点开可以看到所用用户对此表的权限,如
    如 Grantee(承授人),select,inseert,update,delete,references,alter,index
    user1 Yes
    user2 Yes Yes Yes Yes
    方法2:具有一定权限的用户(我测试时是DBA)使用select * from dba_tab_privs a where a.table_name=’TABLE1’查看,否则在无权限时提示“表或视图不存在”;

  • 相关阅读:
    【乱侃】How do they look them ?
    【softeware】Messy code,some bug of Youdao notebook in EN win7
    【随谈】designing the login page of our project
    【web】Ad in security code, making good use of resource
    SQL数据库内存设置篇
    关系数据库的查询优化策略
    利用SQL未公开的存储过程实现分页
    sql语句总结
    sql中使用cmd命令注销登录用户
    SQLServer 分页存储过程
  • 原文地址:https://www.cnblogs.com/lllini/p/11955290.html
Copyright © 2011-2022 走看看