Oracle 12c DG管理-分離SYS特權使用者

xfhuangfu發表於2021-02-10

Oracle 資料庫日常運維中的對於使用者的管理,我們堅持合理授權,安全第一,許可權最小,按需授予,責任分離的原則進行合理授權。基於安全考慮大多使用者在不影響現有生產環境的前提下回收了非必要的 SYS 特權,本文主要介紹使用非 sys 使用者進行 DG 管理。我們使用 12c SYSDG 角色和設定 REDO_TRANSPORT_USER 引數可以實現 SYS 特權使用者的分離。


在建立 Oracle12c 資料庫時,為了方便資料庫管理員的分工,會自動建立如下使用者 :SYSBACKUP SYSDG SYSKM

SYSDG 便於資料保護操作。使用者可以使用 Data Guard Broker DGMGRL 命令列介面執行操作。

      SYSDG 使用者,具有 SYSDG 管理員許可權,可以執行 Data Guard 操作。

您可以在 Data Guard Broker DGMGRL 命令列介面上使用此特權。為了使用密碼以 SYSDG 的身份連線資料庫,您必須為它建立一個密碼檔案。不能將 SYSYSDG 管理員許可權授予建立時沒有身份驗證的使用者。

SYSDG 許可權可以執行以下操作 :

·          STARTUP

·          SHUTDOWN

·          ALTER DATABASE

·          ALTER SESSION

·          ALTER SYSTEM

·          CREATE RESTORE POINT (including GUARANTEED restore points)

·          CREATE SESSION

·          DROP RESTORE POINT (including GUARANTEED restore points)

·          FLASHBACK DATABASE

·          SELECT ANY DICTIONARY

·          SELECT

·          X$ tables (that is, the fixed tables)

·          V$ and GV$ views (that is, the dynamic performance views)

·          APPQOSSYS.WLM_CLASSIFIER_PLAN

·          DELETE

·          APPQOSSYS.WLM_CLASSIFIER_PLAN

·          EXECUTE

·          SYS.DBMS_DRS

 

透過設定REDO_TRANSPORT_USER引數調整DG同步使用者。 REDO_TRANSPORT_USER 指定當遠端登入密碼檔案用於重做傳輸身份驗證時,使用其密碼驗證器的使用者名稱。該使用者必須具有 SYSOPER 許可權,並且在啟動重做傳輸會話的資料庫和重做傳輸會話的目標資料庫中必須具有相同的密碼

該引數值區分大小寫,必須與 V$PWFILE_USERS 檢視中 USERNAME 列的值完全匹配。該行的 SYSOPER 列的值也必須為 TRUE

如果未指定此引數,則當使用遠端登入密碼檔案進行重做傳輸身份驗證時,將使用 SYS 使用者的密碼驗證器。

以下是實施步驟:

1、 確認資料庫版本
SQL> select BANNER from v$version;
 
BANNER
----------------------------------------------------------------------
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
PL/SQL Release 12.2.0.1.0 - Production
CORE      12.2.0.1.0        Production
TNS for Linux: Version 12.2.0.1.0 - Production
NLSRTL Version 12.2.0.1.0 – Production
SQL> select name,cdb from v$database;
NAME        CDB
--------- ---
CDB122     YES
2、 在主庫新建DG維護使用者。
12c多租戶環境下DG是基於CDB的搭建並進行管理的,所以這裡我們建立公共使用者。
SQL> create user c##dgadmin identified by Oracle_123
  2  password expire; 
 
User created.
SQL> col username for a20
SQL> col account_status for a20
SQL> col common for a20
SQL> col con_id for 99999
SQL> select USERNAME,ACCOUNT_STATUS,COMMON,CON_ID from cdb_users where username='C##DGADMIN';
USERNAME   ACCOUNT_STATUS           COMMON    CON_ID
--------------- -------------------- ---------- -------
C##DGADMIN     EXPIRED             YES             1
C##DGADMIN     EXPIRED             YES             3
 
3、 給使用者授權
SQL> grant sysoper,sysdg,connect to C##DGADMIN;
Grant succeeded.
4、 確認v$pwfile_users
在主庫執行以下語句,確保C##DGADMIN的SYSDG和SYSOPER為true。
SQL> select username,sysdba,sysoper,sysdg from v$pwfile_users;
USERNAME          SYSDBA         SYSOPER           SYSDG
-------------------- -------------------- -------------------- ----------
SYS               TRUE              TRUE                 FALSE
SYSDG                 FALSE            FALSE               TRUE
SYSBACKUP         FALSE            FALSE               FALSE
SYSKM                 FALSE            FALSE               FALSE
C##DGADMIN            FALSE            TRUE                 TRUE
SQL>
5、 確認主庫口令檔案位置
srvctl config database -db cdb122
Password file: +data/cdb122/orapwdcdb122
6、 將主庫的密碼檔案複製到備庫
主庫:
su -grid
asmcmd
ASMCMD>cp +data/cdb122/orapwdcdb122 /home/grid
 
以grid使用者將密碼檔案從主庫傳輸到備庫
scp orapwdcdb122 grid@stdb:/home/grid
備庫:
asmcmd
ASMCMD>cp  /home/grid/orapwdcdb122 +data/stdbcdb122/orapwdcdb122
 
7、 確認密碼檔案是否生效
在主庫執行以下語句,確保C##DGADMIN的SYSDG和SYSOPER為true。
SQL> select username,sysdba,sysoper,sysdg from v$pwfile_users;
 
USERNAME          SYSDBA         SYSOPER           SYSDG
-------------------- -------------------- -------------------- --------------------
SYS               TRUE              TRUE                 FALSE
SYSDG                 FALSE            FALSE               TRUE
SYSBACKUP         FALSE            FALSE               FALSE
SYSKM                 FALSE            FALSE               FALSE
C##DGADMIN            FALSE            TRUE                 TRUE
8、修改REDO_TRANSPORT_USER引數
主庫
SQL>sqlplus / as sysdba
SQL>alter system set redo_transport_user= C##DGADMIN scope=both;
備庫
SQL>sqlplus / as sysdba
SQL>alter system set redo_transport_user= C##DGADMIN scope=both;
8、 重啟mrp程式
備庫:
SQL>alter database recover managed standby database cancel;
SQL>shutdown immediate
sqlplus C##DGADMIN/Oracle_123 as sysdg
SQL>startup
SQL>alter database recover managed standby database using current logfile disconnect from session;
主庫:
切歸檔
SQL>alter system archive log current;
 
檢查歸檔日誌是否應用
SQL> select NAME,THREAD#,SEQUENCE#,REGISTRAR,APPLIED,COMPLETION_TIME from v$archived_log where name is not null and COMPLETION_TIME>sysdate-3 order by 6,3;
 
-The end-


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

相關文章