oracle 12c 使用as sysdba方式登入資料庫後的Schema變化

snowdba發表於2015-01-30

該實驗參考12官方文件手冊中的Current Schema When Connecting As SYSDBA

當使用者被賦予sysdba許可權後,使用  as sysdba方式登入資料庫會進入SYS schema,而不是該使用者的schema。甚至無法看到剛剛建立的表,需要制定該使用者的schema。處於SYS schema狀態下建立表也會建立到SYSTEM表空間下。

1,建立一個使用者snow,賦予connect,resource,sysdba許可權並指定users為預設表空間。

create user snow identified by snow default tablespace users;
grant connect,resource,sysdba to snow;

conn snow/snow
create table snow_test1(name varchar2(10));

select owner,table_name,tablespace_name from dba_tables where table_name='SNOW_TEST1';

OWNER                TABLE_NAME           TABLESPACE_NAME
-------------------- -------------------- --------------------
SNOW                 SNOW_TEST1           USERS

2,snow使用者使用sysdba方式登入,由於現在處於sys schema下,看不到剛剛建立的表了
conn snow as sysdba
Enter password:

select * from snow_test1;
select * from snow_test1
              *
ERROR at line 1:
ORA-00942: table or view does not exist

3,重新建立一個使用者lily,使用 as sysdba方式建立表,看看會建立到users表空間還是system表空間?
conn / as sysdba
create user lily identified by lily;

grant sysdba to lily;

只有sysdba,沒有connect也是無法建立session的

conn lily/lily
ERROR:
ORA-01045: user LILY lacks CREATE SESSION privilege; logon denied

Warning: You are no longer connected to ORACLE.
@ >conn / as sysdba
Connected.

grant connect,resource to lily;

注意此次登入時沒有指定as sysdba,和登入時指定as sysdba是不同的
conn lily/lily

create table lily_test1(name varchar2(10));

conn lily/lily as sysdba

select * from lily_test1;
select * from lily_test1
              *
ERROR at line 1:
ORA-00942: table or view does not exist


select * from lily.lily_test1;

no rows selected

SYS@OCM12C >select owner,table_name,tablespace_name from dba_tables where table_name='LILY_TEST1';       

OWNER                TABLE_NAME           TABLESPACE_NAME
-------------------- -------------------- --------------------
LILY                 LILY_TEST1           USERS


注意:如果使用conn lily/lily as sysdba登入資料庫後建立表,會建立在system表空間下

conn lily/lily as sysdba
create table lily_test1(name varchar2(10));
select owner,table_name,tablespace_name from dba_tables where table_name='LILY_TEST1'; 

OWNER                TABLE_NAME           TABLESPACE_NAME
-------------------- -------------------- --------------------
SYS                  LILY_TEST1           SYSTEM

SYSDBA屬於管理許可權,有別於其他許可權。在顯示賦予使用者時,該資訊被記錄在密碼檔案中,在試圖v$pwfile_users中可以檢視到該設定。
如果在密碼檔案中ENTRIES引數設定的太小,導致新使用者想要賦予SYSDBA使用者時會報錯,可以透過重建密碼檔案並且適當擴大ENTRIES來解決。

SYS@OCM12C >select * from v$pwfile_users;

USERNAME   SYSDB SYSOP SYSAS SYSBA SYSDG SYSKM     CON_ID
---------- ----- ----- ----- ----- ----- ----- ----------
SYS        TRUE  TRUE  FALSE FALSE FALSE FALSE          0
SYSDG      FALSE FALSE FALSE FALSE TRUE  FALSE          0
SYSBACKUP  FALSE FALSE FALSE TRUE  FALSE FALSE          0
SYSKM      FALSE FALSE FALSE FALSE FALSE TRUE           0
SNOW       TRUE  FALSE FALSE FALSE FALSE FALSE          0
LILY       TRUE  FALSE FALSE FALSE FALSE FALSE          0
TOME       TRUE  TRUE  FALSE FALSE FALSE FALSE          0

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29047826/viewspace-1421210/,如需轉載,請註明出處,否則將追究法律責任。

相關文章