3個預設的帳戶:
對於oracle 9來說:
sys change_on_install 網路系統管理員 [as sysdba]
system manage 本地管理員
scott tiger 普通使用者 預設鎖定,需解鎖才能用
對於oracle 10來說:
sys和system是沒有密碼的,scott也沒有密碼,都要自己設定,scott使用需解鎖。
常用操作:
sqlplus lisi/lisi 使用者登入
disconn; 中斷連線(使用者已經登入成功的情況下才能使用)
conn lisi/lisi; 開啟串連(使用者已經登入成功的情況下才能使用)
commit; 提交資料,每次進行增、刪、改之後就要執行這個命令,以儲存到硬碟上,
其他使用者操作時,才會資料一致。
建立使用者:
一般用sys進行操作:
create user lisi identified by lisi;
系統許可權:(進行DDL操作的許可權)
授權:
grant create session to lisi; 會話許可權,每個使用者都要有這個許可權後才能登陸
grant create table to lisi; 建表許可權,建表之前先要有資料表空間
grant unlimited tablespace to lisi; 不受限資料表空間許可權,可以對資料庫中所有資料表空間進行操作
有了這三個授權之後才能對錶進行CRUD操作
撤消許可權:
revoke create session from lisi;
revoke create table from lisi;
revoke unlimited tablespace from lisi;
將某個許可權公開(比如sys帳戶的以下兩個許可權):
grant create session to public;
grant create any talbe to public;
查看許可權表:
set linesize 400 設定行寬度
select * from user_sys_privs
對象許可權(進行DML操作的許可權):
grant select on mytab to lisi; 把對錶的查詢許可權授予lisi
grant all on mytab to lisi; 把對錶的增、刪、改、查、索引、外鍵等許可權授予lisi
revoke select on mytab from list; 對lisi撤消對錶的查詢許可權
revoke all on mytab from lisi; 對lisi撤消對錶的所有許可權
select * from user_tab_privs; 查看使用者對錶的操作許可權範圍
對象許可權可以控制到列(僅限於增、改):
grant update(name) on mytab to lisi; 把對錶中name欄位的更新許可權授予lisi
grant insert(id) on mytab to lisi; 把對錶中id欄位的插入許可權授予lisi
select * from user_col_privs; 查看使用者對錶中列的操作許可權範圍
注意:查詢和刪除不能控制到列。
ddl----資料定義語言 (Data Definition Language)
dml----資料操縱語言
dcl----資料控制語言
dml中的增刪改需要 commit , 其他不用;
如果忘記了commit,可能用不同的使用者對同一表進行操作時,會發生資源衝突(不能進行DML操作),
同一個使用者操作時;會看不到最新的資料結果。commit是把資料寫到硬碟上。
許可權的傳遞:
grant alter any table to lisi with admin option;
註:在oracle 10中,假設sys使用者授予alter any table給lisi,lisi又把這個許可權授予給wang,
當sys撤消lisi的alter any table許可權時,wang的alter any table許可權還會存在。
grant select On A to lisi with grant option;
註:在oracle 10中,假設sys使用者授予select On A 給lisi,lisi又把這個許可權授予給wang,
當sys撤消lisi的select On A許可權時,wang的這個許可權也會被撤消。
角色
create role myrole;
grant create session to myrole;
grant create table to myrole;
drop role myrole;
不能把unlimited tablespace許可權授予自訂的角色,因為這個許可權比較大,是一個比較特殊的許可權。
注意:
create table 可以給自己建立表 create any table 建立任意一個使用者的表
[alter table] 沒有這個許可權 alter any table 修改任意一個使用者的表
[drop table] 沒有這個許可權 drop any table 刪除任意一個使用者的表
當一個使用者有了create any table許可權時,也就有了另外兩個許可權。
由於create any table許可權較大,所以不建議把它授予給角色。
表是屬於某一個使用者的。
而角色不屬於某個使用者,是一個使用者集合。
資料庫的三種驗證機制:
作業系統驗證 / (當前window使用者,系統管理員許可權)
密碼檔案驗證 sys
資料庫驗證 scott
linux下的oracle的啟動過程
lsnrctl start
sqlplus sys/oracle as sysdba
startup
window下的oracle的啟動過程
lsnrctl start 啟動監聽器
oradim -startup -sid orcl 啟動資料庫執行個體
管理員密碼丟了怎麼辦?
★假設使用者是scott,密碼丟了,要對它進行修改。
1.用sys登陸 sqlplus / as sysdba;注,這是作業系統驗證,
或者使用sqlplus sys/sys as sysdba;進行登入
2.執行sql語句 alter user scott identified by tiger;
經本人實驗,通過。
★如果使用者是sys,由於它屬於SYSDBA,採用作業系統驗證和密碼檔案驗證(SYSOPER也是採用這兩種驗證),
當我們使用sqlplus / as sysdba進行登入時,就是使用作業系統驗證,由於你在window下是管理員,
預設安裝時會把目前使用者添加到ora_dba使用者組中,所以有許可權登入。
這樣比較危險,開啟電腦管理->本機使用者和組->組->ora_dba,把當前window使用者從表中刪除,
這樣用sqlplus / as sysdba就不能登入了。
★假設上面的操作都做了,這時就要使用sqlplus sys/sys as sysdba進行登入了,而在這種情況下只有一種驗證,
那就是密碼檔案驗證,所以如果忘了sys的密碼,這時就要執行以下操作:
1.找到PWDorcl.ora
一般位於C:\oracle\product\10.2.0\db_1\database\下,找到後將PWDorcl.ora刪除。
2.使用命令重建PWDorcl.ora
在命令列中,輸入
orapwd file=C:\oracle\product\10.2.0\db_1\database\PWDorcl.ora password=sys entries=10
執行完成後,sys的密碼就改成了sys了。
經本人實驗,通過。file指PWDorcl.ora檔案的路徑,password就是sys的密碼,entries是使用者數量
帳戶管理細節 建立使用者的完整格式: create user 使用者名稱 identified by 密碼 default tableSpace 資料表空間 Temporary TableSpace 資料表空間 Quota 整數[ K | M ] | Limited | unlimited on 資料表空間 例子: create user abc identified by 123 default tablespace Users Temporary tablespace Temp Quota 50M on Users 限制使用者: 使用者加鎖 -- alter user 使用者名稱 account lock 使用者解鎖 -- alter user 使用者名稱 account unlock 使用者口令即刻失效 -- alter user 使用者名稱 password expire(登陸成功即修改密碼) 刪除使用者: drop user 使用者名稱 [CasCade] CasCade表示刪除使用者所有對象 樣本: drop user abc cascade;
一個完整的樣本:
sqlplus sys/sys as sysdba;
SQL> create user zhang identified by zhang default tablespace users
temporary tablespace temp quota 100M on users;
SQL> create role myrole;
SQL> grant create session to myrole;
SQL> grant create table to myrole;
SQL> grant myrole to zhang;
sqlplus zhang/zhang
SQL> create table teacher(id int,name varchar(10));
SQL> show user;
編輯器載入中...