Oracle数据库——权限管理

  3个默认的用户

    网络管理员 sys     change_on_install(Oracle9默认密码)

    普通管理员 system  manager(Oracle9默认密码)

    普通用户   scott    tiger(Oracle9默认密码)

    Oracle10中,用户syssystem没有默认密码,只有在安装的时候指定密码。scott用户由于安全考虑在Oracle10中被锁定了,如果你想使用需要把它解锁。

    这三个用户的权限由高到低,注意,在用sys用户连接数据库的时候一定要在后面加上[as sysdba]

  创建用户

    由一个超级用户登录到数据库,再创建用户

    启动监听服务:lsnrct1 start

    启动数据库实例:oradim -starup -sid orc1

    登录数据库:sqlplus 用户名/密码

              例:sqlplus  / as sysdba 就是sys用户进入数据库

     创建用户命令行:create user 用户名identified by 密码;

  授权与撤销权限

  1.授权

     使用Oracle的图形界面创建用户会默认给用户添加一些权限。使用命令行创建用户后,用户不能立即使用,需超级管理员对新创建的用户授权。会提示“用户**没有create session权限,登录被拒绝”。这样新建立的用户不能连接到数据库,只有在对该用户进行授权后才可以。

     授予会话权限命令行:grant create session to 用户;

此时就可以使用新建的用户登录到数据库了。

     新用户虽然可以登录到数据库,但是不能马上创建表,会提示“权限不足”这样的错误,超级管理员使用命令行grant create table to 用户; 将创建表的权限授予新建的用户,该用户使用create table语句创建表又有错误提示“对表空间**无权限”,这是因为用户在创建表的时候其实是在表空间里创建表,所以如果该用户没有使用表空间的权限。

 

注意:在Oracle中,用户创建表其实是创建到表空间里。在没有指明表空间的前提下,其实是将表创建到默认的表空间里。如果用户只有创建表的权限没有使用表空间的权限,就会出现上面的错误。有创建表的权限没有使用表空间的权限,最终还是创建不了表,这就好比你有我房间的钥匙,但是没有我家大门的钥匙,你最终还是进不了我的房间。

       使用命令行 grant unlimited tablespace to 用户;    这样新用户就可以使用create语句创建表了。

      用户拥有了session、创建表、使用表空间的权限后,那么创建了一个表后,这个表就隶属于这个用户了,那么这个用户就可以对这个表进行增删改等操作,无须对这个用户授予增删改的权限了。

 

      grant create session to 用户;

grant create table to 用户;

      grant unlimited tablespace to 用户;

  2.撤销权限

      revoke 权限 from 用户;

例如:revoke create table from zhang;

对于用户频繁的授权与撤销权限操作,Oracle提供一种特殊的视图,在这个视图里面存放一些系统信息,这些视图被称为数据字典。对于用户频繁的授权与撤销权限操作,也有一个视图user_sys_privs用来存放用户权限的,用户可以使用语句:select * from user_sys_privs;来查看当前用户拥有哪些权限。

  系统权限与对象权限

Oracle中权限被分为系统权限和对象权限。假设有两个用户ABA有一个表,对于A中的表用户B是否可以访问,这就是对象权限。

对于系统管理员sys来说,sys具有访问任何用户表的权限,所以可以使用select * from 用户名.表名;来访问其他用户的表。注意表名必须加用户名。还有就是在Oracle中,对于普通用户向表中插入数据时默认情况下必须手动提交,数据才能生效,这样其他用户才可以访问里面的数据。但是其他普通用户不可以对A中的数据进行访问,我们可以通过授权。

   A中使用grant select on to 用户;   这样B就可以访问A中的表了。同样可以将表的增删改查的权限授权,例如:grant insert on to 用户; 也可以使用grant all on to 用户;将表的所有操作的权限授予其他用户。

   使用revoke insert [/select/delete/all] on to 用户;撤销权限。

   将权限授予某用户后,那么这个用户就可以对对象进行指定的操作。

   对于对象权限也可以使用select * from user_tab_privs;查看被授予权限的用户都拥有哪些权限。

对于系统权限,是由系统管理员或超级用户将权限授予普通用户,而对象权限是由对象的拥有者将权限授给其他用户,也就是谁拥有谁授权。

无论是系统权限还是对象权限,都可以将这些权限同时授给所有用户,例如:grant select on to  public ;  

Oracle中对权限比较严格,可以将对象权限控制到某一列上。但是在授权的时候只能对列的插入和修改进行授权,查询和删除不能控制到列。

例如:grant insert(列名) on to 用户;

         grant update(列名) on to 用户;

对于对象权限也可以使用select * from user_col_privs;查看被授予权限的用户对哪一列拥有哪些权限。

SQL语句中,最后需要commit;的主要有插入、更新、删除语句,而对查询语句中分为DDLDMLDCLDDL是数据定义语言,包括创建、删除表;DML是数据操纵语言,向表中增删改查数据;DCL是数据控制语言,指授权和撤销权限。在上面三种语言中,最后需要提交的只有DML中的语句。所以grantrevoke语句最后都没有commit

  权限的传递

1.系统权限的传递:系统管理员将某一系统权限授予一普通用户AA再将这个权限授予另一普通用户B。这就是系统权限的传递。

例如:sys用户将修改所以普表的权限授予A,A再将这个权限授予B 

               Sys:   grant alter any table to A with admin option;

               A  :   grant alter any table to B

如果在授权的时候没有with admin option,就不能将权限传递下去
     2.
对象权限的传递:

例如:用户A有一张表,A将查询该表的权限授予B用户,B用户再传给C用户。

      Acreate table abc id int);//创建一张表abc

          grant select on A to B with grant option;

     B: grant select on A.abc to C;

授权时使用关键字with grant option就可以将对象权限传递下去,但是注意的是,用户不能自己为自己grantrevoke权限。

思考: 传递系统权限时sysAB sys将权限传递出去后,在撤回sysA的权限,那么B是否还有此权限?

传递对象权限时ABC A将权限传递出去后,在撤回AB的权限,那么C是否还有此权限?

  角色

角色相当于一个集合,我们可以把权限放在角色里,然后再把角色赋予用户。

例如:create role 角色名;//创建角色

      grant create session to 角色;//给角色授权

      create user zhang identified by zhang;

      grant 角色 to zhang;

然后再用用户zhang登录数据库,zhang就具有了角色包含的权限了。

删除角色:drop role 角色;

注意:

有些系统角色无法直接赋予角色

有些权限可以赋给角色,但是有些权限很高或很特殊就只能赋给用户。例如:unlimited tablespace权限就不可以赋给角色

create  table这个用户可以给自己创建表create any table这个用户不仅可以给自己创建表,还可以给其他用户创建表

  [alter  table] 没有这个权限   alter any table

  [drop  table] 没有这个权限   drop any table

表是属于一个用户的,但角色不论谁创建的,它不属于某个用户,是大家共享的

  丢失管理员密码怎么办

Oracle中,用户分为两种,一种就是sys用户, 另一种就是剩下的其他用户。在数据库系统中用户的密码是经过加密放到数据库中的。

如果一个普通用户的密码丢了,那么sys用户可以登录到数据库中去修改这个用户的密码。Sys用户虽然不能有其他普通用户的密码,但是可以修改。

   修改密码既可以在图形界面中修改,也可以通过命令行的方式修改密码。

alter user 用户 identified by 密码;

Oracle数据库中,有三种验证机制:

       操作系统验证

       密码文件验证

       数据库验证

对于绝大多数用户来说是由数据库验证的,sys用户权限太大则是使用前两种验证方式

Linux Oracle的启动过程

          lsnrctl  start //启动监听

          sqlplus  [sys/密码] as sysdba  //连接数据库

         

             sqlplus /nolog

             Conn sys/密码 as sysdba

          start up  //启动数据库实例

windowsOracle的启动过程

          lsnrctl  start //启动监听

          oradim –starup –sid  orcl

 

创建用户

    create  user 用户名

    identifed by 密码

    default tablespace 表空间

    temporary tablespace 表空间

    quota 整数 K/M/limited on 表空间

限制用户

     用户加锁alter user 用户名 account lock

     用户解锁alter user 用户名 account unlock

     用户口令即刻失效

         alter user 用户名 password expire

删除用户

      drop user 用户名 [cascade]

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值