Oracle基礎(二):使用者及許可權管理,oracle許可權管理
一、建立使用者(一)簡單建立1、許可權:只有DBA使用者才有許可權,或有create user 的系統許可權2、文法:
- create user 使用者名稱 identified by 密碼;
- oracle密碼不能以數字打頭
3、執行個體:使用者名稱-sam_sho、密碼-sam123
- create user sam_sho identified by sam123;
4、注意:1)剛建立的使用者沒有任何許可權, 需要管理員分配許可權。如登入許可權:
- grant create session to sam_sho ; --分配登入許可權
- create session:登入許可權。
2)oracle的許可權較為複雜,下面單獨處理。
(二)複雜建立1、執行個體
- create usersam_shoidentified by sam123
- default tablespace users --預設資料表空間。users是oracle自己建立的資料表空間
- temporary tablespace temp --暫存資料表空間
- quota 3m on users ; --分配資料表空間大小,3m。unlimited-不限制大小
- grant create session to sam_sho ; --分配登入許可權
- grant dba to sam_sho ; --分配DBA 角色
- grant select on V_table to sam_sho ; --分配查詢表的許可權
2、資料表空間理解1)表存在的空間,即在邏輯上表(Table)都是存放在資料表空間中(Tablespace )2)一個資料表空間指向具體的資料檔案
3)resourse 角色的使用者,建立的表沒有資料表空間限制。
- grant resourse to sam_sho ; --分配resourse 角色
(三)Oracle的使用者管理機制1、一些概念:
- oracle dbms:資料庫管理系統
- db 執行個體:
- 資料表空間
- 資料對象
- 表
- 使用者
- 許可權:系統許可權與資料庫許可權。
- 角色:把常用的許可權集中起來。
2、許可權、角色、使用者的關係
二、登入及修改密碼(一)使用者登入1、切換使用者,使用者登入。1)文法:
- conn 使用者名稱/密碼 【as sysdba/sysoper】
2)執行個體:
- conn sam_sho/sam123;
- conn sam_sho/sam123 as sysdba;
- 實際登入的不是sam_sho,可以show user看看
- 和驗證機制有關,見下面。
2、顯示當前登入使用者的名稱1)文法:
(二)修改密碼1、給使用者修改密碼1)文法:
2)執行個體:
3)注意:
- 給自己修改,不需要帶使用者名稱,給別人修改需要帶上。
2、給別人修改密碼1)許可權:需要DBA的許可權,或者擁有alter user 的系統許可權2)文法:
- alter user 使用者名稱 identified by 新密碼;
3)執行個體:
- alter user sam_sho identified by sam456;
(三)刪除使用者1、許可權:一般需要DBA的許可權,或者需要具有drop user的許可權2、文法:
- 文法:drop user 使用者名稱 (cascade)
- cascade 參數:串聯刪除該使用者建立的表等資料對象。資料庫會提醒的。
3、執行個體:
- drop user sam_sho ;
- drop user sam_sho cascade;--串聯刪除使用者建立的表等資料
4、刪除某個使用者,但保留其資料對象
- 方案:鎖定該使用者
- alter user 使用者 account lock;
- alter user 使用者 account unlock;--解鎖
三、使用者口令
1、概述:
- 需要DBA身份
- profile 是口令限制,資源限制的命令集合,當建立資料庫時,oracle會自動建立名稱為default 的profile。
- 當建立使用者沒有指定 profile 選項,那麼oracle 就會將default 分配給使用者。
2、賬戶鎖定
- 概述:指定該賬戶登入時最多可以輸入密碼的次數,也可以指定使用者鎖定的時間(天),一般用dba 的身份去執行該命令。
- 執行個體:指定 這個使用者最多隻能嘗試3次登入,鎖定時間為2天。
- create profile lock_account limit failed_login_attempts 3 password_lock_time 2;
- alter user sam123 profile lock_account ;--分配
3、賬戶解鎖:
- 文法:
- alter user 使用者名稱 account unlock;
- 執行個體:
- alter user sam123 account unlock;
4、終止口令
- 概述:為了讓使用者定期修改密碼可以使用終止口令來完成
- 執行個體:建立新的profile ,要求該使用者每隔10天要修改自家的登入密碼,寬限期為2天。
- create profile myProfile limit password_life_time 10 password_grace_time 2;
- alter user sam123 profile myProfile;
5、曆史口令:新舊密碼不能重複
- create profile myProfile2 limit password_life_time 10 password_grace_time 2 password_reuse_time 1
- alter user sam123 profile myProfile2;
6、刪除口令
- drop profile myProfile2 ;
四、許可權與角色(一)、概述:
1、剛建立的使用者沒有任何許可權(不能登入),需要賦予各種許可權。oracle對於許可權的管理,需要引用角色的概念。2、許可權1)系統許可權:使用者對資料庫管理的操作以及對資料對象本身的操作的許可權。
2)對象許可權:使用者對其他使用者的資料對象資料操作的許可權。
- 許可權主要分為:select、insert、update、delete、all、create index 等等
3、角色:簡化對許可權的管理。1)預定義角色
- connect :串連的角色
- DBA:管理員角色
- resource:這個角色可以在任何錶空間中建表。
2)自訂角色
4、查看許可權、角色
5、許可權分配的方式
- 直接分配許可權
- 系統許可權(與資料庫管理相關):
- grant create sessionto sam_sho ;--分配登入許可權
- 對象許可權(增刪改查):
- grantselectonV_tableto sam_sho ;--分配查詢表的許可權
- 分配角色,批量分配許可權
- grantdbato sam_sho ;--分配DBA 角色
6、撤銷許可權
- 文法:revoke 許可權 from 使用者
- 執行個體:
- revoke select on emp from sam_sho; 從sam_sho收回emp表的查詢許可權
- revoke connect from sam_sho;
(二)許可權1、系統許可權:是指執行特定類型sql命令的許可權,它用於控制使用者可以執行的一個或是一組資料庫操作。比如當使用者具有 create table 許可權時,可以在其方案中建表。當使用者具有 create any table 許可權時,可以再任何方案中建表。1)內容
- create session 串連資料庫
- create table 建表
- create view 建視圖
- create public synonym 建同義字
- create procedure 建過程、函數、包
- create trigger 觸發器
- create cluster 建簇
- create sequence 建索引
- create type
2)顯示:
- oracle 提供了166系統許可權,查詢資料字典視圖 system_privilege_map
- select * from system_privilege_map order by name;--查詢系統許可權
3)賦予系統許可權:grant
- 一般情況下只有DBA才能完成 或者擁有 grant any privilege 許可權
- 賦許可權語句後+ with admin option ,實現系統許可權的傳遞(和方案一起理解)
- grant connect to sam_sho with admin option
4)許可權回收:revoke
2、對象許可權:訪問其他方案對象的權利。使用者可以直接存取自己方案的對象,但是如果要訪問別的方案的對象,則必須具有對象的許可權。1)內容:
- alter 修改
- delete 刪除
- select 查詢
- insert 添加
- update 修改
- index 索引
- references 引用
- execute 執行
2)顯示:DBA使用者可以查看對象許可權 dba_tab_privs
- select distinct privilege from dba_tab_privs;
3)賦予對象許可權
- 直接可以賦許可權給使用者 或者角色
- 賦許可權語句後+ with grant option ,實現系統許可權的傳遞
- grant select on emp to sam_sho with grant option
- 只能賦予使用者,不能賦予角色
4)許可權回收:revoke
(三)角色1、預定義角色:33種1)常見內容
- connect :串連的角色
- DBA:管理員角色(sys 和 system)。不具備啟動和關閉資料庫
- resource:這個角色可以在任何錶空間中建表。
- 隱藏了 unlimited tablespace 的許可權
2)顯示
- 查看預定義角色:33種角色
- 查看角色的系統許可權
- SELECT * FROM dba_sys_privs where grantee = 'DBA'
- SELECT * FROM role_sys_privs WHERE role = 'DBA';
- 查看角色的對象許可權
- SELECT * FROM dba_tab_privs where grantee = 'DBA'
- 查看某個使用者的角色
- SELECT * FROM dba_role_privs WHERE grantee='SYS';
2、自訂角色1)建立角色
- 注意:
- BDA角色建立或者 需要具有create role 許可權
- 在建立角色的時候,可以設定驗證方式,如不驗證、資料庫驗證等
- 不驗證建立(一般都是這種)
- create role 角色名稱 not identified
- 資料庫驗證
- create role 角色名稱 identified by 密碼;
2)給角色賦許可權
- grant create session to 角色
3)執行個體
- create role myRole not identified;
- grant create session to myRole ;
- grant select on scott.emp to myRole ;
- grant myRole to sam_sho;
3、刪除角色
(四)給使用者賦許可權1、賦予直接的許可權。如直接登入許可權(create session)
- grant create session to sam_sho;
- grant select on emp to sam_sho;
2、直接分配角色,批量分配許可權。如
- grant connect to sam_sho;
- 授於sam_sho connect的角色,即擁有登入的許可權。connect,包含7 種許可權。
- grant resource to sam_sho;
(五)使用者的許可權操作1、賦許可權:grant 1)文法:grant 許可權(角色) to 使用者名稱;
2)執行個體1:
- grant create table to sam_sho:賦予 sam_sho 建立表的許可權。
- grant dba to sam_sho:賦予 sam_sho dba的角色,其自然具有建立表的角色。
3)執行個體2
- grant select on emp to sam_sho; 把emp表的查詢許可權賦予sam_sho
- SELECT * FROM scott.emp;可以查詢,但是需要在表前面加上scott首碼。
2、收回許可權:revoke1)文法:
- revoke select on emp from sam_sho; 從sam_sho收回emp表的查詢許可權
2)注意:
- 誰授權,誰收回。或者DBA
- 系統許可權,不是級聯回收。
- 對象許可權,是級聯回收。
3、許可權的傳遞1)scott把emp表的查詢許可權賦予sam_sho,sam_sho再把這種許可權傳遞給rabby_zho2)文法:
- 對象許可權使用 with grant option 進行傳遞
- grant select on emp to sam_sho with grant option;(scott登入)
- grant select on scott.emp to rabby_zho;(sam_sho登入)
- 角色、系統許可權使用 with admin option
- grant connect to sam_sho with admin option;(scott登入)
- grant connect to rabby_zho;
3)回收
- 系統許可權,不是級聯回收。
- 對象許可權,是級聯回收。
五、方案(Schema)1、問題:同一個資料庫執行個體 DEV_SAM,建立了2個使用者 A 和 B 。使用者 A 建立表a_table,B建立表b_table。結果A 訪問不了 b_table,B訪問不了 a_table 。2、解決:
- 當一個使用者,建立好後,如果該使用者建立了任意一個資料對象,這時,dbms就會建立一個對應的【方案】與該使用者對應,並且該【方案】的名字與使用者名稱一致。
- 在這樣的機制下,同一個資料庫執行個體,可以建立多張相同表名的表,但是同一個方案中表名是具有唯一性的。
- A 如果需要去訪問 B方案下的資料,需要許可權的轉移。
- 文法:
- grant 許可權 to 使用者名稱 【with grant option】 對象許可權
- grant 許可權 to 使用者名稱 【with admin option】系統許可權
- 執行個體
- grant select on emp to sam_sho ;(scott登入)
- 使用的時候,需要帶【方案】名:select * from scott.emp 。
- grant all on emp to sam_sho with grant option;可以轉移
- grant select on scott.emp to sam2;
六、資料庫的啟動流程(遠程登入)(一)windows:1、lsnrctl start (啟動監聽)2、oradim -startup -sid 資料庫執行個體名
- oradim -startup -sid orcl
3、附:查看windows系統的資訊
(二)Linux1、lsnrctl start (啟動監聽)2、sqlplus sys/change_on_install as sysdba
- sqlplus /nolog
- conn sys/change_on_install as sysdba
3、startup
七、Oracle的登入認證方式(一)Windows1、oracle登入認證在windows 和linux 下是不完全相同。2、現象:1)conn XXXX/CCC as sysdba; 登入成功,並且顯示目前使用者為 sys。2)XXXX/CCC 可以任意,只要以 as sysdba 即可。
2、作業系統認證1)如果【目前使用者】屬於本地作業系統的 ora_dba 組,即可通過作業系統認證。2)目前使用者,指目前作業系統使用的使用者,可以簡單通過windows 工作管理員查看。
3)作業系統的使用者與組:
- 我的電腦-->右擊管理-->本機使用者和組-->使用者,如使用者 sam
- 我的電腦-->右擊管理-->本機使用者和組-->組,顯示sam屬於ora_dba組
3、oracle 資料庫驗證(密碼檔案驗證)1)對於普通使用者:
2)對於特權使用者(比如 sys 使用者,或以 as sysdba)
- oracle 預設使用作業系統認證,如果驗證不通過,再到資料庫驗證。
- 通過配置 NETWORK\ADMIN\sqlnet.ora 檔案,可以修改oracle登入認證方式。
- SQLNET.AUTHENTICATION_SERVICES= (NTS)
- NTS:基於系統,預設的。
- NONE:基於Oracle 驗證
- NONE,NTS:二者都驗證
(二)Linux,略。
七、丟失 Oracle 管理員密碼1、恢複辦法:把原有密碼檔案刪除,產生一個新的密碼檔案2、恢複步驟如下:1)搜尋名為 PWD+資料庫執行個體名.ora 檔案。一般在\database\PWDorcl.ora2)刪除該檔案,建議備份。3)產生新的密碼檔案,在doc 下輸入命令:
- orapwd file = 原來密碼檔案的全路徑\密碼檔案名稱.ora password=新密碼 entries=10;
- entries=10:允許幾個特權使用者
- 密碼檔案名稱 一定要和原來的密碼檔案名稱一致。
4)重啟生效
3、例子:
- orapwd file=D:\oracle10g\database\PWDorcl.ora password=abc123 entries=10;
八、資料庫管理員