程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> Oracle基礎(二):用戶及權限管理

Oracle基礎(二):用戶及權限管理

編輯: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_sho identified 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)語法:
show user;
(二)修改密碼 1、給用戶修改密碼 1)語法:
passw【ord】 用戶名 2)實例:
passw sam_sho;
passw 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、查看權限、角色
通過PL/SQL DEV工具查看
通過各種指令 5、權限分配的方式
直接分配權限
系統權限(與數據庫管理相關):
grant create sessionto sam_sho ;--分配登錄權限
對象權限(增刪改查):
grantselectonV_table to 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_roles;
查看角色的系統權限
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、刪除角色
drop role 角色名; (四)給用戶賦權限 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、收回權限:revoke 1)語法:
revoke select on emp from sam_sho; 從sam_sho收回emp表的查詢權限 2)注意:
誰授權,誰收回。或者DBA
系統權限,不是級聯回收。
對象權限,是級聯回收。 3、權限的傳遞 1)scott把emp表的查詢權限賦予sam_sho,sam_sho再把這種權限傳遞給rabby_zho 2)語法:
對象權限使用 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系統的信息
systeminfo (二)Linux 1、lsnrctl start (啟動監聽) 2、sqlplus sys/change_on_install as sysdba
sqlplus /nolog
conn sys/change_on_install as sysdba 3、startup

七、Oracle的登錄認證方式 (一)Windows 1、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)對於普通用戶:
oracle默認使用數據庫驗證。 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.ora 2)刪除該文件,建議備份。 3)生成新的密碼文件,在doc 下輸入命令:
orapwd file = 原來密碼文件的全路徑\密碼文件名.ora password=新密碼 entries=10;
entries=10:允許幾個特權用戶
密碼文件名 一定要和原來的密碼文件名一致。 4)重啟生效
3、例子:
orapwd file=D:\oracle10g\database\PWDorcl.ora password=abc123 entries=10;
八、數據庫管理員
\


\

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved