------使用者許可權及角色------
1.在oracle中,使用者是資料庫的操作者,所有對資料庫的操作都是使用者進行的
oracle預設使用者:
使用者名稱 口令 登陸身份及說明
sys change_on_install sysdba或sysoper,但是不能已normal登入,可作為預設的系統管理員
system manager sysdba或normal,但是不能以sysoper登入,可作為預設的系統管理員
scott tiger normal,普通使用者
aqadm aqadm sysdba或normal,高階佇列管理員
dbsnmp dbsnmp sysdba或normal,複製管理員
可自定義使用者test 密碼oracle
create user test identitfied by oracle;
select * from all_users;
登出使用者一般在drop user+使用者名稱語句後面增加引數cascade,用來表示刪除使用者的同時刪除其建立的實體:
drop user test cascade;
2.修改使用者口令
alter user system indentified by manager;
在修改口令之前,應該以資料庫管理員的身份連線到ooracle
select username,password from dba_users;
3.設定和解除使用者鎖定
在oracle剛剛被安裝時,使用者scott預設處於鎖定狀態
解鎖scott使用者:
alter user scott account unlock;
鎖定scott使用者:
alter user scott account lock;
由於sys使用者的特殊性,其額能夠啟動和停止oracle服務,因此對sys使用者的鎖定操作是無效的
3.更改使用者名稱
oracle沒有提供直接修改使用者名稱的語句,需要通過幾個步驟來組合實現:
以sys使用者連線資料庫;
查詢要修改的使用者名稱以及相關資訊:select user#,name,password from user$ where name='test';
更改指定user#的使用者名稱,將其改為test_bak:update user$ set name = 'test_bak' where user# = 62;
強制寫入資料檔案和清除快取資料字典資訊,這是關鍵步驟,如果不執行這個步驟,則上述更新操作不能生效:alter system checkpoint;alter system flush shared_pool;
確認使用者名稱是否已更改,再次通過select語句對user$表中的user#值為62的列進行查詢並返回:select user#,name,password from user$ where user# = 62;
user$是乙個儲存oracle所有使用者的基本表,該錶只有在sys使用者sysdba角色的許可權下才是可見的
4.將系統許可權授予使用者
grant create session to test;
授予test使用者建立會話的系統許可權
select * from system_privilege_map;查詢系統許可權
oracle剛安裝後,只有sys和system兩個使用者能夠為其他使用者授予系統許可權,因此需要首先以這兩個使用者連線oracle,再進行授權
5.將物件許可權授予使用者
物件許可權是用來描述使用者對資料庫物件操作的權力
create select on stu to test;
select * from dba_tab_privs;檢視授權具體情況
grant select any table to test;授予所有表的查詢許可權
如果當前使用者為test,使用select語句查詢stu表的資料,需要在表名前加上該錶所屬的使用者名稱,如"system.stu"
6.授予使用者角色
角色是一組許可權的集合,將角色賦給乙個使用者,這個使用者就擁有了這個角色中的所有許可權
grant resource to test;
將角色resource授予了使用者test,使其能夠完成建立序列、建立基本表等操作
oracle安裝完成後自動預定義了3個角色:connect、resource、dba;
dba:擁有全部特權,是系統的最高許可權,只有dba才可以建立資料庫結構
resource:擁有resource許可權的使用者只可以建立實體,不可以建立資料庫結構
connect:擁有connect許可權的使用者只可以登入oracle,不可以建立實體,不可以建立資料庫結構
一般對普通使用者授予connect、resource角色,對於管理員使用者則授予dba角色
7.建立自定義角色
在實際應用中,通常建立易於管理的小角色,然後根據使用者的安全級別授予使用者乙個或多個角色
create role sturole;
alter role sturole indentified by oracle;
grant create any table,create view to sturole;
建立角色sturole,密碼口令為oracle,賦予建立表和建立檢視的許可權
select * from role_sys_privs where role = 'sturole';
建立角色必須具有create role系統許可權,一般來說,該系統許可權只授予資料庫管理員或應用程式管理員
8.收回物件許可權
revoke update,delete on stu from test;
在收回許可權之前要確認test使用者擁有的物件許可權
9.收回系統許可權
使用system/oracle普通連線到oracle後,首先檢視test有哪些系統許可權:select * from dba_sys_privs where grantee = 'test';
使用revoke語句收回create view許可權:revoke create view from test;
再次執行select確認create view許可權被刪除
系統許可權只能由dba使用者收回
10.級聯物件許可權的授予
使用system/oracle普通連線到oracle:
grant update on stu to test with grant option;
切換到test使用者:
grant update on system.stu to testb;
在以test使用者身份登入後並授權給testb時,on子句後的資料物件必須指明表空間
11.收回級聯的物件許可權
revoke update on stu from test;
12.級聯系統許可權的授予
使用system/oracle普通連線到oracle:
grant create session to test with admin option;
切換test使用者:
grant create session to testb;
檢視test和testb使用者的系統許可權,需要以system使用者登入,才能執行select * from dba_sys_privs檢視許可權
13.收回級聯的系統許可權
revoke create session from test;
revoke create session from testb;
系統許可權需要分別收回
14.收回角色許可權
revoke create view from sturole;
角色許可權的授予和收回都是不能採用級聯方式的,這是因為角色不是具體的使用者
15.刪除自定義角色
drop role sturole;
要刪除乙個角色,使用者必須是管理員或者具有"create role"許可權,否則無法刪除角色;刪除角色後,使用該角色的使用者的許可權也同時被收回
16.啟用/禁用角色
在oracle的預設情況下,當使用者連線到資料庫時將啟用授予該使用者的所有角色;如果角色將只用於應用程式的上下文中,則在使用者登入時可以先禁用該角色,然後在應用程式中啟用和禁用該角色
使用者test具有connect、resource、sturole三種角色,禁用sturole角色:
使用system連線資料庫之後:禁用
alter user test default role all except sturole;
啟用:set role sturole identitfied by oracle;
在oracle中,乙個使用者擁有預設角色與非預設角色2種;預設角色即當使用者登入的時候,就自動擁有的角色;非預設角色即當使用者登入的時候,使用者需要啟用這個角色,以獲得該角色擁有的許可權
17.顯示使用者所擁有的角色
當乙個使用者被授予多種角色許可權後,在使用該使用者進行某些操作前,有必要先檢視該使用者是否具有該角色或操作許可權
select * from dba_role_privs where grantee = 'test';
dba_role_privs是oracle資料字典種的乙個表,oracle種資料字典檢視分為3大類,其字首表示的意思如下:
user_*:有關使用者所擁有的物件資訊,即使用者自己建立的物件資訊;
all_*:有關使用者可以訪問的物件的資訊,即使用者自己建立的物件的資訊加上其他使用者建立的物件但該使用者有權訪問的資訊;
dba_*:有關整個資料庫中物件的資訊
18.顯示角色的許可權
select * from dba_sys_privs where grantee in ('connect','resource');
19.顯示使用者的所有系統許可權
select privilege from dba_sys_privs where grantee = 'test' union select privilege from dba_sys_privs where grantee in (select granted_role from dba_role_privs where grantee = 'test');
關於學東西的耐心
都說現在社會的風氣很浮躁,學習和工作都是急於求成,缺乏耐心。我想,這種現象在我們計算機專業就應該更普遍了。計算機本就是是乙個應用學科,就是學了拿來做事的。你學一項技術,絕大部分不是為了將這項技術發揚光大,而是要會用它,拿它來做事,拿它來作為自己技能術的一部分。這種情況下,學起來想不浮躁都難。再者說,...
Oracle PL SQL的基本寫法 BEGIN
雖然之前寫了不少oracle上的sql語句,但是沒有抽出時間對oracle進行乙個系統的學習,實踐固然重要,但沒有乙個理論上的規範學習與理解,在實踐中就不能舉一反三,就不能寫出高規範高質量的sql語句。pl sql 基本寫法 說明 宣告 異常處理部分為可選,視具體程式而定 declare 宣告變數 ...
Oracle PL SQL語句塊的使用
oracle database,又名 oracle rdbms,或簡稱 oracle 是甲骨文公司的一款關聯式資料庫管理系統。5.1 建立資料檔案大小20m的表空間 create tablespace usertbs1 datafile d tmp usertbs1.dbf size 20m 5.2...