茫茫網海中的冷日 - 對這文章發表回應
茫茫網海中的冷日
         
茫茫網海中的冷日
發生過的事,不可能遺忘,只是想不起來而已!
 恭喜您是本站第 1670905 位訪客!  登入  | 註冊
主選單

Google 自訂搜尋

Goole 廣告

隨機相片
HoneyMoon_Day3_00001.jpg

授權條款

使用者登入
使用者名稱:

密碼:


忘了密碼?

現在就註冊!

對這文章發表回應

發表限制: 非會員 可以發表

發表者: 冷日 發表時間: 2018/12/12 4:36:40
詳解oracle用戶創建(create user)(上)

用戶能訪問數據庫前必須要有獲得相應授權的賬號,oracle中創建一個用戶並為其分配密碼很簡單,但是在創建用戶的同時其實還可以指定很多該用戶的屬性,另外還有用戶的特權授予。以便用戶去執行相應的操作。當創建了一個的同時也創建了一個通的shema,shema與用戶是一一對應的關係。shema是數據庫對象的邏輯容器。
在創建用戶的過程中可以指定的用戶屬性有:
1、認證方式
2、認證密碼
3、默認的永久表空間,臨時表空間
4、表空間配額
5、用戶賬號狀態(locked or unlocked)
6、密碼狀態(expired or not)
語法格式:
create user username
identified by password;

你可以創建僅供運用程序使用的賬戶,用於運用程序連接數據庫,沒人可以使用該賬戶登錄到數據庫。

oracle會根據你創建數據庫時候的配置自動的創建預置賬戶:
所有的數據庫都包括管理賬戶:
sys 默認密碼:chang_on_install
system 默認密碼:manager
sysman 默認密碼:chang_on_install
dbsnmp 默認密碼:dbsnmp
其實並不是所有的數據庫都包括,你若在使用dbca創建數據庫的是,不勾選 confiure enterprise manager sysman與dbsnmp就不會有了。
如果安裝的時候要求安裝了sample schema,還會多出一些預置賬戶其中常用的有:
hr 默認密碼:hr
scott 默認密碼:TIGER

所有的數據都包含有內部賬戶(internal accounts),這些自動創建的用戶,使得特別的oracle特性或者組件擁有他們自己的schema。為保證這些賬戶被未經授權的使用,這些賬戶是lock的,密碼設置為expire。
SQL> create user oracleusr     //用戶名:oracleuser
  2  identified by oracle      //登陸驗證密碼:oracle (密碼是大小寫敏感的)
  3  default tablespace users  //用戶的默認表空間:users
  4  quota 10m on users        //默認表空間中可以使用的空間配額:10MB
  5  temporary tablespace temp //用戶使用的臨時表空間
  6  password expire;          //密碼狀態,過期。登陸的時候要求用戶修改。
User created

用戶創建過程中的注意事項:
1、對temporary tablespace不能指定配額。
2、如果沒有為用戶指定默認表空間,將使用system表空間,強烈建議指定默認表空間。
3、默認表空間不能是undo tablespace或者temporary tablespace。
4、如果沒有為用戶指定默認表空間,臨時表空間,用戶將使用system表空作為默認表空間與臨時表空,強烈避免出現此種狀況。

可以查詢數據字典dba_users查詢用戶的信息
下面查詢上面創建的用戶的部分信息。
SQL> select username,user_id,account_status,default_tablespace,temporary_tablespace
  2  from dba_users
  3  where username='ORACLEUSR';

USERNAME                          USER_ID ACCOUNT_STATUS                   DEFAULT_TABLESPACE             TEMPORARY_TABLESPACE
------------------------------ ---------- -------------------------------- ------------------------------ ------------------------------
ORACLEUSR                              70 EXPIRED                          USERS                          TEMP

註:dba_users中的password列已經在oracle11gR2中棄用了,取而代之的是authentication_type列。

修改用戶的密碼:
語法格式:
alter user user_name identified by new_password;

SQL> alter user system identified by oracle11g;
User altered
SQL> alter user oracleusr identified by oracle11g;
User altered

要注意了,oracle中給用戶修改密碼的時候是不需要,輸入舊密碼的。這是一個安全隱患。任何用戶可以給自己修改密碼,但是要修改別人的密碼需要取得相應的權限。

詳解oracle用戶創建(create user)(中)
更改用戶的密碼:
除了使用alter user命令修改用戶的密碼以後,可以在sql*plus中使用password關鍵字修改密碼。
SQL> conn hr/hr
已連接。
SQL> password
更改 HR 的口令
舊口令:
新口令:
重新鍵入新口令:
口令已更改
SQL> conn system as sysdba
輸入口令:
已連接。
SQL> password scott   //DBA可以使用password+username修改其他用戶的密碼。
更改 scott 的口令
新口令:
重新鍵入新口令:
口令已更改

在pl/sql等其他工具中該命令是無法使用的。

給用戶授予create session特權,以創建會話:
SQL> conn system as sysdba
輸入口令:
已連接。
SQL> grant create session to oracleusr;
授權成功。
SQL> conn oracleusr
輸入口令:
已連接。

這樣用戶就可以創建會話登錄到oracle數據庫中了.

鎖定用戶賬號,當用戶登錄的時候會報ORA-28000的錯誤:
SQL> alter user oracleusr account lock;
用戶已更改。
SQL> conn oracleusr
輸入口令:
ERROR:
ORA-28000: 帳戶已被鎖定


設置用戶密碼的狀態:
密碼過期以後用戶登錄的時候會提示修改密碼,並報ORA-28001錯誤。
SQL> alter user oracleusr password expire;
用戶已更改。
SQL> conn oracleusr
輸入口令:
ERROR:
ORA-28001: 口令已經失效
更改 oracleusr 的口令
新口令:
重新鍵入新口令:
口令已更改
已連接。


刪除用戶賬戶:
SQL> create user testuser identified by oracle11g;
用戶已創建。
SQL> drop user testuser;
用戶已刪除。

請謹慎刪除用戶,刪除用戶的同時用戶對應的schema中的對象也將被刪除.

用戶信息的查詢:
很多時候只靠查詢dba_users數據字典,用戶的相關信息還可以查詢:
dba_ts_quotas查詢用戶所在永久表空的配額等信息。
其實數據庫中的很多用戶都不需要磁盤配額,因為他們只需要其他schema中對象的訪問與操作特權。
SQL> select tablespace_name,bytes,max_bytes
  2  from dba_ts_quotas
  3  where username='ORACLEUSR';

TABLESPACE_NAME                     BYTES  MAX_BYTES
------------------------------ ---------- ----------
USERS                                   0   10485760

database_properties查詢有關默認臨時表空間,永久表空間的設置情況。
max_bytes如果值是-1表示在對應的表空間中的磁盤配額是unlimited。

關於profile:
profile用於設置一系列的數據庫資源使用限制。把profile分配給用戶,用戶的資源使用被設置在profile的限制之內。使用create profile 創建profile.使用create user或alter user給用戶分配profile.

profile中的限制又分為兩種:
resource_parameters:
sessions_per_user:指定用戶並發的會話數。
cpu_per_session:以百分之一秒為單位,指定用戶的CPU佔用時間。
cpu_per_call:以百分之一秒,指定一次調用的的CPU佔用時間。
connect_time:以分為單位,指定會話的持續時間。
idle_time:以分為單位,指定會話的空閒時間。
logical_reads_per_session:指定允許的logical reads 塊數量。
logical_reads_per_call:指定一次調用允許的logical reads塊數量。
private_sga:一個會話在SGA共享池中分配的私有會話空間的大小。
該參數只有在共享服務器模式下才有效。
composite_limit:以服務單元指定一個會話總的資源開銷。oracle會根據cpu_per_session,
connect_time,logical_reads_per_session,private_sga的加權值來計算service units。
SQL> create profile new_profile1 limit  //profile名稱new_profile1
  2  sessions_per_user  5               //用戶的同時並發會話數5
  3  cpu_per_session   unlimited        //會話的CPU佔用時間無限制
  4  cpu_per_call 6000                  //一次調用不能佔用CPU的時間不能超過60秒
  5  connect_time 60                    //單個會話持續的時間不能超過60分鐘
  6  logical_reads_per_session 1500     //單個會話所能允許的邏輯讀塊數:1500
  7  logical_reads_per_call default     //一次調用的所能允許的邏輯讀塊數使用默認值
  8  private_sga 10k                    //單個會話可以佔用的sga的內存空間:10kb
  9  composite_limit 5000000;           //復合資源限制的數量500萬服務單元。
配置文件已創建

此處沒有指定idle_time,password_parameters的參數,所有點那個把new_profile1分配給用戶的時候,這些限制將使用default profile中的默認值。

給用戶分配profile:
SQL> alter user oracleusr profile new_profile1;
用戶已更改。

如果用戶在創建的時候不指定profile,oracle會自動把default profile分配給用戶.

password_parameters:
failed_login_attempts:用戶賬戶被鎖定前,用戶登錄的嘗試次數,默認值是10次。
password_life_time:指定密碼過期的時間,默認值是180天。
password_reuse_time:當前密碼可以重用以前必須經過的時間間隔。
password_reuse_max:當前密碼可以被重用前需要修改的次數。
以上兩個參數需要一同使用。
password_lock_time:當超過failed_login_attempts指定的值時,賬戶被鎖定的天數。默認是一天。
password_grace_time:在password_life_time到期以後寬限用戶使用原密碼登錄的天數
如果,在password_grace_time指定的天數內,舊密碼仍有效,但是會提高用戶更改密碼。默認是7天。
password_verify_function:指定密碼複雜度驗證的PL/SQL函數,或第三方運用程序。不使用
密碼驗證函數,password_verify_function設置為null。
SQL>  create profile new_profile2 limit
  2   failed_login_attempts 3
  3   password_life_time 90
  4   password_reuse_time 180
  5   password_reuse_max 3
  6   password_verify_function null
  7   password_lock_time 1
  8   password_grace_time 5;
配置文件已創建
SQL> alter user oracleusr profile new_profile2;
用戶已更改。

注意此時前面分配給用戶的new_profile1就被new_profile2取代了。
在new_profile中未指定的resource_parameters會自動使用default profile中的默認值。
所有應該把所有的資源限制寫在同一個profile中。

補充上節內容:
上節中提到了oracle的預置賬戶:sys,system
sys與system都具有很高的權限,都被授予了dba角色。但是sys的權限要高於system,sys用戶可以執行system用戶無法執行的:數據庫升級、數據庫備份與恢復。system用戶主要用於執行數據庫的日常管理工作。
註:數據庫中數據庫字典包含的所有的基表與視圖都存儲在sys schema中。這些基表與視圖對數據庫的運行十分的關鍵,為了保證數據字典的完整性,在sys schema中的基表只能被數據庫操作。system schema額外的用於數據庫管理的表與視圖。

詳解oracle用戶創建(create user)(下)

用戶創建完成以後,如果不授予一定的特權,什麼也做不了,包括登錄到數據庫與數據庫建立會話。簡單的創建一個用戶,授予登錄的密碼很簡單,但是要創建符合實際要求的用戶,比較複雜一些,用戶的創建涉及到表空間的選擇與空間配額,profile,權限的授予,賬戶的安全等方面。
特權的授予是用戶創建過程中一個很重要的組成部分,關係到用戶能否有足夠的權限去完成所要做的工作,又確保用戶的權限不會過高,濫用特權, 成為一個安全問題。

oracle中的特權分為兩種:
系統特權(system privilege):允許用戶執行某種操作,該操作會影響數據字典。影響整個數據庫。
對像特權(object privilege):允許用戶執行某種操作,該操作影響的是schema中的數據。
常用的系統特權有:
create session
restricted session
alter database
alter system
create tablespace
create table
create any table
drop any table
insert any table
update any table
delete any table
select any table
grant any object privilege

系統特權授予與回收的語法格式:
grant systemprivilege [, systemprivilege, …]
to username|rolename [, username|rolename, …]
[with admin option];

revoke systemprivilege [,… systemprivilege]
from username|rolename;

用戶oracleusr只擁有create session特權,下面我們在給他授予create any table 特權。
SQL> grant create any table to oracleusr;
Grant succeeded
SQL> conn oracleusr
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0
Connected as oracleusr@ORACL
SQL> create table testtable (id char(5),name varchar2(20));
Table created
SQL> alter table testtable modify (name varchar2(15));
Table altered
SQL> insert into testtable values('00001','smith');
1 row inserted
SQL> update testtable
  2  set name='jone'
  3  where id='00001';
1 row updated
SQL> select * from testtable;
ID    NAME
----- --------------------
00001 jone
SQL> delete from testtable;
1 row deleted
SQL> create index testtable_id_idx on testtable(id);
Index created
SQL> drop index testtable_id_idx;
Index dropped
SQL> drop table testtable;
Table dropped

從上面的演示可以看出一個create any table 特權的權限範圍真大,可以允許執行很多操作。
SQL> create table hr.test (id char(5),name varchar2(20));
Table created
SQL> drop table hr.test;
drop table hr.test
ORA-01031: 權限不足
SQL> insert into hr.test values('00001','smith');
insert into hr.test values('00001','smith')
ORA-01031: 權限不足
SQL> select * from hr.test;
select * from hr.test
ORA-01031: 權限不足

在別的模式中特權的範圍又是不同了,所有在授權的時候,務必清楚的一點是,用戶權限的需求與對特權的瞭解。就像上面一個簡單的create any table 並不簡單。

給oracleusr增加select any table 特權.
SQL> grant select any table to oracleusr;
Grant succeeded
SQL> conn oracleusr
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0
Connected as oracleusr@ORACL
SQL> select first_name,last_name
  2  from hr.employees
  3  where employee_id='100';
FIRST_NAME           LAST_NAME
-------------------- -------------------------
Steven               King

查看hr中的表。ok。
SQL> select * from sys.dba_users;
select * from sys.dba_users
ORA-00942: 表或視圖不存在

但是sys模式下的表不行了,oracle對select any table 做了一定的限制,保護sys模式中的信息。

從上面的兩個特權create any table,select any table 可以見識到帶any特權的威力,所以在授予特權以前必須對特權有足夠的瞭解。對帶any的特權要小心授予。可以依據授予某個用戶的系統特權可以查詢dba_sys_privs數據字典。
SQL> select * from dba_sys_privs
  2  where grantee='ORACLEUSR';
GRANTEE                        PRIVILEGE                                ADMIN_OPTION
------------------------------ ---------------------------------------- ------------
ORACLEUSR                      SELECT ANY TABLE                         NO
ORACLEUSR                      CREATE SESSION                           NO
ORACLEUSR											 CREATE ANY TABLE                         NO
SQL> grant create tablespace to oracleusr with admin option;
Grant succeeded

with admin option 可使用戶將相應的系統特權再授予別人。並且在revoke的時候相應的系統特權是不會級聯收回的.
SQL> conn oracleusr
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0
Connected as oracleusr@ORACL AS SYSDBA
SQL> grant create tablespace to hr;
Grant succeeded

SQL> select * from dba_sys_privs
  2  where grantee='ORACLEUSR';

GRANTEE                        PRIVILEGE                                ADMIN_OPTION
------------------------------ ---------------------------------------- ------------
ORACLEUSR                      SELECT ANY TABLE                         NO
ORACLEUSR                      CREATE TABLESPACE                        YES
ORACLEUSR                      CREATE SESSION                           NO
ORACLEUSR                      CREATE ANY TABLE                         NO

從查詢中可以看出create tablespace 的admin_option項是yes的.
SQL> revoke create tablespace from oracleusr;
Revoke succeeded
SQL> select * from dba_sys_privs
  2  where grantee='ORACLEUSR';
GRANTEE                        PRIVILEGE                                ADMIN_OPTION
------------------------------ ---------------------------------------- ------------
ORACLEUSR                      SELECT ANY TABLE                         NO
ORACLEUSR                      CREATE SESSION                           NO
ORACLEUSR                      CREATE ANY TABLE                         NO

create tablespace特權被回收了。
SQL> select * from dba_sys_privs
  2  where grantee='HR';
GRANTEE                        PRIVILEGE                                ADMIN_OPTION
------------------------------ ---------------------------------------- ------------
HR                             CREATE VIEW                              NO
HR                             UNLIMITED TABLESPACE                     NO
HR                             CREATE DATABASE LINK                     NO
HR                             CREATE SEQUENCE                          NO
HR                             CREATE TABLESPACE                        NO
HR                             CREATE SESSION                           NO
HR                             ALTER SESSION                            NO
HR                             CREATE SYNONYM                           NO

由oracleusr授予hr的create tablespace特權並沒有被級聯收回.

對像特權授予的語法格式:
grant {objectprivilege|all} [(columnname),
objectprivilege (columnname)]
on objectname
to {username|rolename|public}
[with grant option];
all:關鍵字表示所有的對象特權.
On:後面接對像名.
with grant option:與with admin option類似,用戶可以把對獲得的相應對像特權授予其他用戶。
revoke objectprivilege [,… objectprivilege]
on objectname
from username|rolename;

常用對像特權:
select:允許展現表,視圖,序列的信息,還包括使用nextval產生下一個序列值。
insert:允許用戶對表,視圖進行插入操作。
update:允許用戶更新表,視圖中的數據。
delete:允許用戶刪除一個表或者視圖。
index:允許用戶創建一個索引。
alter:允許用戶修改表或者序列的定義。
references:在創建一個外鍵約束的時候,允許用戶參照一張表。該特權只能授予用戶,不能授予角色。
execute:允許用戶執行一個存儲函數或者過程.
SQL> revoke select any table from oracleusr;
Revoke succeeded
SQL> grant select on hr.employees to oracleusr with grant option;
Grant succeeded

在回收oracleusr在hr的表employees上的select權限的時候,oracleusr授予oracle11g的相同的權限也被一起回收了,這一點不同於with admin option。
SQL> conn oracleusr
輸入口令:
已連接。
SQL> select count(*) from hr.employees;
  COUNT(*)
----------
       107
SQL> grant select on hr.employees to oracle11g;
授權成功。
SQL> conn oracle11g
輸入口令:
已連接。
SQL> select count(*) from hr.employees;
  COUNT(*)
----------
       107
SQL> conn system as sysdba
輸入口令:
已連接。
SQL> revoke select on hr.employees from oracleusr;
撤銷成功。

SQL> conn oracleusr
輸入口令:
已連接。
SQL> select count(*) from hr.employees;
select count(*) from hr.employees
                        *
第 1 行出現錯誤:
ORA-01031: 權限不足
SQL> conn oracle11g
輸入口令:
已連接。
SQL> select count(*) from hr.employees;
select count(*) from hr.employees
                      *
第 1 行出現錯誤:
ORA-00942: 表或視圖不存在

oracle11g從oracleusr中獲得的對象特權被級聯回收了。

另外在權限的授予中角色(role)很重要,一般不直接給用戶授予特權,而是想將需要的特權授予角色,然後將角色分配給用戶。
角色:就是一組特權的代表。
角色相關的語法格式:
創建角色:
create role rolename;

分配與回收角色:
grant rolename [, rolename]
to username [, username];
revoke rolename
from username|rolename;

刪除角色;
drop role rolename;



原文出處:详解oracle用户创建(create user)(上)_ITPUB博客
內容圖示
url email imgsrc image code quote
樣本
bold italic underline linethrough   












 [詳情...]
validation picture

注意事項:
預覽不需輸入認證碼,僅真正發送文章時才會檢查驗證碼。
認證碼有效期10分鐘,若輸入資料超過10分鐘,請您備份內容後,重新整理本頁並貼回您的內容,再輸入驗證碼送出。

選項

Powered by XOOPS 2.0 © 2001-2008 The XOOPS Project|