Oracle之用户操作
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                Oracle之用户操作
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                
                            
                            
                            上次我們主要講了ORACLE基本的SQL,SQL語法,然后很多同學用的可能是MYSQL,可能沒那么大興趣,但是我還是覺得以后ORACLE是主流啊,上次講了ORACLE的一些語法,還有高級的查詢,比如說MERGE,START WITH CONNECTOR BY這是遞歸,還有ORACLE的一些統計分析函數,那么咱們繼續,爭取把這些講完,首先用戶訪問控制,索引,物化視圖,同義詞,DBLINK,簡單介紹一下,首先說一下用戶的訪問控制,你使用ORACLE,相當于掃盲,就是用戶控制這一塊 
 
這塊是非常簡單的,比如用戶裝完數據庫以后,發現SCOTT,或者HR,其他用戶被鎖住了,或者想鎖定,利用這幾個語句,然后向修改密碼的,然后查看用戶表信息,創建用戶和刪除用戶這里面都有,然后加上名稱,identified by [password] 這是你自己寫的,可以直接指定自己的用戶密碼,刪除用戶采用dropORACLE里面有對象的概念嗎,比如所屬用戶的對象,比如對象的視圖啊,其他的東西都可以被刪除我還是用PL/SQL Developer,然后還是用scott去登陸,我現在用的是一個最普通的用戶,用的是scott這個用戶登陸的,然后我的左上角有很多的WINDOW,,比如SQL Window,Report Window,Command Window,那我們可以用Command Window去連一下管理員,管理員用戶, conn system/tiger 
 
我這個PL/SQL Developer是用scott登陸的,但是我在Command命令里面,登陸的是System,那我就可以對其他的用戶進行授權,做一些其他的事情,你比如我們的里面的HR,HR的用戶我是處于解鎖的狀態,我看我能不能登陸進去,比如我conn hr/tiger 
 
select * from tabs;HR的用戶里面可能有這幾張表 
 
只不過HR里面的數據量會比較大,目前我這個HR用戶是可以登陸的,默認肯定都是鎖著的,那我可以用這幾個命令去操作,比如用alter user[USER] account lock,alter user hr account lock; 
 
權限不足是因為你現在登陸的是HR,你自己不能鎖自己,所以你得用system,你用scott也是不行,因為權限不足,你得用system去登, conn system/tiger,然后去鎖住他 
 
他跟我說用戶不存在,那我就鎖一個scott試一下 
 
這個可以去做的,我這個hr怎么不存在呢,那我現在如果用scott登陸就不行了唄,conn scott/tiger,他就說已經被鎖住了 
 
那我先可以去解鎖,alter user scott accoutn unlock;還是用system去登陸,然后去解鎖 
 
這都是可以的,我們在這里再使用一下scott, conn scott/tiger,這回就登陸進來了 
 
他就登陸進來了 
 
看到這幾張表了,就是非常簡單的這幾個操作,還有是設置一個用戶,用戶名是自己指定的,可以自己建立一個新的用戶,然后identified by,然后后面是密碼,查看用戶的表信息,這肯定是DBA去,用戶信息表,然后還有創建用戶和刪除用戶,這兩個命令,先不說了,太簡單了,簡單的了解一下 
 
然后賦權這個事也是簡單的了解一下吧,這個我不想說太多,如果我給一個用戶進行賦權的話,grant 這個權限 to 這個用戶,如果回收的話,revoke 這個權限 from 這個用戶,比如查看這個用戶所有的權限,select * from session_privs,我們可以看一下,我用SCOTT登陸的 
 
當前SCOTT這個用戶可能有這幾個權限,就是這幾個權限,SCOTT有的,10個權限,然后我再去開啟一個窗口吧,Command Window,我這個窗口用system等一下, conn system/tiger,然后我去給他賦一個權限,這個很簡單,就是grant 加一個權限 to 哪個用戶, grant view to scott,這個權限就啥來的,grant createview to scott 
 
就是我已經給他賦了createview這個權限了 
 
那這個時候我的scott用戶呢他就能有createview這個權限了,然后如果想要回收,也非常的簡單,就是revoke,revoke 權限 from 用戶,權限也是createview這個權限,然后from咱們的scott這個用戶,revoke create view from scott 
 
再次去看看他的權限 
 
這就是簡單的授權和賦權,你得用system用戶去登陸,還有其他的,在咱們的ORACLE里面,最著名的兩個角色,除了dba之外,用的兩個角色就是connect,resource,你自己去做一個實際庫實例的話,你指定DBA就可以了,但是有的時候你可以指定connect,resource,給一個用戶指定這兩個權限,然后說完了之后,簡單的說一下,我就不操作了,比如我們重新建立一個用戶,叫zhangsan,給他去指定密碼,也叫1234,然后這個用戶建立好了以后,那第一件事我就是要干什么,因為這個用戶你剛建立好,你可以給他分配權限,然后加上什么表空間啊,一堆東西,然后zhangsan我們可以分配connect和resource兩個權限,你會發現,除了正常的權限之外,應該和scott這個用戶去做對比,scott用戶有10個權限,你新建zhangsan這個用戶,比如scott多一個權限,就多了一個unlimited權限,那這個權限是干啥用的呢,他的含義是擁有所有表空間配額的使用權限,整個ORACLE所有的地方我都能用,這個權限就太大了,一般我們在真實的生產的時候,我建立完一個用戶之后,我需要把表空間份額的權限給回收,執行這句話,revoke unlimited tablespace from 當前zhangssan這個人,回去可以自己去練一練,然后你就可以去查看用戶的缺省表空間,select username,default_tablespace from user_users,創建用戶的時候也可以指定用戶他指定的表空間是什么,這個也是可以去做,然后重新去分配一下用戶的配額,alter user zhangsan quota 10m on users; 10m是10兆,我這里隨便寫的10M,on在一個表空間,ORACLE缺省表空間,一般都是users,比如咱們的scott 
 
這是名字,它是缺省表空間,我新建zhangsan,缺省表空間也是users,那我可以干什么事呢,我可以重新給他一個配額,alter user zhangsan quota 10m on users;給他100M,你給他一個G,都可以的,然后下面就是說,你可以讓新用戶,擁有對scott.emp表的一個權限,怎么做呢,grant select這個權限,on scott.emp這張表,to給誰,grant select on scott.emp to zhangsan,給張三這個人,你想新建的用戶張三,在scott這個schema上,去創建表的權限也可以,grant create any table to zhangsan;隨便起個名字叫zhangsan,然后還有什么啊,還有讓新建用戶擁有scott.emp表的修改權限,就是我新建的一個用戶,修改scott這個Schema,emp修改字段的權限,直接grant select,update,并且可以指明那個字段的權限update(sal),on emp表,to給誰,給這個tim, grant select,update(sal) on emp to tim;可以精確到這個字段,這是可以這么去做的,這個東西無論是你用到了還是用不到,或者是你以后要用,這兩個事簡單的說一說,關于權限這個事 
 
 
然后再往下看,如果你要做ORACLE的話,假如你以后要考ORACLE認證的話,那肯定會有兩件事,要考你這個權限,傳遞和回收,在ORACLE這個權限一般用在什么地方呢,就是咱們開發寫存儲過程的時候,或者建立數據包的時候,package這個包,在ORACLE里面有這個概念,建立包的時候你得給他賦一些權限,當前的一些用戶,都的有執行存儲過程的權限,這個時候就得用到這些權限,一般來講有兩種,一個叫WITH ADMIN OPTION,WITH GRANT OPTION,這兩個權限,你比如系統權限的傳遞和回收,配置參數就是這樣的,如果你要給他ADMIN這個權限的話,就會有一個總結的概念,叫覆水難收,啥意思,你賦出去的權限再也收不回來了,那咱們可以看一下,看我這個操作,create一個user,創建了一個user,然后這個user叫tim1,我就不自己操作了,我覺得你們有興趣的操作一下,沒興趣的就算了,創建了一個用戶叫tim1,指定密碼identified by,密碼也叫tim1,create user tim1 identified by tim1;然后這里會有提示User Created也就是創建成功了,這樣以后我這個tim1也就存在了,下面我做什么事啊,又創建一個用戶叫tim2,然后密碼也叫tim2,兩個用戶創建完畢以后create user tim2 identified by tim2;往下走怎么做的,首先system用戶登陸去賦權,就是我說的system或者sys都行,賦什么權限呢,create session,能創建session,給tim1,tim1賦予權限給tim2,也就是現在有3個小孩,第一個小孩叫做sys,剛才我創建了用戶,一個叫做T1,一個是T2,T1和T2,他們兩個都是一個干干凈凈的一個用戶的創建,然后我現在做一件事啊,我利用sys這個用戶,就是系統用戶,我做什么事啊,我把create session登陸的權限給了T1,當前T1這個用戶,就能create session,就是能登陸,他就能登陸了,然后我利用什么啊,由于我T1有create session的權限,所以我T1這個角色去登陸,然后我去賦給第二個用戶,叫T2,我給T2一個create session權限,叫cs,他們兩個都有create session的權限以后,看一下我們怎么去做的,首先是grant create session to tim1 with admin option;我賦完權限以后還沒完了,后面還多了一句話,叫做with admin option,這個就是一個權限的兩種方案,第一種方案我賦權的時候有這種權限,然后success,然后我在grant create session to tim2;這個事情做完了以后,這個時候我的tim1和tim2都可以進行登陸,然后sys這個用戶去回收tim1的create session這個權限,然后tim1肯定就不能登陸了,因為我已經把當前的tim1這個create session這個權限,登陸的權限給去掉了,但是tim2還是可以繼續登陸,這就是一個覆水難收的一個概念,然后你發現tim1去進行登陸的時候,是不可以的,ERROR;但是tim2去登陸的時候是已連接,那這個權限總結,就是覆水難收,當前我這個用戶給了tim1 create session權限,然后tim1再把這個權限給tim2,然后這個時候sys不干了,我想把tim1的權限回收掉,revoke回收掉,那么這個時候相當于什么啊,tim2還是可以正常登陸的,如果能夠把tim2的權限也回收掉,那這個事就麻煩了,它是不能夠這么去做的,理解一下就行了,你回家可以去做這個操作 
還有一個問題就叫誅連九族,這個叫grant option,后面加上with grant,這是什么意思呢,scott這個用戶賦權賦select權限給tim1,然后tim1賦select權限給tim2,就是我scott里面有一個emp表,然后就是T1和T2這兩個小孩,都想去查EMP表,那就由scott去給tim1他賦權,然后tim1再給tim2賦權,都是select權限給他了,那這個時候我們看一看,首先是grant select on,emp這張表,to tim1,后面加上with grant option,grant select on emp to tim1;然后授權成功,授權成功的時候我使用tim1去連接的時候,我去查scott.emp,可以看到表的一些信息,select * from scott.emp;可以看到emp表的一些信息,然后我下面做的是什么啊,grant select on emp to tim2;這個時候是誰做的,是tim1把select on emp這個權限給tim2,然后我再利用tim2再去連接的時候,tim2照樣也能查看到表的信息,然后我再次用scott用戶去登陸,我把emp表的這個權限,tim1的權限給他revoke掉,就是tim1我不讓他查這個tim1表了,然后撤銷成功了以后,再次去登陸tim1和tim2,他們兩個誰也都看不到emp這張表了,這個好像就是誅連九族,之前你給別人的權限,只要我一回收,這是ORACLE講權限DBA里面會考的兩個問題,一個是覆水難收,WITH ADMIN OPITON的時候,覆水難收,就是給出去的權限,只能回收一個,要不你就的一個一個的回收,他不會鏈條的集體回收,如果你想要做這個事情,那你就得用with grant option,授權的時候用with grant option,這個應該不難,大概能理解這個意思嗎,很簡單的是嗎,這個是ORACLE里面權限的問題,加入你們用的都收ORACLE數據庫的話,你們用的可能都是MYSQL,對這個不感冒,你們都用ORACLE數據庫的話,日常工作中肯定會用到這些命令,比如我建了個Schema,定一下表空間,分一下配額,重新分配一下配額,然后再怎么樣,然后我這個SCHEMA能不能看到這樣一個表的數據,或者怎么怎么怎么樣,肯定經常會去操作的,包括授權的時候,我給他什么權限 
                        
                        
                        ?
總結
以上是生活随笔為你收集整理的Oracle之用户操作的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: Oracle之SQL分析函数
 - 下一篇: Oracle之事务和锁