Oracle9i用户管理和权限管理LunarMail:lunar@itpub.netMSN:lunar52@hotmail.com建立用户时应考虑的问题1.选择用户名和验证机制2.定义用于保存对象的表空间3.决定每个表空间的限额4.分配临时表空间和缺省表空间5.给用户授予特权和角色创建用户的步骤1、用createuser命令建立用户2、给用户指定确省表空间和临时表空间3、给用户指定空间的使用限额,至少要使用户在system表空间的限额为04、给用户授予适当的访问权限前三步也可以放在一起,用一个语句完成创建用户——Createuser首先使用适当的create建立该用户:CREATEUSER用户名INDENTIFIEDBY口令[DEFAULTTABLESPACE表空间名][TEMPORARYTABLESPACE表空间名][QUOTA整数K/MON表空间名或者UNLIMITED];给用户授权——grant1.命令格式1(给一个数据库中已经存在的用户授权):GRANT权限列表(权限1,权限2…)TO用户名;2.命令格式2(给用户授权的同时创建该用户):GRANT权限列表(权限1,权限2…)TO用户名IDENTIFIEDBY用户口令;3.命令格式3(将某个对象的某些权限授予某个用户)GRANT权限列表(权限1,权限2…)ON对象TO用户名;4.命令格式4(将某个对象的某些权限授予所有)GRANT权限列表(权限1,权限2…)ON对象TOPUBLIC;5.命令格式5(将某个对象的某些权限授予某个角色)GRANT权限列表(权限1,权限2…)ON对象TO角色名;注意:特殊用户——PUBLIC:系统中的所有用户所有权限——ALL:当前用户的所有权限例1:建立用户tmpSQLcreateusertmpidentifiedbytmp2defaulttablespaceusers3temporarytablespacetemp4quota0Monsystem;Usercreated.SQLgrantconnect,resourcetotmp;Grantsucceeded.SQLconntmp/tmpConnected.SQLSQLCREATEUSERsidneyINDENTIFIEDBYcartonDEFAULTTABLESPACEcases_tsTEMPORARYTABLESPACEtemp_tsQUOTA5MONcases_tsQUOTA5MONtemp_ts;SQLgrantconnect,resourcetotmp;Grantsucceeded.SQLconntmp/tmpConnected.SQL例2:建立用户tmp授权的同时创建用户使用带有identifiedby子句的grant命令修改用户的确省表空间和临时表空间修改空间限额例:建立用户tmpSQLgrantconnecttotmpidentifiedbytmp;Grantsucceeded.SQLalterusertmp2defaulttablespaceusers3temporarytablespacetemp4quota0monsystem;Useraltered.SQLconntmp/tmpConnected.SQL修改用户ALTERUSER用户名INDENTIFIEDBY口令DEFAULTTABLESPACE表空间名TEMPORARYTABLESPACE表空间名QUOTA整数K/MON表空间名UNLIMITED;例1:修改用户口令ALTERUSERscottINDENTIFIEDBYlion;例2:修改用户口令和确省表空间ALTERUSERscottINDENTIFIEDBYlionDEFAULTTABLESPACEtstest;例3:修改用户在system表空间的限额ALTERUSERscottQUOTA0MonSYSTEM;使用举例删除用户如果模式中含对象使用CASCADE子句DROPUSERpeter;DROPUSERpeterCASCADE;监视用户信息DBA_USERSUSERNAMEUSER_IDCREATEDACCOUNT_STATUSLOCK_DATEEXPIRY_DATEDEFAULT_TABLESPACETEMPORARY_TABLESPACEDBA_TS_QUOTASUSERNAMETABLESPACE_NAMEBYTESMAX_BYTESBLOCKSMAX_BLOCKS权限管理•系统特权:完成特殊活动或在一个特殊类型的对象上完成特殊活动的一个特权。•对象特权:在一个指定的对象(表、视图、序列、过程、函数或包)上完成一个特殊活动的特权。改变用户权限•授权给用户(Grant)•从用户那里收回权限(Revoke)改变用户权限SQLalteruserusernameidentifiedbypassworddefaulttablespacetablespace_nametemporarytablespacetempquotaunlimitedontablespace_namequota0konsystem[quota0konother_tablespace_name……];撤销用户的角色或权限SQLrevokerole_nameorpriv_namefromusername;注意事项撤消用户的角色dba时,同时撤消了用户unlimitedtablespace的系统权限SQLgrantresourcetousername;管理数据库的用户查看当前数据库的用户信息:SQLselectusername,default_tablespace,temporary_tablespacefromdba_users;查看在线用户信息:SQLselectcount(*)currentusernumber,usernamecurrentusernamefromv$sessiongroupbyusername;用户查看自己的缺省表空间:SQLselectusername,default_tablespacefromuser_users;系统特权–特权定义中的ANY-关键字使用户能访问任何其它用户的数据–可用GRANT命令给用户或用户组增加特权–REVOKE命令回收特权SQLselectcount(*)fromSYSTEM_PRIVILEGE_MAP;COUNT(*)----------157SQL系统特权:例子分类说明INDEXCREATEANYINDEXALTERANYINDEXDROPANYINDEXTABLECREATETABLECREATEANYTABLEALTERANYTABLEDROPANYTABLESELECTANYTABLEUPDATEANYTABLEDELETEANYTABLESESSIONCREATESESSIONALTERSESSIONRESTRICTEDSESSIONTABLESPACECREATETABLESPACEALTERTABLESPACEDROPTABLESPACEUNLIMITEDTABLESPACE授予系统特权GRANTCREATESESSION,CREATETABLETOuser1;GRANTCREATESESSIONTOscottWITHADMINOPTION;SYSDBA和SYSOPER特权分类例子SYSOPERSTARTUPSHUTDOWNALTERDATABASEOPEN|MOUNTALTERDATABASEBACKUPCONTROLFILEALTERTABLESPACEBEGIN/ENDBACKUPRECOVERDATABASE,ALTERDATABASEARCHIVELOGRESTRICTEDSESSIONSYSDBASYSOPER权限(WITHADMINOPTION)CREATEDATABASERECOVERDATABASEUNTIL系统特权限制nO7_DICTIONARY_ACCESSIBILITY:–设置为TRUE,Oracle7行为–设置为TRUE,去除ANY关键字对系统特权的限制(SELECTANYTABLE,EXECUTEANYPROCEDURE)回收系统特权REVOKECREATETABLEFROMuser1;REVOKECREATESESSIONFROMscott;USER1SCOTT用WITHADMIN回收系统特权DBAGRANTREVOKEUSER1SCOTTDBARESULT用WITHADMIN回收系统特权DBAUSER1SCOTT对象特权Objectpriv.TableViewSequenceProcedureALTER√√DELETE√√EXECUTE√INDEX√√INSERT√REFERENCES√SELECT√√√UPDATE√√授予对象特权GRANTEXECUTEONdbms_pipeTOpublic;GRANTUPDATE(ename,sal)ONempTOuser1WITHGRANTOPTION;DBA_TAB_PRIVS查询对象特权DBA_COL_PRIVSGRANTEEOWNERTABLE_NAMEGRANTORPRIVILEGEGRANTABLEGRANTEEOWNERTABLE_NAMECOLUMN_NAMEGRANTORPRIVILEGEGRANTABLE回收对象特权REVOKEexecuteONdbms_pipeFROMscott;GRANTREVOKE用WITHGRANTOPTION回收对象特权SCOTTSCOTTUSER1USER1USER2USER2RESULT用WITHGRANTOPTION回收对象特权SCOTTUSER1USER2使用权限时的常见问题•执行存储过程时出现ORA-1031不能通过角色授权,必须显示授权•通过数据库链插入远程表时出现ORA-01031,ORA-02063插入远程表之前先做SELECT必须有SELECT权限用户特权无角色管理的授权示意图用户特权角色使用角色管理的授权示意图使用角色的好处•授予和撤消用户权限所使用的命令与授予和撤消系统权限所使用的命令相同•除自身外(即使以间接方式),可以授予任何用户或角色•由系统权限和对象权限组成•每个被授予角色的用户都可以启用或禁用角色•可以要求使用口令启用•在现有的用户名和角色名中每个角色名必须唯一•不为任何人所有也不存在于任何方案中•在数据字典中存储有它们的说明建立角色CREATEROLEsales_clerk;CREATEROLEhr_clerkIDENTIFIEDBYbonus;CREATEROLEhr_managerIDENTIFIEDEXTERNALLY;(设置os_roles参数)预定义角色的使用角色名说明CONNECT提供向后兼容RESOURCE提供向后兼容.DBA所有带WITHADMINOPTION的系统特权EXP_FULL_DATABASE全库卸出IMP_FULL_DATABASE全库倒入DELETE_CATALOG_ROLE数据字典视图删除特权EXECUTE_CATALOG_ROLE数据字典视图执行特权SELECT_CATALOG_ROLE数据字典视图检索特权修改角色ALTERROLEhr_clerkIDENTIFIEDEXTERNALLY;ALTERROLEhr_managerNOTIDENTIFIED;ALTERROLEsales_clerkIDENTIFIEDBYcommission;分配角色GRANThr_clerk,TOhr_manager;GRANTsales_clerkTOscott;GRANThr_managerTOscottWITHADMINOPTION;建立缺省角色ALTERUSERscottDEFAULTROLEhr_clerk,sales_clerk;ALTERUSERscottDEFAULTROLEALL;ALTERUSERscottDEFAULTROLEALLEXCEPThr_clerk;ALTERUSERsc