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

Google 自訂搜尋

Goole 廣告

隨機相片
IMG_0098.jpg

授權條款

使用者登入
使用者名稱:

密碼:


忘了密碼?

現在就註冊!

DB研討會 : [轉貼]Oracle 創建用戶、角色、授權、建表

發表者 討論內容
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15766
[轉貼]Oracle 創建用戶、角色、授權、建表
Oracle創建用戶、角色、授權、建表

oracle數據庫的權限系統分為系統權限與對像權限。系統權限( database system privilege )可以讓用戶執行特定的命令集。例如,create table權限允許用戶創建表,grant any privilege 權限允許用戶授予任何系統權限。對像權限( database object privilege )可以讓用戶能夠對各個對象進行某些操作。例如delete權限允許用戶刪除表或視圖的行,select權限允許用戶通過select從表、視圖、序列(sequences)或快照(snapshots)中查詢信息。

每個oracle用戶都有一個名字和口令,並擁有一些由其創建的表、視圖和其他資源。oracle角色(role)就是一組權限(privilege)(或者是每個用戶根據其狀態和條件所需的訪問類型)。用戶可以給角色授予或賦予指定的權限,然後將角色賦給相應的用戶。一個用戶也可以直接給其他用戶授權。

一、創建用戶

oracle內部有兩個建好的用戶:system和sys。用戶可直接登錄到system用戶以創建其他用戶,因為system具有創建別 的用戶的 權限。 在安裝oracle時,用戶或系統管理員首先可以為自己建立一個用戶。

語法[創建用戶]: create user 用戶名 identified by 口令[即密碼];

例子:
create user test identified by test;


語法[更改用戶]: alter user 用戶名 identified by 口令[改變的口令];

例子:
alter user test identified by 123456;


二、刪除用戶

語法:drop user 用戶名;

例子:
drop user test;


若用戶擁有對象,則不能直接刪除,否則將返回一個錯誤值。指定關鍵字cascade,可刪除用戶所有的對象,然後再刪除用戶。

語法: drop user 用戶名 cascade;

例子:
drop user test cascade;


三、授權角色

oracle為兼容以前版本,提供三種標準角色(role):connect/resource和dba.

(1)講解三種標準角色:

1》. connect role(連接角色)

--臨時用戶,特指不需要建表的用戶,通常只賦予他們connect role.

--connect是使用oracle簡單權限,這種權限只對其他用戶的表有訪問權限,包括select/insert/update和delete等。

--擁有connect role 的用戶還能夠創建表、視圖、序列(sequence)、簇(cluster)、同義詞(synonym)、回話(session)和其他 數據的鏈(link)

2》. resource role(資源角色)

--更可靠和正式的數據庫用戶可以授予resource role。

--resource提供給用戶另外的權限以創建他們自己的表、序列、過程(procedure)、觸發器(trigger)、索引(index)和簇(cluster)。

3》. dba role(數據庫管理員角色)

--dba role擁有所有的系統權限

--包括無限制的空間限額和給其他用戶授予各種權限的能力。system由dba用戶擁有

(2)授權命令

語法: grant connect, resource to 用戶名;

例子:
grant connect, resource to test;


(3)撤銷權限

語法: revoke connect, resource from 用戶名;

列子:
revoke connect, resource from test;


四、創建/授權/刪除角色

除了前面講到的三種系統角色----connect、resource和dba,用戶還可以在oracle創建自己的role。用戶創建的role可以由表或系統權限或兩者的組合構成。為了創建role,用戶必須具有create role系統權限。

1》創建角色

語法: create role 角色名;

例子:
create role testRole;


2》授權角色

語法: grant select on class to 角色名;

列子:
grant select on class to testRole;


註:現在,擁有testRole角色的所有用戶都具有對class表的select查詢權限

3》刪除角色

語法: drop role 角色名;

例子:
drop role testRole;


註:與testRole角色相關的權限將從數據庫全部刪除

原文出處:Oracle创建用户、角色、授权、建表 - 罗小川的博客 - 博客园
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15766
[轉貼]詳解 oracle 用戶創建(create user)
詳解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博客
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15766
[轉貼]Oracle 用戶、對象權限、系統權限

Oracle 用戶、對象權限、系統權限


--================================
--Oracle 用戶、對象權限、系統權限
--================================

一、用戶與模式
    用戶:對數據庫的訪問,需要以適當用戶身份通過驗證,並具有相關權限來完成一系列動作
       SYS用戶,缺省始終創建,且未被鎖定,擁有數據字典及其關聯的所有對象
       SYSTEM用戶,缺省始終創建,且未被鎖定,可以訪問數據庫內的所有對象
    模式(schema):是某個用戶擁有所有對象的集合。具有創建對象權限並創建了對象的用戶稱爲擁有某個模式

    注意:創建數據庫對象(視圖,表等)的任一用戶都擁有一個以該用戶名稱開頭的模式,且被視爲模式用戶

二、創建及修改用戶
    條件:需要具有創建用戶的權限,如sys,system,sysdba,dba role等
   語法:
       CREATE USER user
        IDENTIFIED {BY password | EXTERNALLY | GLOBALLY AS external name }
       [DEFAULT TABLESPACE tablespace_name]
       [TEMPORARY TABLESPACE tablespace_name]

       [QUOTA {n {[K|M] | UNLIMITED } ON tablespace_name
        QUOTA {n {[k|M] | UNLIMITED } ON tablespace_name ... ]
       [PASSWORD EXPIRE]
       [ACCOUNT { LOCK | UNLOCK }]
       [PROFILE { profile_name | DEFAULT }]

    eg:
    CREATE USER  robinson IDENTIFIED BY  tiger;

        --省略了DEFAULT TABLESPACE和TEMPORARY TABLESPACE 時,則由database_properties中對應的參數確定
       SQL> SELECT property_name,property_value FROM database_properties WHERE property_name LIKE 'DEFAULT%';

       PROPERTY_NAME                  PROPERTY_VALUE
       ------------------------------ --------------------------------------------------

       DEFAULT_TEMP_TABLESPACE        TEMP
       DEFAULT_PERMANENT_TABLESPACE   USERS
       DEFAULT_TBS_TYPE               SMALLFILE

        更多關於表空間的請參考:Oracle 表空間與數據文件  
    1.修改用戶
        修改用戶的語法同創建用戶,僅僅講關鍵字create替換爲alter,alter user可以修改除用戶名之外的任一屬性
       ALTER USER robinson ACCOUNT LOCK;

    2.修改密碼
       DBA 可以創建用戶和修改密碼
       用戶本人可以使用ALTER USER 語句修改密碼
       SQL> ALTER robinson  IDENTIFIED BY  newpassword;

    3.刪除用戶:
       DROP USER username [CASCADE]

       CASECADE 連同用戶創建的對象一併刪除,如果該用戶創建了對象,要加CASCADE刪除,否則刪除不掉

       另外,不能刪除當前正在與ORACLE服務器相連的用戶。

    4.改變用戶在表空間上的配額:
       ALTER USER username  QUOTA 0 ON system;
       ALTER USER scott QUOTA UNLIMITED ON USERS;
       ALTER USER dog QUOTA 30M ON system;

    5.查看用戶表空間配額(dba_ts_quotas):
       SQL> SELECT USERNAME,TABLESPACE_NAME,MAX_BYTES/1024/1024 "Max MB"  
         2  FROM dba_ts_quotas WHERE USERNAME='SCOTT';

       USERNAME              TABLESPACE_NAME           Max MB
       ------------------------------ --------------------------
       SCOTT                 SYSTEM                     30


    6.查看特定對象下用戶所擁有的對象
       使用dba_objects視圖
       SQL> SELECT owner,object_name, object_type FROM dba_objects WHERE owner= 'SCOTT';

三、ORACLE權限:
    系統權限: 允許用戶執行特定的數據庫動作,如創建表、創建索引、連接實例等
    對象權限: 允許用戶操縱一些特定的對象,如讀取視圖,可更新某些列、執行存儲過程等

    1.系統權限
       超過一百多種有效的權限(SELECT * FROM SYSTEM_PRIVILEGE_MAP查)
       數據庫管理員具有高級權限以完成管理任務,例如:
           C創建新用戶
           C刪除用戶
           C刪除表
           C備份表
       
a.常用的系統權限:
       CREATE SESSION                     創建會話

       CREATE SEQUENCE                    創建序列
       CREATE SYNONYM                     創建同名對象
       CREATE TABLE                       在用戶模式中創建表
       CREATE ANY TABLE                   在任何模式中創建表
       DROP TABLE                         在用戶模式中刪除表
       DROP ANY TABLE                     在任何模式中刪除表
       CREATE PROCEDURE                   創建存儲過程
       EXECUTE ANY PROCEDURE              執行任何模式的存儲過程

       CREATE USER                        創建用戶
       DROP USER                          刪除用戶
       CREATE VIEW                        創建視圖


    b.授予用戶系統權限
       GRANT privilege [, privilege...] TO user [, user| role, PUBLIC...]
       [WITH ADMIN OPTION];

       PUBLIC     所有用戶
       WITH ADMIN OPTION 使用戶同樣具有分配權限的權利,可將此權限授予別人
   
           SQL> GRANT CREATE SESSION,CREATE TABLE,CREATE USER TO scott;
           SQL> GRANT EXECUTE ANY PROCEDURE TO scott WITH ADMIN OPTION;

           SQL> CONN scott;    --scott具有WITH ADMIN OPTION,故可以將EXECUTE ANY PROCEDURE授予robinson
           Enter password:
           Connected.
           SQL> GRANT EXECUTE ANY PROCEDURE TO robinson;
       
           Grant succeeded.
           SQL> GRANT EXECUTE ANY PROCEDURE TO PUBLIC; --將EXECUTE ANY PROCEDURE授予所有用戶

           Grant succeeded.
           SQL> CONN system/redhat;  --使用system爲robinson授予CREATE TABLE、CREATE SESSION權限
           Connected.
           SQL> GRANT CREATE TABLE,CREATE SESSION  TO robinson;

           Grant succeeded.

   
    c.使用系統權限
        --使用robinson具有創建會話、創建表
           SQL> CREATE TABLE tb1 AS SELECT * FROM USER_TABLES; --下面提示沒有權限在users表空間創建對象
           CREATE TABLE tb1 AS SELECT * FROM USER_TABLES
                                         *
           ERROR at line 1:
           ORA-01950: no privileges on tablespace 'USERS'
       
           SQL> CONN sys as sysdba;  --使用sys帳戶登陸併爲robinson在users表空間指定配額後可以創建表tb1
           Enter password:
           Connected.
           SQL> ALTER USER robinson QUOTA 10M ON USERS;


           User altered.

           SQL> CONN robinson/lion;
           Connected.
           SQL> CREATE TABLE tb1 AS SELECT * FROM USER_TABLES;

           Table created.

    d.查看系統權限
        dba_sys_privs  --針對所有用戶被授予的系統權限
        user_sys_privs --針對當前登陸用戶被授予的系統權限
   
           SQL> SELECT grantee,privilege,admin_option FROM dba_sys_privs
             2  WHERE grantee IN ('SCOTT','ROBINSON')
             3  ORDER BY grantee;


           GRANTEE                        PRIVILEGE                                ADM
           ------------------------------ ---------------------------------------- ---
           ROBINSON                       CREATE SESSION                           NO
           ROBINSON                       CREATE TABLE                             NO

           ROBINSON                       EXECUTE ANY PROCEDURE                    NO
           SCOTT                          CREATE PUBLIC SYNONYM                    NO
           SCOTT                          CREATE SESSION                           NO
           SCOTT                          CREATE SYNONYM                           NO

           SCOTT                          CREATE TABLE                             NO
           SCOTT                          CREATE USER                              NO
           SCOTT                          CREATE VIEW                              NO
           SCOTT                          EXECUTE ANY PROCEDURE                    YES

           SCOTT                          UNLIMITED TABLESPACE                     NO
   
    e.回收系統權限
      REVOKE {privilege | role} FROM {user_name | role_name | PUBLIC}
       
           --下面的示例中並沒有回收掉原來由scott授予給robisnon EXECUTE ANY PROCEDURE 的權限
           SQL> REVOKE EXECUTE ANY PROCEDURE FROM scott;

           Revoke succeeded.

           SQL> select grantee,privilege,admin_option from dba_sys_privs
             2  where grantee in ('SCOTT','ROBINSON')  and privilege = 'EXECUTE ANY PROCEDURE'
             3  order by grantee;


           GRANTEE                        PRIVILEGE                                ADM
           ------------------------------ ---------------------------------------- ---
           ROBINSON                       EXECUTE ANY PROCEDURE                    NO

       注意:對於使用with admin option 爲某個用戶授予系統權限,那麼對於被這個用戶授予相同權限的所有
           用戶來說,取消該用戶的系統權限並不會級聯取消這些用戶的相同權限

    2.對象權限
       不同的對象具有不同的對象權限
       對象的擁有者擁有所有權限
       對象的擁有者可以向外分配權限
       ORACLE一共有種對象權限


       對象權限         表   視圖   序列   過程
       修改(alter)         √            √
       刪除(delete)        √    √
       執行(execute)                             √
       索引(index)         √
       插入(insert)        √    √
       關聯(references)    √    √
       選擇(select)        √    √      √
       更新(update)        √    √

    a.對象授權

       GRANT object_priv|ALL [(columns)]
       ON object
       TO {user|role|PUBLIC}
       [WITH GRANT OPTION];

       ALL:所有對象權限
       PUBLIC:授給所有的用戶
       WITH GRANT OPTION:允許用戶再次給其它用戶授權

    b.授予系統權限與授予對象權限的語法差異:
       授予對象權限時需要指定關鍵字ON,從而能夠確定權限所應用的對象。對於表和視圖可以指定特定的列來授權。
   
    --對象授權示例
       SQL> SHOW USER;
       USER is "SCOTT"
       SQL> GRANT SELECT ON emp TO robinson;

       Grant succeeded.
   
       SQL> GRANT UPDATE(sal,mgr) ON emp TO robinson WITH GRANT OPTION;

       Grant succeeded.


    --新創建一個用戶john,使用robinson賬戶授予更新scott.emp(sal,mgr)的權限
       SQL> CREATE USER john IDENTIFIED BY john;

       User created.

       SQL> GRANT CREATE SESSION TO john;

       Grant succeeded.
   
       SQL> CONN ROBINSON/LION
       Connected.
       SQL> GRANT UPDATE(sal,mgr) ON scott.emp TO john;   --授予scott.emp(sal,mgr)的更新權限

       Grant succeeded.
   
       SQL> UPDATE scott.emp SET sal = sal + 100 WHERE ename = 'SCOTT';  --成功更新

       1 row updated.

    --向數據庫中所有用戶分配權限
       SQL> GRANT SELECT ON dept TO PUBLIC;

        Grant succeeded.

    c.查詢權限分配情況

    數據字典視圖          描述
    ROLE_SYS_PRIVS            角色擁有的系統權限
    ROLE_TAB_PRIVS            角色擁有的對象權限

    USER_TAB_PRIVS_MADE      查詢授出去的對象權限(通常是屬主自己查)
    USER_TAB_PRIVS_RECD      用戶擁有的對象權限

    USER_COL_PRIVS_MADE      用戶分配出去的列的對象權限
    USER_COL_PRIVS_RECD      用戶擁有的關於列的對象權限

    USER_SYS_PRIVS            用戶擁有的系統權限
    USER_TAB_PRIVS            用戶擁有的對象權限
    USER_ROLE_PRIVS       用戶擁有的角色
   
    --查詢已授予的對象權限(即某個用戶對哪些表對哪些用戶開放了對象權限)
        SQL> SELECT * FROM user_tab_privs_made; --下面是scott用戶開放的對象權限


       GRANTEE              TABLE_NAME               GRANTOR                   PRIVILEGE            GRA HIE
       -------------------- ------------------------ ------------------------- -------------------- --- ---
       PUBLIC               DEPT                     SCOTT                     SELECT               NO  NO
       ROBINSON             EMP                      SCOTT                     SELECT               NO  NO

   
    --查詢列上開放的對象權限
       SQL> SELECT * FROM user_col_privs_made;

       GRANTEE              TABLE_NAME           COLUMN_NAME          GRANTOR        PRIVILEGE            GRA
       -------------------- -------------------- --------------------- -------------- -------------------- ---
       ROBINSON             EMP                  SAL                   SCOTT          UPDATE               YES

       JOHN                 EMP                  MGR                   ROBINSON       UPDATE               NO
       ROBINSON             EMP                  MGR                   SCOTT          UPDATE               YES
       JOHN                 EMP                  SAL                   ROBINSON       UPDATE               NO

    --查詢已接受的對象特權(即某個用戶被授予了哪些表上的哪些對象特權)

       SQL> SELECT * FROM user_tab_privs_recd;

       OWNER                TABLE_NAME           GRANTOR                        PRIVILEGE            GRA HIE
       -------------------- -------------------- ------------------------------ -------------------- --- ---
       SCOTT                EMP                  SCOTT                          SELECT               NO  NO

    --查詢用戶已接受列的對象權限
       SQL> SELECT * FROM user_col_privs_recd;


       OWNER                TABLE_NAME         COLUMN_NAME      GRANTOR              PRIVILEGE            GRA
       -------------------- ------------------ ---------------- -------------------- -------------------- ---
       SCOTT                EMP                MGR              SCOTT                UPDATE               YES

       SCOTT                EMP                SAL              SCOTT                UPDATE               YES
   
    d.收回對象權限
       使用REVOKE 語句收回權限
       使用WITH GRANT OPTION 子句所分配的權限同樣被收回

       REVOKE {privilege [, privilege...]|ALL}
       ON object
       FROM   {user[, user...]|role|PUBLIC}
       [CASCADE CONSTRAINTS];

       CASCADE CONSTRAINTS 爲處理引用完整性時需要

       --收回權限示例  
       SQL> conn scott/tiger;
       Connected.
       SQL> REVOKE SELECT ON emp FROM robinson;


       Revoke succeeded.

       SQL> REVOKE UPDATE(sal,mgr) ON emp FROM robinson; --注意此處的提示revoke的是整個表,而非列
       REVOKE UPDATE(sal,mgr) ON emp FROM robinson
                   *
       ERROR at line 1:
       ORA-01750: UPDATE/REFERENCES may only be REVOKEd from the whole table, not by column


       SQL> REVOKE UPDATE ON emp FROM robinson;

       Revoke succeeded.

       --用戶robinson的update 權限被revoke,曾級聯賦予john的權限也被收回,
       --如下提示表、視圖不存在,user_col_privs_recd中無記錄
       SQL> CONN john/john;
       Connected.
       SQL> UPDATE scott.emp SET sal = sal - 100 WHERE ename = 'SCOTT';

       UPDATE scott.emp SET sal = sal - 100 WHERE ename = 'SCOTT'
                   *
       ERROR at line 1:
       ORA-00942: table or view does not exist

       SQL> SELECT * FROM user_col_privs_recd;

       no rows selected

    注意:如果取消某個用戶的對象權限,對於該用戶使用with grant option授予其它用戶相同權限來說,
       將級聯刪除這些用戶權限

    e.其它
       檢查DBA權限的用戶
           select * from dba_role_privs where granted_role='DBA';

       查看用戶具有的系統權限:
           SELECT * FROM session_privs;

四、總結
    1.使用create user語句創建用戶,alter user語句修改用戶,其語法大致相同

        drop user username [CASCADE] 會刪除用戶所擁有的所有對象及數據
    2.系統權限允許用戶在數據庫中執行特定的操作,如執行DDL語句。
        with admin option 使得該用戶具有將自身獲得的權限授予其它用戶的功能
       但收回系統權限時,不會從其它帳戶級聯取消曾被授予的相同權限
    3.對象權限允許用戶對數據庫對象執行特定的操作,如執行DML語句。
        with grant option 使得該用戶具有將自身獲得的對象權限授予其它用戶的功能
       但收回對象權限時,會從其它帳戶級聯取消曾被授予的相同權限
    4.系統權限與對象權限授予時的語法差異爲對象權限使用了ON object_name 子句
    5. PUBLIC 爲所有的用戶
    6. ALL:對象權限中的所有對象權限
原文出處:技術隨手記: Oracle 用戶、對象權限、系統權限
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15766
[轉貼]oracle 用戶(sysdba)遠程登錄和口令認證

【ORACLE】oracle 用戶(sysdba)遠程登錄和口令認證

Oracle 作者: dmcatding 時間:2017-03-09 16:39:20
sys(sysdba用戶組成員)用戶有兩種認證方式:
1、操作系統認證方式
在本地服務器(數據庫所在服務器)登錄數據庫
oracle將用戶認證由操作系統在數據庫外執行,默認情況下只需要以oracle賬戶登錄操作系統便可以直接連接數據庫,不需要口令。
如果需要口令認證,需要在$ORACLE_HOME/dbs/sqlnet.ora,加入如下行:
SQLNET.AUTHENTICATION_SERVICES=NONE
此時連接數據庫就需要輸入用戶和密碼了
2、數據庫認證方式
通過在數據庫配置文件裡(spfile)裡配置REMOTE_LOGIN_PASSWORDFILE指定遠程登錄訪問數據庫的方式
a、none
Oracle ignores any password file. Therefore, privileged users must be authenticated by the operating system
不允許sysdba用戶組成員遠程登錄訪問數據庫
b、exclusive

The password file can be used by only one database. The password file can contain SYS as well as non-SYS users.
只允許口令文件用於本數據庫,允許sysdba用戶組成員遠程登錄訪問數據庫
c、shared
One or more databases can use the password file. The password file can contain SYS as well as non-SYS users.
允許其他數據庫使用該口令文件,允許sysdba用戶組成員遠程登錄訪問數據庫


sqlplus 連接遠程數據庫失敗:
C:\Users\Administrator>sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 - Production on 星期三 11月 2 16:32:13 2011
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
SQL> conn sys/oracle@192.168.11.11/zjcsc as sysdba
ERROR:
ORA-01017: invalid username/password; logon denied


檢查遠程登錄設置,發現配置remote_login_passwordfile=NONE禁止sysdba用戶(及擁有其角色的普通用戶)遠程登錄。
SQL> show parameter pass
NAME         TYPE  VALUE
------------------------------------ ----------- ------------------------------
remote_login_passwordfile      string  NONE
修改配置remote_login_passwordfile=exclusive(這是個靜態參數要修改spfile文件),sysdba用戶(及擁有其角色的普通用戶)可以遠程登錄。
SQL> alter system set remote_login_passwordfile=exclusive scope=spfile;
System altered.
重啟數據庫
SQL> startup force;
ORACLE instance started.
Total System Global Area 3758096384 bytes
Fixed Size      2088408 bytes
Variable Size   1593836072 bytes

Database Buffers  2147483648 bytes
Redo Buffers     14688256 bytes
Database mounted.
Database opened.
檢查配置參數修改成功
SQL> show parameter pass
NAME         TYPE  VALUE
------------------------------------ ----------- ------------------------------
remote_login_passwordfile      string  EXCLUSIVE
重置sys用戶密碼
SQL> alter user sys identified by oracle;
sqlplus連接測試成功,EM也能夠成功登錄:
C:\Users\Administrator>sqlplus /nolog
conn sys/oracle@192.168.11.11/zjcsc as sysdba



轉載
comebackdog博客
原文出處: 【ORACLE】oracle 用户(sysdba)远程登录和口令认证_ITPUB博客
前一個主題 | 下一個主題 | 頁首 | | |



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