Oracle資料庫使用者安全策略功能介紹

chenoracle發表於2023-03-04

一:如何建立使用者
二:為使用者指定profile配置檔案
三:修改SYS使用者密碼注意事項
四:Oracle資料庫內建密碼保護是什麼
五:如何查詢具有預設密碼的使用者帳戶
六:在預設配置檔案Profile中配置密碼設定
七:透過保護資料字典來限制系統許可權
八:常用審計

一:如何建立使用者

指定密碼、預設表空間、表空間限額、臨時表空間、PROFILE等。

Example 2-1 Creating a User Account with the CREATE SESSION Privilege

CREATE USER jward
 IDENTIFIED BY password
 DEFAULT TABLESPACE data_ts
 QUOTA 100M ON test_ts
 QUOTA 500K ON data_ts
 TEMPORARY TABLESPACE temp_ts
 PROFILE clerk;
GRANT CREATE SESSION TO jward;

使用者連線資料庫必要許可權,CREATE SESSION。

使用者訪問 Oracle Enterprise Manager,必要許可權SELECT ANY DICTIONARY。

使用者名稱都是以大寫儲存在資料庫中

SELECT USERNAME FROM ALL_USERS;
USERNAME
---------
JWARD

但是,如果將使用者名稱括在雙引號中,則使用名稱的大小寫區分來儲存該名稱。例如:

CREATE USER "jward" IDENTIFIED BY password;
SELECT USERNAME FROM ALL_USERS;
USERNAME
---------
jward
...

二:為使用者指定profile配置檔案

您可以在建立使用者時指定配置檔案。

配置檔案是對資料庫資源和密碼訪問資料庫的一組限制。

如果未指定配置檔案,則Oracle資料庫將為使用者分配預設配置檔案。

建立PROFILE配置檔案示例:

/**建立resource相關資源限制profile**/

CREATE PROFILE clerk LIMIT 
   SESSIONS_PER_USER          UNLIMITED 
   CPU_PER_SESSION            UNLIMITED 
   CPU_PER_CALL               3000 
   CONNECT_TIME               45 
   LOGICAL_READS_PER_SESSION  DEFAULT 
   LOGICAL_READS_PER_CALL     1000 
   PRIVATE_SGA                15K
   COMPOSITE_LIMIT            5000000;

建立了一個名為“clerk”的profile,並進行了如下限制:

1.對當前使用者下會話的併發數不做限制;
2.執行sql時佔用的cpu時間不做限制;
3.執行單條sql佔用的cpu時間限制不超過30秒;
4.每個連線最長使用時間為45分鐘;
5.每個會話中能夠進行的邏輯資料塊讀使用預設值;
6.每次呼叫sql能夠讀取記憶體和磁碟中的資料塊不超過1000個;
7.每個會話不能佔用超過15KB的SGA空間;
8.每個會話的總資源消耗成本不能超過500萬;
沒有對連線空閒時間和密碼進行限制,oracle將會使用預設profile進行限制。

檢視每個使用者會話的記憶體使用情況:

要查詢每個使用者會話的記憶體使用情況,請查詢V$SSESSION檢視。

以下查詢列出了所有當前會話,顯示了每個會話的Oracle資料庫使用者和當前使用者全域性區域(UGA)記憶體使用情況:

SELECT USERNAME, VALUE || 'bytes' "Current UGA memory"
   FROM V$SESSION sess, V$SESSTAT stat, V$STATNAME name
WHERE sess.SID = stat.SID
   AND stat.STATISTIC# = name.STATISTIC#
   AND name.NAME = 'session uga memory';

三:修改SYS使用者密碼注意事項

如果必須更改SYS使用者密碼,則應使用ORAPWD命令列實用程式建立包含要使用的密碼的新密碼檔案。

不要使用ALTER USER語句或PASSWORD命令更改SYS使用者密碼。

注意以下事項:

SYS使用者帳戶被大多數內部遞迴SQL使用。

因此,如果您試圖在資料庫開啟時使用ALTER USER語句更改此密碼,則可能會導致死鎖。

如果嘗試使用ALTER USER更改SYS使用者密碼,

並且例項初始化引數REMOTE_LOGIN_PASSWORDFILE已設定為SHARED,則無法更改SYS密碼。

ALTER USER語句失敗,出現ORA-28046:SYS密碼更改不允許錯誤。

Example 2-3 Using ORAPWD to Change the SYS User Password

orapwd file='orapworcl'
Enter password for SYS: new_password

四:Oracle資料庫內建密碼保護是什麼?

Oracle資料庫提供了一組內建密碼保護,旨在保護使用者的密碼。這些密碼保護如下:

1.密碼加密

Oracle資料庫在網路(客戶端到伺服器和伺服器到伺服器)連線期間使用高 級加密標準(AES)自動透明地加密密碼,然後再透過網路傳送。

2.密碼複雜性檢查

在預設安裝中,Oracle資料庫提供verify_function_11g密碼驗證功能,以確保新密碼或更改後的密碼足夠複雜,

以防止入侵者透過猜測密碼試圖闖入系統。

您必須手動啟用密碼複雜性檢查。

您可以進一步自定義使用者密碼的複雜性。

3.防止密碼被破壞

如果使用者嘗試使用錯誤的密碼多次登入Oracle資料庫,Oracle資料庫會延遲每次登入。

此保護適用於從不同IP地址或多個客戶端連線進行的嘗試。

之後,它會逐漸增加使用者嘗試另一個密碼的時間,最長約為10秒。

如果使用者輸入了正確的密碼,他或她就能成功登入,而不會有任何延遲。

此功能顯著減少了入侵者在嘗試登入時可以在固定時間段內嘗試的密碼數量。

失敗的登入延遲會減慢每次失敗的登入嘗試,從而增加執行密碼猜測攻擊所需的總時間,因為此類攻擊通常需要非常多的失敗登入嘗試。

4.密碼強制區分大小寫

密碼區分大小寫。

例如,如果將密碼hPP5620qr輸入為hPP5620qr或hPP5620qr,則該密碼將失敗。

在以前的版本中,密碼不區分大小寫。

5.使用安全雜湊演算法(SHA)加密雜湊函式SHA-1雜湊的密碼。

Oracle資料庫使用SHA-1驗證器來驗證使用者密碼並建立使用者會話。

此外,它強制區分大小寫,並將密碼限制為160位。

使用SHA-1驗證器的優點是,它通常由Oracle資料庫客戶使用,並在不強制網路升級的情況下提供更好的安全性。

它還遵守法規,要求使用強密碼,並透過適當的強密碼雜湊演算法進行保護。

五:如何查詢具有預設密碼的使用者帳戶

當您在Oracle database 11g Release 2(11.2)中建立資料庫時,它的大多數預設帳戶都被鎖定,密碼過期。

如果您已從早期版本的Oracle資料庫升級,則您的使用者帳戶可能具有預設密碼。

這些是在建立資料庫時建立的預設帳戶,例如HR、OE和SCOTT帳戶。

為了提高安全性,請更改這些帳戶的密碼。

使用眾所周知的預設密碼可能會使您的資料庫容易受到入侵者的攻擊。

要查詢使用預設密碼的鎖定和未鎖定帳戶,請使用SYSDBA許可權登入SQL*Plus,然後查詢DBA_USERS_WITH_DEFPWD資料字典檢視。

例如,要查詢具有預設密碼的帳戶的名稱和帳戶的狀態:

SELECT d.username, u.account_status
FROM DBA_USERS_WITH_DEFPWD d, DBA_USERS u
WHERE d.username = u.username
ORDER BY 2,1;
USERNAME  ACCOUNT_STATUS
--------- ---------------------------
SCOTT     EXPIRED & LOCKED

然後更改DBA_USERS_WITH_DEFPWD檢視列出的任何帳戶的密碼。

Oracle建議您不要為這些帳戶分配以前版本的Oracle資料庫中可能有的密碼。

ALTER USER SCOTT ACCOUNT UNLOCK IDENTIFIED BY password;

六:在預設配置檔案Profile中配置密碼設定

概要檔案是設定資料庫資源限制的引數集合。

如果將配置檔案分配給使用者,則該使用者不能超過這些限制。

您可以使用配置檔案來配置資料庫設定,例如每個使用者的會話、日誌記錄和跟蹤功能等。

配置檔案還可以控制使用者密碼。

要查詢有關配置檔案中當前密碼設定的資訊,可以查詢DBA_PROFILES資料字典檢視。

列出了預設配置檔案中特定於密碼的引數設定。

引數1:

名稱:FAILED_LOGIN_ATTEMPTS

預設值:10

描述:

設定使用者在鎖定帳戶之前嘗試登入和失敗的最 大次數。

注意:

1.設定此引數時,請考慮使用CONNECT THROUGH許可權登入的使用者。

2.透過使用SEC_MAX_FAILED_LOGIN_ATTEMPTS 初始化引數,可以設定未授權使用者(可能是入侵者)嘗試登入Oracle呼叫介面(OCI)應用程式的次數限制。

引數2:

名稱:PASSWORD_GRACE_TIME

預設值:7

描述:

設定密碼過期前使用者必須更改密碼的天數。

引數3:

名稱:PASSWORD_LIFE_TIME

預設值:180

描述:設定使用者可以使用其當前密碼的天數。

引數4:

名稱:PASSWORD_LOCK_TIME

預設值:1

描述:

設定在指定的連續失敗登入嘗試次數之後,帳戶將被鎖定的天數。

過了一段時間後,帳戶就會解鎖。

此使用者配置檔案引數有助於防止對使用者密碼的暴力攻擊,但不會增加管理員的維護負擔。

引數5:

名稱:PASSWORD_REUSE_MAX

預設值:UNLIMITED

描述:設定重新使用當前密碼之前所需的密碼更改次數。

引數6:

名稱:PASSWORD_REUSE_TIME

預設值:UNLIMITED

描述:

設定密碼不能重複使用的天數。

可以修改預設配置,例如:

建立:

CREATE PROFILE prof LIMIT
 FAILED_LOGIN_ATTEMPTS 10
 PASSWORD_LOCK_TIME 30;
ALTER USER johndoe PROFILE prof;

修改:

ALTER PROFILE prof LIMIT
 FAILED_LOGIN_ATTEMPTS 9
 PASSWORD_LOCK_TIME 10;

圖3-1密碼生命週期和寬限期的時間順序

Description of Figure 3-1 follows

七:透過保護資料字典來限制系統許可權


要保護資料字典,請將O7_DICTIONARY_ACCESSIBILITY 初始化引數設定為FALSE,這是預設值。此功能稱為字典保護機制。

O7_DICTIONARY_ACCESSIBILITY初始化引數控制從Oracle Database 7版升級到Oracle8i及更高版本時對系統許可權的限制。

如果引數設定為TRUE,則允許訪問SYS模式中的物件(Oracle資料庫版本7的行為)。

由於ANY許可權適用於資料字典,因此具有ANY許可權的惡意使用者可以訪問或更改資料字典表。

要設定O7_DICTIONARY_ACCESSIBITY初始化引數,請在initSID.ora檔案中修改它。

或者,您可以以具有SYSDBA許可權的使用者SYS身份登入到SQL*Plus,然後輸入ALTER SYSTEM語句,

假設您已使用伺服器引數檔案(SPFILE)啟動資料庫。

例如:

ALTER SYSTEM SET O7_DICTIONARY_ACCESSIBILITY=FALSE SCOPE=SPFILE;

八:常用審計

使用以下資料字典檢視查詢有關使用者訪問資料庫的資訊。

DBA_*
DBA_ROLES
DBA_SYS_PRIVS
DBA_ROLE_PRIVS
DBA_TAB_PRIVS
DBA_AUDIT_TRAIL (if standard auditing is enabled)
DBA_FGA_AUDIT_TRAIL (if fine-grained auditing is enabled)

監視僅向需要這些許可權的使用者和角色授予以下許可權。

預設情況下,Oracle資料庫稽核以下許可權:

ALTER SYSTEM
AUDIT SYSTEM
CREATE EXTERNAL JOB

Oracle建議稽核以下許可權:

ALL PRIVILEGES (which includes privileges such as BECOME USER, CREATE LIBRARY, and CREATE PROCEDURE)
DBMS_BACKUP_RESTORE package
EXECUTE to DBMS_SYS_SQL
SELECT ANY TABLE
SELECT on PERFSTAT.STATS$SQLTEXT
SELECT on PERFSTAT.STATS$SQL_SUMMARY
SELECT on SYS.SOURCE$
Privileges that have the WITH ADMIN clause
Privileges that have the WITH GRANT clause
Privileges that have the CREATE keyword

建議的稽核設定

資料庫架構或結構更改。使用以下AUDIT語句設定:

AUDIT ALTER ANY PROCEDURE BY ACCESS;
AUDIT ALTER ANY TABLE BY ACCESS;
AUDIT ALTER DATABASE BY ACCESS;
AUDIT ALTER SYSTEM BY ACCESS;
AUDIT CREATE ANY EDITION;
AUDIT CREATE ANY JOB BY ACCESS;
AUDIT CREATE ANY LIBRARY BY ACCESS;
AUDIT CREATE ANY PROCEDURE BY ACCESS;
AUDIT CREATE ANY TABLE BY ACCESS;
AUDIT CREATE EXTERNAL JOB BY ACCESS;
AUDIT DROP ANY EDITION;
AUDIT DROP ANY PROCEDURE BY ACCESS;
AUDIT DROP ANY TABLE BY ACCESS;

資料庫訪問和許可權。使用以下AUDIT語句設定:

AUDIT ALTER PROFILE BY ACCESS;
AUDIT ALTER USER BY ACCESS;
AUDIT AUDIT SYSTEM BY ACCESS;
AUDIT CREATE PUBLIC DATABASE LINK BY ACCESS;
AUDIT CREATE SESSION BY ACCESS;
AUDIT CREATE USER BY ACCESS;
AUDIT DROP PROFILE BY ACCESS;
AUDIT DROP USER BY ACCESS;
AUDIT EXEMPT ACCESS POLICY BY ACCESS;
AUDIT GRANT ANY OBJECT PRIVILEGE BY ACCESS;
AUDIT GRANT ANY PRIVILEGE BY ACCESS;
AUDIT GRANT ANY ROLE BY ACCESS;
AUDIT ROLE BY ACCESS;

參考:

Home / Database / Oracle Database Online Documentation 11g, Release 2 (11.2) / Database Administration
Database Security Guide

###chenjuchao 20230304###

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

相關文章