还剩9页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
载道________.zaidaow.com开创C2C远程教育新理念随时随刻听最知名的老师讲课载道_____(___.zaidaow.com)前言:Oracle9i与10g的区别不大,可以说很小很小,如果真要说区别的话,那估计就是性能,功能的增加.差别不大,学习好了9i也就学习好了10g权限管理oracle9里面默认的三个用户名和__syschange_on_install//权限最高的___system__nager//普通的___scotttiger//普通用户在oracle10中,仍然使用这三个用户作为默认用户但sys和system用户的__不再默认在__数据库的时 权限管理 oracle9里面默认的三个用户名和__ syschange_on_install//权限最高的___ system__nager//普通的___ scotttiger//普通用户 在oracle10中,仍然使用这三个用户作为默认用户但sys和system用户的__不再默认在__数据库的时候,可以由用户指定从安全角度考虑,scott用户默认被锁定,所以要使用该用户,需要先解除锁定 注意我们要使用oracle数据库,至少要启动两个服务,一个是监听服务,一个是数据库实例 创建用户; 以系统___的身份登陆 使用语句createuserlisiidentifiedbylisi;//创建了一个叫lisi的用户,__也为lisi 虽然创建了用户,但该用户现在并无任何权限就连登陆数据库的权限都没有假如使用sqlpluslisi/lisi登陆数据库,会报错,显示没有createsession的权限 所以还是先使用系统___给lisi这个用户指定登陆的权限 语句为grantcreatesessiontolisi; 授权过后,lisi可以登陆数据库了但是现在还没有创建数据库表的权限,仍需指定 语句为grantcreatetabletolisi; 使用lisi账号,创建数据库表createtablemytableidint; 执行后却提示错误对表空间‘USERS’无权限每个数据库表都有自己的表空间,相当于文件必须位于某个文件夹下 虽然lisi用户具有创建表的权限,但没有使用表空间的权限,最终还是创建不了表这就好比你有我__的钥匙,但是没有我家大门的钥匙,你最终还是进不了我的__ 通过系统___授予lisi用户使用表空间的权限 grantunlimitedtablespa__tolisi;这样用户lisi对表空间的使用就没有限制了 在lisi账户下创建表createtablemytableidint; 插入一条记录insertintomytablevalues1; 插入成功 也可以删除表droptablemytable; 有人可能会产生疑问,既然数据库的权限管理这么严格,上面我们只是授予lisi用户创建表的权限并没有授予其插入,删除等权限呀这里我们可以这样理解当前用户创建了一个表,那么该表就属于该用户,用户既然创建了表,自然就对该表拥有一切权限啦 而且数据库并没有droptable的权限使用grantdroptabletolisi;出现权限缺失或无效的错误提示 上面是授予权限,那么如何撤销用户的某个权限呢 使用如下语句可以撤销lisi的创建表的权限revokecreatetablefromlisi; 再使用lisi账号创建表,就会出现错误提示权限不足 在大多情况下,如果我们对用户的权限经常修改,我们如何知道用户有哪些权限呢 数据库默认维护了一个视图对外提供一些系统信息叫数据字典,可以查看用户的具体权限 使用如下语句查看当前用户的系统权限 select*fromuser_sys_privs; USRENAMEPRIVILEGEADM ------------------------------------------------------------------------------------------- LISICREATESESSIONNO LISIUNLIMITEDTABLESPA__NO oracle中的权限分为系统权限和对象权限 系统权限就是我们上面所讲的一些权限 对象权限是指比如用户lisi创建了一个表,该表就可以作为一个对象看待另外一个用户是否有访问该表的权限呢这就是所谓的对象权限管理 我们在创建一个用户wangwu__也为wangwu在该用户下,创建一个表mytab如果lisi用户向访问表mytab,是否会成功呢 在lisi的窗口下,输入select*frommytab;报错表或视图不存在我们知道表属于表的创建者 这里我们直接查询表mytab,数据库会到当前用户下寻找该表,显然当前用户lisi没有表mytab所以提示表或视图不存在 那我们指定表的所有者,再次查询select*fromwangwu.mytab;窗口显示“权限不足”的错误提示由此可知,虽然找到了mytab表,却没有访问的权限 只有表的拥有者才可以授予该表的相关权限给其他用户使用用户wangwu的操作窗口,使用如下语句,把查询语句授予lisi; grantselectonmytabtolisi; 执行此语句后,lisi就可以查询用户wangwu的mytab表了 如果要获得其他对于mytab表的权限,仍然需要指定多个权限同时指定,用逗号分隔 grantupdateselectdeleteonmytabtolisi; 如果要把表的所有权限都赋予给用户lisi,可以这样写; grantallonmytabtolisi; 在wangwu的窗口下,向mytab插入几条数据然后查询,却显示“未选定行”说明刚才的插入没有同步到数据库中去 在oracle下,默认需要对sql语句手动进行提交所以在几条插入语句后,可以执行commit;语句提交再次查询,表中就有数据了 如果要把某个权限授予所有的用户,可以使用public关键字 grantcreatesessiontopublic; 查看当前用户的对象权限,使用如下语句 select*fromuser_tab_privs; oracle的权限控制粒度很细,甚至可以精确到某一列的权限 grantupdatenameonmytabtolisi; 这句执行的效果就是,lisi用户对表mytab仅拥有更新name这一列的权限 grantinsertidonmytabtolisi; 查看当前用户对数据库表的列的权限 select*fromuser_col_privs; 在lisi权限下,执行updatewangwu.mytabsetname=fdsfaid=dfswhereid=1; 执行后显示权限不足 updatewangwu.mytabsetname=fsawhereid=1; 这样就可以了 同样执行insertintowangwu.mytabvalues4asf;执行后也显示权限不足 修改语句为insetintowangwu.mytabidvalues4;成功执行 只能对更新和插入设定精确到某列的权限控制,不能对查询和删除设定 命令showuser可以查看当前用户 数据库有三种类型的语句 ddl数据定义语言,指定是数据库表的创建,删除之类的操作 dml数据操纵语言,针对表的增删改查操作,只有dml需要进行提交操作 dcl数据控制语言,对系统权限和对象权限的管理 权限的传递 系统权限的传递 sys用户把一些系统权限授权给lisi用户. grantalteranytabletolisi; 查看lisi的系统权限,就有了alteranytable的权限 现在lisi想把该权限传递授权给wangwu用户执行以下语句grantalteranytabletowangwu;执行后报“权限不足” 要想lisi也可以传递权限,可以在sys用户授权时加上withadminoption的选项该选项就说明了还拥有权限的管理能力 即grantalteranytabletolisiwithadminoption;这样lisi就可以把alteranytable的权限传递给wangwu了 要想wangwu也可以传递该权限,也使用该admin选项即可 查看lisi的系统权限,他的alteranytable权限的同一行的adm字段取值由NO变为YES,说明lisi对该权限具有分配功能了 对象权限的传递 与系统权限的传递类似,不过后面的选项有所改变 加入sys创建了一个A表授予lisi的select权限 grantselectOnAtolisi; 如果想让lisi拥有对A表的select权限的分配能力,只需修改为 grantselectOnAtolisiwithgrantoption; 思考如果sys___撤销了lisi的权限,那么wangw的权限是否也被撤销了呢 通过角色对权限进行管理 如果按照上面的权限管理方法,对每个用户逐一的分配权限,必然会很混乱,导致管理的困难所以oracle提供了角色来对权限进行__化的管理 角色就是权限的__ 在sys下创建角色 createrolemyrole; 给角色添加权限 grantcreatesessiontomyrole; grantcreatetabletomyrole; 创建用户 createuserzhangsan; grantmyroletozhangsan;//赋予以上的两个权限给zhangsan 有些系统权限无法直接赋予角色,因为该权限太大了,比如unlimitedtablespa__ 例如:执行grantunlimitedtablespa__tomyrole; 出现错误提示无法将unlimitedtablespa__授予角色 删除角色 droprolemyrole; 权限举例 createtablecreateanytable [altertable]alteranytable [deletetable]deleteanytable 补充oracle数据库不含紫色的权限类型因为有了createtable权限,说明表的一切都归创建者不需要还指定altertable和droptable权限了,默认就有了 而createanytable这个权限表明该用户可以给其他用户创建表 示例wangwu给lisi创建一个表temp createtablelisi.tempidint;//有可能报“超出表空间‘USERS’的空间限额”错误提示,那是因为lisi用户可能还没有表空间权限,执行赋予lisi用户unlimitedtablespa__的权限,问题即可解决 注意表是属于某个用户的而角色不属于某个用户 oracle三种登陆验证机制 操作系统验证 __文件验证 数据库验证 对于绝大多少的普通用户而言,数据库启动后,用户登陆时采用的是数据库验证 而对应sys用户,它的权限是最大的它的权限甚至包括启动和关闭数据库它在oracle数据库还没启动时,就连接到oracle数据库中去,进行启动这样我们不难理解,sys的身份验证不可能采用数据库验证,因为当时数据库还没有启动呢所以sys的身份验证使用的是操作系统验证和__文件验证这样说不是很严格,应该是以SYSDBA和SYSOPER连接身份登陆都会以这两种方式进行验证 当一个用户连接数据库的时候,客户端首先连接到监听服务,监听把请求发送到数据库,如果验证通过了,以后就不需要监听了,客户端直接和数据库实例通信 早期在linux和unix上运行的oracle,它有严格的启动顺序先启动监听只需要敲个命令即可,不需要什么权限,后启动数据库实例需要权限 执行的命令序列lsnrctlstart//启动监听服务 sqlplussys/oracleassysdba//启动数据库实例的请求,发现以sysdba的身份连接,所以不进行数据库验证,而是采用操作系统和__文件验证如果验证通过,运行启动数据库实例 startup//启动数据库实例 早期版本命令得这样写 lsnrctlstart sqlplus/nolog connsys/oracleassysdba startup 在windows下oracle的启动过程,进行了傻瓜式的封装 lsnrctlstart oradim-starup-sidorcl 补充在连接到数据库时,可以这样写conn/assysdba也可以连连上,甚至胡乱指定用户名和__,如connabc/abcassysdba都可以登陆这是因为连接是以sysdba身份,首先采用操作系统验证在我们__数据库时,会把当前系统的账号添加到oracle的系统___组中去按以上方式连接,它是默认根据系统的当前账户验证通过的把___组中的该系统账号删去后,他就会采用__验证机制,就必须要指定用户名和__了 问题丢失__怎么办 我们知道如果普通用户的__忘记了,我们可以___的身份对该用户的__进行修改无法查看,因为__都是加了密的,只能修改 可以在图形化的工具下直接进行修改也可以以命令的方式 alteruserscottidentifiedbytiger; 在实际__中,我们要把操作系统验证给取消掉那以后就会采用__验证了但是假如我们把__忘记了,又如何解决呢 我们可以把__文件删掉,在生成一个__文件即可 找到__文件的所在地..\db_2\database\pwdorcl.ora,红色部分是该__文件命名的固定部分,orcl指的是数据库的sid,可能不一样 删除__文件后,再生成一个使用orapwd命令具体如下 orapwdfile=__文件的全路径,__文件的命名要按照先前password=指定的__entries=该__文件保存的DBA最大数量for__=只是否强制覆盖文件操作 示例orapwdfile=E:\oracle\ora92\database\pwdora9i.orapassword=sysentries=10; 使用以下语句查看在该__文件中放了多少特权用户 select*fromv$pwfile_users; 创建用户 createuser用户名 identifiedby__ defaulttablespa__表空间 temporarytablespa__表空间 quota整数K|M|unlimitedon表空间 示例 createuserabc identifiedbyabc defaulttablespa__users//用户的默认表空间为users,在该表空间下用户可以创建表 temporarytablespa__temp//用户的临时表空间,用于索引,排序等工作的临时场所,相当于windows下的临时文件夹 quota50Monusers//指定users表空间的限额大小 quotaunlimitedontemp;//指定临时表空间的限额大小 限制用户 用户加锁 alteruser用户名accountlock 用户解锁 alteruser用户名accountunlock 用户口令即刻失效 alteruser用户名passwordexpire 删除用户 dropuser用户名[cascade] cascade用在当被删除的用户下还有未删除的对象如一些表时,强制级联删除它表示删除用户所有对象更多学习信息请登录载道_____(___.zaidaow.com)。