跳至主要内容

Oracle学习笔记20071226

管理用户
首先需要了解data schemaSchema的对象:tables,triggers,constraints,indexes,views,sequences,stored program units,synonyms,user-defined data types,database links

Schema是多个对象的集,一个用户建立了那么对应的schema也建立了,用户只能操作一个schema,用户名和schema经常被用于交换

一份creating users的确认表建立新的User通过数据库认证(Database Authentication)




SQL>CREATE USER aaron IDENTIFIED BY soccer(PASSWORD)DEFAULT TABLESPACE data TEMPORARY TABLESPACE temp QUOTA 15m ON dataPASSWORD EXPIRE;

建立新的USER通过操作系统认证(Operating System Authentication)




SQL>CREATE USER aaron IDENTIFIED EXTERNALLY(和数据库严重的不同点) DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE temp QUOTA 15m ON data PASSWORD EXPIRE;

修改User的Quota(限额)




SQL>ALTER USER aaron QUOTA 0 ON USERS;

删除USER




SQL>DROP USER aaron;

使用CASCADE删除所有的




SQL>DROP USER aaron CASCADE;


和USERS有关的表DBA_USERS和DBA_TS_QUOTAS

管理权限用户权限分为两种,一种是SYSTEM一种是OBJECT的SYSTEM对特殊DATABASE做一些特殊的动作。
OBJECT对特殊的OBJECT权利
系统特权(system privileges)有超过100个不同的权限,用any可以让权限签名到任何的schema上,grant是用来赋予权限的,revoke是收回权限的
SYSTEM的权限INDEX,TABLE,SESSION,TABLESPACE

GRANT的权限




SQL>GRANT CREATE SESSION TO emi;
SQL>GRANT CREATE SESSION TO emi WITH ADMIN OPTION;

SYSDBA和SYSOPER之间的权利对比
SYSTEM权利的约束O7_DICTIONARY_ACCESSIBILITY 这个参数管理着,如果选项为TRUE则SYS schema可操作,默认是FALSE确保system的权限可操作任何schema除了sys schema

回收权限




SQL>REVOKE CREATE TABLE FROM emi;
赋予对象权利




SQL>GRANT EXECUTE ON dbms_output TO jeff;
SQL>GRANT UPDATE ON emi.customers TO jeff WITH GRANT OPTION;

赋予别人这个权限的同时也能让这个人赋予别人同样的权限
回收对象权利




SQL>REVOKE SELECT ON emi.orders FROM jeff;

和privilege有关系的表DBA_SYS_PRIVS,SESSION_PRIVS,DBA_TAB_PRIVS,DBA_COL_PRIVS

审查(auditing)P330
开始Auditing是一个监视所选用户的动作Statement auditing




SQL>AUDIT TABLE;Privilege auditing;
SQL>AUDIT create any trigger;

Schema object auditing




SQL>AUDIT SELECT ON emi.orders;

和auditing有关的视图
ALL_DEF_AUDIT_OPTS,DBA_STMT_AUDIT_OPTS,DBA_PRIV_AUDIT_OPTS,DBA_OBJ_AUDIT_OPTS
和auditing有关的表
DBA_AUDIT_TRAIL,DBA_AUDIT_EXISTS,DBA_AUDIT_OBJECT,DBA_AUDIT_SESSIONDBA_AUDIT_STATEMENT

缺点在于系统说花费的时间和成本比较大,可对非常重要的表进行监控。

今天在做一个例子
--练习目标建立一个role然后添加用户,让用户使用这个ROLE权限
SQL>CREATE USER aatu IDENTIFIED BY atu DEFAULT TABLESPACE atu;
SQL>SELECT default_tablespace FROM dba_users WHERE username = 'AATU';
SQL>GRANT create session to aatu;
SQL>GRANT create table to aatu;
SQL>CREATE table employee1 as select * from hyf.employeesSELECT * FROM employee1;
SQL>GRANT select,update,delete on employee1 to aatu;
SQL>grant connect to aatu;
SQL>grant resource to aatu;
--在做这个的时候发现是role权限dba_tab_privs中查不到,但是在dba_role_privs确能找到
SQL>SELECT * FROM DBA_TAB_PRIVS WHERE grantee = 'AATU';
SQL>SELECT * FROM DBA_TAB_PRIVS WHERE grantee in ('ATU','AATU');
SQL>SELECT default_tablespace FROM dba_users WHERE username = 'AATU'
SQL>SELECT * FROM user_tables;

--AATU用户登录后所作的
SQL>SELECT * FROM employee1;--当我使用这个查询语句的时候提示该表不存在,不知道为什么,尝试建立新用户,做查询后提示该用户在system表空间下,放弃。后请教后发现如果把语句改成SQL>SELECT * FROM atu.employee1后,那么就能查询到,虽然在同一表空间下,但是还需要加这个语句才能查询的到,除非建立别名。。(-_______-!!迷茫)
SQL>CREATE SYNONYM employee1 FOR atu.employee1
SQL>SELECT * FROM employee1

--建立role
SQL>CREATE ROLE testrole IDENTIFIED BY test;
SQL>SELECT * FROM dba_roles WHERE role='TESTROLE';
SQL>GRANT testrole to aatu;
SQL>SELECT * FROM dba_role_privs WHERE grantee='AATU';
--做了以后发现defualt role testrole是YES
GRANTEE GRANTED_ROLE ADM DEF
------------------------------ ------------------------------ --- ---
AATU CONNECT NO YES
AATU RESOURCE NO YES
AATU TESTROLE NO YES
SQL>ALTER USER aatu DEFAULT ROLE ALL EXCEPT testrole;
SELECT * FROM dba_role_privs WHERE grantee='AATU'
--做了以后发现defualt role testrole是no
GRANTEE GRANTED_ROLE ADM DEF
------------------------------ ------------------------------ --- ---
AATU CONNECT NO YES
AATU RESOURCE NO YES
AATU TESTROLE NO NO

评论

此博客中的热门博文

Python学习笔记20100117

映射list   Dictionary 是用{}. list 是一那个[]. turple是用() 当你定义过dictionary后,你可以使用d.keys(), d.values(),d.items()将定义后的时候分别显示出来 当然可以将list里的值加减乘除,也可以如一般的定义直接重新复制这个list. 链接与分割字符串的 li=";", join(li) 则显示的就是 分隔符为;的数 如果使用li=li.split(";")则将刚刚;的分隔符删除,而split里也可定义域,如li.split(";",1)   自省 <---这是啥 之前在使用的时候发觉有些书本上的模块不能调用,很多是py脚本定义过的函数。 下载该脚本s,然后上传至指定位置。 >>>import sys >>>sys.path >>>sys.path.append("绝对位置")然后就能调用这些脚本和参数了。 删除 >>>sys.path.pop() 定义一个参数是 def info(test, test1=10.test2=12): info是函数名,test是必备参数,因为没有定义值,test1和test2是可选参数,定义了初始值   以上是外部函数的调用,下面转到内部函数 内部函数有type,str,dir及其他   ---type 返回任意字符的类型,模块也可以。types模块 >>> type(1) <type 'int'> >>> li=[] >>> type(li) <type 'list'> >>> import odbchelper >>> type(odbchelper) <type 'module'> >>> type(sys) <type 'module'> >>> import types ...

投名状

昨天晚上实在无聊,就屁颠屁颠的去看了《投名状》,本来去奥斯卡的,发觉已经只有9点以后的场次,还特别的翘,我说那九点看了直接去看《集结号》首映算了,别人不愿意,那行,然后出来瞎晃悠,还好几个周围的电影院还近,去了胜利,人那还没上片,看来没希望,突然想去唱歌,行,反正金歌也进,就那么走过去吧,突然眼前豁然开朗,这不是西湖电影院么,一阵小跑,发觉上片,最近的场次还只有头牌了,虽然头牌脖子有点罩不住,但是至少看看片子还可以的。 网上大概了解了下《投名状》,陈可辛翻拍的《刺马》,加上了几个现代的演员。故事的大概是:姜午阳、赵二虎本为草莽,在一次争斗中与庞青云结识。三人惺惺相惜,结为异姓兄弟。不料日就生变,赵二虎的妻子莲生爱上了大哥庞青云,庞青云也对莲生心生爱慕。不久后,庞青云升为两江总督,欲望逐渐膨胀,变得心狠手辣。他的道德防线也逐渐崩溃,霸占莲生,还要对兄弟下手…… 剧情也就那么个回事情,其实故事梗概不然,一个从死人堆里爬出来的人,什么都失去过了 。已经改变了他的原有个性,他已经从开始就知道什么是他要的,而唯一觉得真是的就是老徐那一次,其实古时候也挺简单的,说得好就上了。只是一种人性做本质的释放。受苦挨饿无非就是为了有着一日飞黄腾达,为了生活隐姓埋名,别人都在抢军粮的时候什么都不做,唯一的只是在金城武快要被杀掉的时候救助,然后直接取了押送大将的首级。擒贼先擒王。。。。 而刘德华的出场也特别犀利,从他的眼神看出他已经被锻炼的很老练,已经是一个大将之才,错的地方就是信错了人,在后面苏州一役的时候,从为了一个被困一年的军队,只身一人去刺城主。被困一年无论对于城内还是城外都是极大的考验,心里防线都已经到了崩溃的边缘。而城主以他的解脱来换大众的解脱,这是很等的伟大,而战争是残酷的,不能收编的俘虏虽然答应了别人,可没有粮食来养活那么多人。敌军的气节也让人唏嘘不已。 刘德华的演绎的性格有情有义,到最后死也不认为是李连杰派人杀的他。李连杰演绎的则是在战场上全军覆没后,心里从此极大改变,为了目的不择手段,从始至终就是在利用刘和金,但也为曾经的战场情了矛盾,权还是义一直是在他的心理纠结着,当苏州一役,李看到刘走出城那种又喜又悲的感情时,看出了他心理是多的纠结。金城武么,唉,演技确实很好,但是角色赋予的他是个傻蛋的角色,只为了情谊,一心想挽回情谊,而在战场上也为了情谊能甘当敢死队,同时也为了情谊...