Global outage event
If you’re experiencing issues with your AWS services, then please refer to the AWS Health Dashboard. You can find the overall status of ongoing outages, the health of AWS services, and the latest updates from AWS engineers.
如何管理 Amazon RDS for Oracle 資料庫執行個體中的使用者權限和角色?
我想管理 Amazon Relational Database Service (Amazon RDS) 上適用於 Oracle 資料庫執行個體的使用者權限和角色。
簡短描述
由於 Amazon RDS 是一項受管服務,因此預設不能使用 SYS 和 SYSTEM 使用者。
如需 Amazon RDS for Oracle 資料庫授予主使用者的角色和權限清單,請參閱主使用者帳戶權限。如需 Amazon RDS for Oracle 資料庫未授予資料庫管理員 (DBA) 角色的權限清單,請參閱 Oracle DBA 權限的限制。
解決方法
**注意:**在以下區段中,將 EXAMPLE-USERNAME 替換為您要授予權限或撤銷權限的使用者名稱。
授予權限
若要授予對 SYS 物件的權限,請使用 rdsadmin.rdsadmin_util.grant_sys_object Amazon RDS 程序。此程序只會授予主使用者已擁有的權限。
若要授予使用者對 V_$SQLAREA 物件的 SELECT 權限,請以 RDS 主使用者登入。然後,執行以下命令:
EXECUTE rdsadmin.rdsadmin_util.grant_sys_object( p_obj_name => 'V_$SQLAREA',p_grantee => 'EXAMPLE-USERNAME', p_privilege => 'SELECT');
若要使用 grant 選項授予使用者對 V_$SQLAREA 物件的 SELECT 權限,請執行下列命令:
EXECUTE rdsadmin.rdsadmin_util.grant_sys_object( p_obj_name => 'V_$SQLAREA',p_grantee => 'EXAMPLE-USERNAME', p_privilege => 'SELECT', p_grant_option => true);
**注意:**除非您使用區分大小寫的識別碼建立使用者,否則請使用大寫字母定義所有參數值。
若要將 SELECT_CATALOG_ROLE 和 EXECUTE_CATALOG_ROLE 角色授予具有 admin 選項的使用者,請執行下列命令:
SQL> GRANT SELECT_CATALOG_ROLE TO EXAMPLE-USERNAME WITH ADMIN OPTION; SQL> GRANT EXECUTE_CATALOG_ROLE TO EXAMPLE-USERNAME WITH ADMIN OPTION;
然後,使用者可以授予與 SELECT_CATALOG_ROLE 和 EXECUTE_CATALOG_ROLE 角色相同的 SYS 物件存取權。
若要查看與 SELECT_CATALOG_ROLE 關聯的授權,請執行下列命令:
SELECT type, owner, table_name, privilege, grantor, grantable FROM dba_tab_privs WHERE grantee = upper('SELECT_CATALOG_ROLE') UNION SELECT 'SYS' AS type, NULL as owner, NULL as table_name, privilege, NULL, admin_option AS grantable FROM dba_sys_privs WHERE grantee = upper('SELECT_CATALOG_ROLE') UNION SELECT 'ROLE' AS type, NULL AS owner, NULL AS table_name, granted_role AS privilege, NULL, admin_option AS grantable FROM dba_role_privs WHERE grantee = upper('SELECT_CATALOG_ROLE') ORDER BY type, owner, table_name, privilege;
如需詳細資訊,請參閱授予 SYS 物件 SELECT 或 EXECUTE 權限。
若要撤銷單一物件的權限,請使用 rdsadmin.rdsadmin_util.revoke_sys_object RDS 程序。
若要撤銷使用者對 V_$SQLAREA 的 SELECT 權限,請執行下列命令:
EXECUTE rdsadmin.rdsadmin_util.revoke_sys_object( p_obj_name => 'V_$SQLAREA', p_revokee => 'EXAMPLE-USERNAME', p_privilege => 'SELECT');
如需詳細資訊,請參閱撤銷 SYS 物件的 SELECT 或 EXECUTE 權限。
重設主使用者權限
如果您已撤銷主使用者的角色和權限,則可以將其重設。如需詳細資訊,請參閱如何重設 Amazon RDS 資料庫執行個體的管理員使用者密碼?
授予主使用者 RDS_MASTER_ROLE
您無法將 RDS_MASTER_ROLE 角色授予非主使用者。建立資料庫執行個體時,SYS 預設會建立 RDS_MASTER_ROLE。您只能授予主使用者 RDS_MASTER_ROLE。若要列出您已授予 RDS_MASTER_ROLE 權限的使用者,請執行下列命令:
SQL> SELECT * FROM sys.dba_role_privs WHERE granted_role = 'RDS_MASTER_ROLE';
輸出範例:
GRANTEE GRANTED_ROLE ADM DEL DEF COM INH-------- --------------- --- --- --- --- --- MASTER RDS_MASTER_ROLE NO NO YES NO NO SYS RDS_MASTER_ROLE YES NO YES YES YES
由於主使用者沒有管理員選項,因此您無法將 RDS_MASTER_ROLE 授予任何其他使用者。如需詳細資訊,請參閱向非主使用者授予權限。
撤銷關鍵 DBMS_* 和 UTL_* 套件的 PUBLIC 角色權限
撤銷關鍵 DBMS_* 和 UTL_* 套件的 PUBLIC 角色權限並不是最佳實務,因為多個 Oracle 應用程式依賴這些權限。關鍵的 DBMS_* 和 UTL_* 套件包括 UTL_TCP、UTL_HTTP、HTTPURITYPE、UTL_INADDR、UTL_SMTP、DBMS_LDAP、DBMS_LOB、UTL_FILE、DBMS_ADVISOR、DBMS_OBFUSCATION_TOOLKIT、DBMS_BACKUP_RESTORE,以及 DBMS_SYS_SQL。
解決使用密碼建立角色時出現的 "invalid schema" (無效結構描述) 錯誤
例如,您使用 rdsadmin_util.grant_sys_object 建立包含密碼的角色,並在下列命令中授予權限:
SQL> CREATE ROLE ROLE_NAME IDENTIFIED BY EXAMPLE-PASSWORD; SQL> EXEC rdsadmin.rdsadmin_util.grant_sys_object('DBMS_JOB', 'ROLE_NAME');
在命令的輸出中,您會收到以下錯誤:
"ORA-20199: Error in rdsadmin_util.grant_sys_object.ORA-44001: invalid schema
ORA-06512: at \"RDSADMIN.RDSADMIN_UTIL", line 268
ORA-44001: invalid schema"
若要解決此問題,請執行以下命令以建立不包密碼的角色:
SQL> ALTER ROLE ROLE_NAME NOT IDENTIFIED;
解決 "ORA-01031: insufficient privileges" (ORA-01031:權限不足) 錯誤
以下是可能導致 ORA-01031 錯誤的範例案例。
您執行 ALTER SYSTEM SET 命令
執行以下命令時出現 ORA-01031 錯誤:
SQL> ALTER SYSTEM SET processes=200 scope=spfile;
您無法變更預設資料庫參數群組中的參數值。改為修改自訂資料庫參數群組中的參數值。
您使用資料庫觸發程序,並且對底層資料表結構的變更導致觸發程序狀態變為「無效」
下次事件釋放觸發程序時,觸發程序的隱式編譯將失敗,並出現以下錯誤:
"ORA-04045: errors during recompilation/revalidation of SCOTT.ERROR_LOG_TRIGORA-01031: insufficient privileges"
若要解決此問題,請執行下列命令,明確授予觸發程序擁有者管理資料庫觸發程序權限,以便擁有者可以修改資料庫觸發程序:
SQL> GRANT ADMINISTER DATABASE TRIGGER TO example-owner; SQL> ALTER TRIGGER example-owner.log_errors_trig COMPILE;
預期輸出:
Trigger altered.
您執行預存程序
您會收到 "ORA-01031" 錯誤,是因為在以定義者權限執行的具名預存程序中,無法使用從角色取得的權限。改用您從 SQL Plus 和匿名 PL/SQL 區塊中的角色所獲得的權限。
以下預存程序會失敗,因為使用者使用具名預存程序中的角色權限來建立資料表。然後使用者刪除該資料表,並嘗試使用預存程序建立相同的資料表:
SQL> CREATE USER EXAMPLE-USERNAME IDENTIFIED BY EXAMPLE-PASSWORD; SQL> GRANT connect, resource TO EXAMPLE-USERNAME SQL> CREATE TABLE dept (deptno NUMBER, deptname VARCHAR2(30)); Table DEPT created.SQL> DROP table DEPT; SQL> CREATE OR REPLACE PROCEDURE test_proc AS BEGIN EXECUTE IMMEDIATE 'CREATE TABLE DEPT (DeptNo number, DeptName varchar2(30))'; END; / Procedure TEST_PROC created SQL> EXEC TEST_PROC
輸出顯示以下錯誤:
"Error report -ORA-01031: insufficient privileges"
若要解決此問題,請以主使用者身分連線,然後執行以下命令授予 CREATE TABLE 權限:
SQL> GRANT CREATE TABLE TO test_user;
執行以下命令來執行預存程序:
SQL> EXEC TEST_PROC
預期輸出:
PL/SQL procedure successfully completed.
您沒有使用授權選項授予主使用者權限
當您沒有使用物件的授予選項授予主使用者權限時,就會出現 "ORA-04043" 錯誤。
以下範例授權程序會失敗,因為主使用者不具備 DBA_TABLESPACE_USAGE_METRICS 物件上的 SELECT 權限 (含授權選項):
SQL> SHOW USER; USER is \"EXAMPLE-USERNAME\" SQL> SELECT * FROM SYS.DBA_TABLESPACE_USAGE_METRICS;
輸出顯示 "ERROR: ORA-04043: object "SYS"."DBA_TABLESPACE_USAGE_METRICS" does not exist" 錯誤訊息。
當主使用者嘗試向其他使用者授予對 DBA_TABLESPACE_USAGE_METRICS 物件的 SELECT 權限時,主使用者會收到 "ORA-01031: insufficient privileges" (ORA-01031:權限不足) 錯誤。
若要解決此問題,請執行下列命令,使用 grant option 明確授予主使用者 SELECT 權限:
SQL> EXECUTE rdsadmin.rdsadmin_util.grant_sys_object( p_obj_name => 'DBA_TABLESPACE_USAGE_METRICS', p_grantee => 'ADMIN', p_privilege => 'SELECT', p_grant_option => true); SQL> GRANT SELECT ON SYS.DBA_TABLESPACE_USAGE_METRICS to EXAMPLE-USERNAME;
授予 SELECT 權限後,主使用者即可成功執行 SELECT 命令:
SQL> SELECT * FROM SYS.DBA_TABLESPACE_USAGE_METRICS;
相關資訊
在 Oracle 網站上設定權限和角色授權
相關內容
- 已提問 3 年前
- 已提問 4 個月前
- 已提問 2 年前

