oracle10g权限与角色管理初学笔记

3个默认的用户:
         sys orcl [as sysdba]
         system orcl
         scott tiger
创建用户:
         create user gis /*用户名*/ identified by gis /*密码*/ ;

PRIVILEGE:权限
系统权限:
         grant(revoke) create session to(from) gis;
         grant(revoke) create table to(from) gis;
         grant(revoke) unlimited tablespace to(from) gis;
         grant create seesion to public; #将权限授予所有用户。
         select * from user_sys_privs; 查看当前用户的系统权限。

对象权限:
         grant(revoke) select on mytable to(from) gis;
         grant(revoke) all on mytable to(from) gis;
         select * from user_tab_privs; #查看当前用户的表的对象权限:
 
  对象权限可以控制到列(只能插入和更新控制到列):
          select * from user_col_privs;  #查看当前用户的列的对象权限:
      1) grant update(name) on mytable to sagittys;   #在gis用户上将mytable表的name列更新权限给sagittys用户
           update gis.mytable set name='laowang' where id=1;
           commit;
      2) grant insert(id) on mytable to sagittys;
            insert into gis.mytable(id) values(7);
          

GRANTEE  OWNER  TABLE_NAME    GRANTOR     PRIVILEGE                     GRA HIE
----- ------------------------------ ------------------------------ --
GIS         SAGITTYS     SA            SAGITTYS        FLASHBACK                   NO  NO
GIS         SAGITTYS     SA            SAGITTYS        DEBUG                          NO  NO
GIS         SAGITTYS     SA            SAGITTYS        QUERY REWRITE            NO  NO
GIS         SAGITTYS     SA            SAGITTYS        ON COMMIT REFRESH      NO  NO
GIS         SAGITTYS     SA            SAGITTYS        REFERENCES                  NO  NO
GIS         SAGITTYS     SA            SAGITTYS        UPDATE    #更新              NO  NO
GIS         SAGITTYS     SA            SAGITTYS        SELECT    #查询              NO  NO
GIS         SAGITTYS     SA            SAGITTYS        INSERT    #插入               NO  NO
GIS         SAGITTYS     SA            SAGITTYS        INDEX     #索引                NO  NO
GIS         SAGITTYS     SA            SAGITTYS        DELETE    #删除               NO  NO
GIS         SAGITTYS     SA            SAGITTYS        ALTER     #修改                NO  NO
(在CMD中默认宽度到头了则不会规则的显示,此时将宽度设为400,set linesize 400,就ok了)

语言分类:
1、 DLL,数据定义语言
     CREATE,CREATE TABLE abc(a varchar(10),b char(10));
     ALTER,ALTER TABLE abc ADD c NUMBER; 加一个c的字段,数据符为NUMBER。ALTER TABLE abc DROP COLUMN c;
     DROP,DROP TABLE abc
2、 DCL,数据控制语言
     GRANT,  授权  GRANT SELECT ON dept TO sde;#让sde用户可以选择dept表
     REVOKE,授权收回  REVOKE SELECT ON dept FROM sde;
3、 DML,数据操作语言 (增删改查)   最后需要保存提交:commit;
     SELECT,  SELECT * FROM ABC;
     INSERT,  INSERT INTO ABC(A,B) VALUES(‘XF’,’SDE’);
     DELETE,  DELETE FROM ABC; 删除表中所有数据。
                     DELETE FROM ABC WHERE A =’ORCL’;
     UPDATE,  UPDATE ABC SET B=’AAA’; 将表中B的数值全部改成AAA
                     UPDATE ABC SET B=’AAA’ WHERE A =’XF’;将A=XF行B值修改。

权限传递:
   1、系统权限传递
     SYS用户将系统权限授予A用户,A用户将此权限授予B用户;
     grant alter any table to gis;
     如下显示:
     USERNAME    PRIVILEGE         ADM
    -------------------------- ----------
     GIS        ALTER ANY TABLE    NO  
     #admin为no,说明不带有管理员选项,不能传递系统权限。
     作出如下更改:
     grant alter any table to gis with admin option;
     则显示:
     USERNAME    PRIVILEGE         ADM
    -------------------------- ----------
     GIS        ALTER ANY TABLE    YES
     #admin为yes,此时带有管理员选项,可以传递系统权限。
     同理,通过grant alter any table to sagittys with admin option;
           可以让sagittys继续传递权限
     此时,如果sys将授予GIS用户的ALTER ANY TABLE权限撤销了,sagittys依然拥有该权限。

   2、对象权限传递
     A用户将对象权限授予B,B用户将此权限授予C用户;
     与系统权限传递类似,用grant select on mytable to sagittys with grant option;
                         可以将对象权限传递下去。
      但是,如果GIS用户将select on mytable权限撤销了,则之后传递的用户都没有该权限了。

角色管理
   角色:权限的集合
   create role myrole;      创建角色;   drop role myrole;  删除角色;                      
   grant create session to myrole;  
   grant create table to myrole;    #给角色授权
   grant myrole to gis;                #将角色授予用户。
   注意:有些系统权限很高很特殊,无法直接赋予角色。
         如:unlimited tablespace/*权限太大了,可以使用任何的表空间,不要轻易使用*/
     create table(包含下2行权限)  create any table;  
     alter table (无此权限)              alter any table
     drop  table (无此权限)             drop  any table   /*加上any,可以修改(创建)其他用户的表*/
     表是属于某一个用户的,而角色不属于任意一个用户,是大家公用的。

丢失管理员的密码怎么办?
     用sys管理员修改普通户用密码:
         alter user scott identified by tiger; #将scott用户密码改为tiger。
     
数据库的三种验证机制:
           1、操作系统验证
           2、密码文件验证
           3、数据库验证
     具有sysoper和sysdba用户可以在数据库还没启动的时候就连入数据库将之启动。
     它们采用的是操作系统验证和密码文件验证。
   
   linux下oracle的启动过程:
     1、lsnrctl  start  #启动监听,接受用户请求。
     2、sqlplus sys/orcl as sysdba  #是DBA,采用操作系统验证和密码文件验证。
         在低版本的oracle中只能这样:sqlplus/nolog /*启动sqlplus而不登陆*/
                                                conn sya/orcl as sysdba;                    
     3、startup         #打开数据库实例
     如果是普通用户,则只能用数据库验证,在实例没有打开之前是不可能启动的。
    
  用sysdba连接数据库时,可以不输入用户密码直接登录,如sqlplus / as sysdba
  这是因为,在计算机管理--用户和组--组中的ORA_DBA中默认存在当前的操作系统登陆者。
  由于sysdba采用操作系统验证和密码文件验证,因此sqlplus默认当前操作系统管理员就是
  oracle的DBA,除非将ORA_DBA组中的登录用户名删除。
  当将ORA_DBA组中的登录用户名删除之后,sysdba只能采用第二种验证方式,即密码文件验证。
  此时如果sys的密码丢失了,
    则在E:"oracle"product"10.2.0"db_1"database中将PWDorcl.ora(密码文件)删掉
    在cmd下输入orapwd,显示出提示:
    Usage: orapwd file=<fname> password=<password> entries=<users> force=<y/n>
    file - name of password file (mand)                设置密码文件的路径
    password - password for SYS (mand)            设置sys的密码
    entries - maximum number of distinct DBA     设置DBA权限的最大数量
    force - whether to overwrite existing file         询问是否强制覆盖,可不填写
    具体如下:
    orapwd file=E:"oracle"product"10.2.0"db_1"database"PWDorcl.ora password=orcl entries=10
    此时重新生成了密码文件。
    使用语句select * from v$pwfile_users; 可以看出在PWDorcl.ora中有多少特权用户。
 
 完整的创建表的语句:    
  create user abc identified by abc default tablespace users temporary tablespace temp quota 50m on users;

 在方案中查看用户的表的信息。

 删除用户的时候,如果用户下有表存在,则只能强制删除:
 drop user sagittys cascade;  /*cascade关键字表示删除用户所有对象*/
posted @ 2008-07-19 16:10  常ヤ訁笑囧  阅读(2014)  评论(2编辑  收藏  举报