oracle創建用戶ORA-01045:user lacks CREATE SESSION privilege;logon denied..的問題


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 to aaaa;

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 * from user_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中一個實例就是一個數據庫,這個數據庫相當與SQL Server的全部數據庫;

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> conn student_user/student;

ERROR:  www.2cto.com  

ORA-01045: user STUDENT_USER lacks CREATE SESSION privilege; logon denied

警告: 您不再連接到 ORACLE。

 

*****限制用戶

 鎖定:alter user 用戶名 account lock;

  效果:

  SQL> alter user student_user account lock;

  用戶已更改。

  SQL> conn student_user/student;

  ERROR:

  ORA-28000: the account is locked

  警告: 您不再連接到 ORACLE。

 解鎖:alter user 用戶名 account unlock;

 口令無效:alter 用戶名 password expire; 當用戶創建了很多表,

  如果直接刪除用戶,它下面的表都將被刪除,所以我們可以

  只使得它的口令無效;
 

//可見,表是用戶的手下,用戶沒了,用戶創立的表,占用的空間都就沒了;

//所以,一般情況下,我們不要刪除用戶;

****刪除用戶:  www.2cto.com  

 drop user 用戶名[cascade]

 //cascade是強制刪除,即使有別人正在用這個用戶的表;

//數據庫管理語句是自動結束事務的,沒有rollback的機會;

 

第二:權限管理***********************************************

授權:grant [系統特權名] [角色] [on 被授權操作表名] to [用戶名列表]

 [public][with admin option]

 如果是dcl語句,就不用on 被授權操作表名

 grant all on student to public:把對student的所有權限授予所有用戶;

 

數據字典:user_sys_privs

 select * from user_sys_privs

權限收回:  www.2cto.com  

 revoke 權限列表 on 表 from 用戶;

 SQL> revoke create table from iam;

 撤銷成功。
 

撤消只是撤消本次授權的權限,所以如果某個用戶原來就有某個權利,

而你又給它授了同樣的一個權利,然后你收回這個權限的時候,它原來

就具有的這個權利還是有的;

第三:角色管理*****************************************

因為一個用戶可能需要某些權限的集合,當我們得到一新的用戶的時候,我們需要給一個

用戶依次授權每個它需要的權限;角色正是一個權限的集合,用戶可以直接被授予這個

角色,用戶自然就擁有了它的角色所擁有的權利;
 

創建角色:

 create role 角色名 [no identified|identified by 口令|externally]

 not identified:指出授予該角色的用戶在使用時不需要檢驗;

 identified by:指出授予該角色的用戶在使用set role命令時需要檢驗;

   www.2cto.com  

收回權限:revoke 權限 from 角色名;
 

//角色就是權限的集合;

實例:

create role student_role

/

grant create table,create session,create view to student_role

/

grant student_role to scott

/

revoke create view from student_role

/

角色的某個權限被收回的時候,被授予該角色的用戶的該權限也相應被收回;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM