標籤:
oracle建立使用者ORA-01045:user lacks CREATE SESSION privilege;logon denied..的問題
conn internal/oracle
grant user aaaa identified by aaaa;
conn aaaa/aaaa 會報錯:
SQL>conn aaaa/aaaa 會報錯:
ERROR:
ORA-01045: user aaaa lacks CREATE SESSION privilege; logon denied
原因:
使用者至少需要會話的權利,否則串連也不成功;
使用者在會話的權利上,應該有其他動作的權利;
解決方案: www.2cto.com
1
grant connect, resource toaaaa;
2
grant create session to aaaa;
Oracle的安全
第一:使用者管理*******************************************
使用者至少需要會話的權利,否則串連也不成功;
使用者在會話的權利上,應該有其他動作的權利;
Oracle的使用者和口令不區分大小寫,真是讓人大跌眼鏡;
Oralce中,所有使用者必須明確被授權,才可以操作;
SQL Server中,建立的使用者自動就擁有了一些許可權;
Oracle不依賴作業系統;SQL Server依賴Windows;
MicroSoft假定大多數使用者都是合法使用者,採取樂觀態度;
Oracle首先假定使用者都是不安全的,採取悲觀態度;
Oracle中的使用者是互相隔離的,稱為使用者模式;
內建使用者: www.2cto.com
sys,網路系統管理員,最高許可權;
當你試圖輸入了使用者名稱:sys
密碼:通用
之後,你發現串連不上;
而輸入 使用者名稱:system
密碼:通用
或者 使用者名稱:scott
密碼:tiger
的時候都可以串連,所以你認為
sys的許可權沒有system高;
其實正是因為sys的許可權高,所以你必須以
dba的身份來登陸:sys/通用 as sysdba
//可以使用資料字典user_users來查看目前使用者管理的使用者:
select * fromuser_users;
而dba_users可以查看dba管理的使用者;
system,只管理本機上的資料庫;
而all_users查看所有使用者,只能由dba來查看;
******建立使用者: www.2cto.com
create user 使用者名稱 identified by 口令 [externally]
[default tablesapce 資料表空間名]
[temporary tablespace 暫存資料表空間名]
[quota 整數 K|M|unlimited on 資料表空間名]
//注意:建立使用者必須有dba的許可權;
******查詢使用者:
其實就是對錶user_users/dba_users/all_users進行查詢,
只不過這裡不把他們叫表,叫資料字典;而且資料字典是系統
維護的;
*******修改使用者:
alter user.....//後面和建立一樣;
Oracle中一個執行個體就是一個資料庫,這個資料庫相當與SQLServer的全部資料庫;
Oracle的一個資料庫被分為很多個資料表空間,每個資料表空間相當於SQL Server中的一個資料庫;
執行個體示範:
create user student_user
identified by student
default tablespace users
temporary tablespace temp
quota 5m on users
quota 3m on temp
/其中,users,temp都是內建的資料表空間,student_user在users裡有5m空間,在temp裡有3m;
新建立的使用者是沒有權利的:
SQL> connstudent_user/student;
ERROR: www.2cto.com
ORA-01045: user STUDENT_USERlacks CREATE SESSION privilege; logon denied
警告: 您不再串連到 ORACLE。
*****限制使用者
鎖定:alter user 使用者名稱 account lock;
效果:
SQL> alter userstudent_user account lock;
使用者已更改。
SQL> connstudent_user/student;
ERROR:
ORA-28000: the accountis locked
警告: 您不再串連到 ORACLE。
解鎖:alter user 使用者名稱 account unlock;
口令無效:alter 使用者名稱 password expire; 當使用者建立了很多表,
如果直接刪除使用者,它下面的表都將被刪除,所以我們可以
只使得它的口令無效;
//可見,表是使用者的手下,使用者沒了,使用者創立的表,佔用的空間都就沒了;
//所以,一般情況下,我們不要刪除使用者;
****刪除使用者: www.2cto.com
drop user 使用者名稱[cascade]
//cascade是強制移除,即使有別人正在用這個使用者的表;
//資料庫管理語句是自動結束事務的,沒有rollback的機會;
第二:許可權管理***********************************************
授權:grant [系統特權名] [角色] [on 被授權動作表名] to [使用者名稱列表]
[public][with adminoption]
如果是dcl語句,就不用on 被授權動作表名
grant all on student topublic:把對student的所有許可權授予所有使用者;
資料字典:user_sys_privs
select * fromuser_sys_privs
許可權收回: www.2cto.com
revoke 許可權列表 on 表 from 使用者;
SQL> revoke createtable from iam;
撤銷成功。
撤消只是撤消本次授權的許可權,所以如果某個使用者原來就有某個權利,
而你又給它授了同樣的一個權利,然後你收回這個許可權的時候,它原來
就具有的這個權利還是有的;
第三:角色管理*****************************************
因為一個使用者可能需要某些許可權的集合,當我們得到一新的使用者的時候,我們需要給一個
使用者依次授權每個它需要的許可權;角色正是一個許可權的集合,使用者可以直接被授予這個
角色,使用者自然就擁有了它的角色所擁有的權利;
建立角色:
create role 角色名稱 [noidentified|identified by 口令|externally]
not identified:指出授予該角色的使用者在使用時不需要檢驗;
identified by:指出授予該角色的使用者在使用set role命令時需要檢驗;
www.2cto.com
收回許可權:revoke 許可權 from 角色名稱;
//角色就是許可權的集合;
執行個體:
create role student_role
/
grant create table,createsession,create view to student_role
/
grant student_role to scott
/
revoke create view fromstudent_role
/
角色的某個許可權被收回的時候,被授予該角色的使用者的該許可權也相應被收回;
oracle建立使用者ORA-01045:user lacks CREATE SESSION privilege;logon denied..的問題