

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 將 SELECT 或 EXECUTE 權限授予 SYS 物件
<a name="Appendix.Oracle.CommonDBATasks.TransferPrivileges"></a>

您通常可以使用角色來傳輸權限，角色中可能包含許多物件。若要授予權限給單一物件，請使用 Amazon RDS 程序 `rdsadmin.rdsadmin_util.grant_sys_object`。該程序只會授予主要使用者透過角色或直接授予所取得的權限。

`grant_sys_object` 程序具有下列參數。

**重要**  
針對所有參數值，除非您已使用區分大小寫的識別符來建立使用者，否則請使用大寫字母。例如，如果您執行 `CREATE USER myuser` 或 `CREATE USER MYUSER`，資料字典會存放 `MYUSER`。不過，如果您在 `CREATE USER "MyUser"` 中使用雙引號，資料字典則會存放 `MyUser`。


****  

| 參數名稱 | 資料類型 | 預設 | 必要 | 描述 | 
| --- | --- | --- | --- | --- | 
|  `p_obj_name`  |  varchar2  |  —  |  是  |  要從其授予權限的來源物件名稱。物件可以是目錄、函數、套件、程序、順序、資料表或檢視。物件名稱的拼寫必須完全符合 `DBA_OBJECTS` 中的顯示內容。多數系統物件是以大寫定義，因此建議您先嘗試採用大寫。  | 
|  `p_grantee`  |  varchar2  |  —  |  是  |  要對其授予權限的目標物件名稱。物件可以是結構描述或角色。  | 
|  `p_privilege`  |  varchar2  |  null  |  是  |  —  | 
|  `p_grant_option`  |  布林值  |  false  |  否  |  設定為 `true` 以使用 WITH GRANT OPTION。  | 

下列範例會將名為 `V_$SESSION` 物件上的 SELECT 權限授予名為 `USER1` 的使用者。

```
begin
    rdsadmin.rdsadmin_util.grant_sys_object(
        p_obj_name  => 'V_$SESSION',
        p_grantee   => 'USER1',
        p_privilege => 'SELECT');
end;
/
```

下列範例會將名為 `V_$SESSION` 物件上的 SELECT 權限授予名為 `USER1` 且擁有 GRANT OPTION 的使用者。

```
begin
    rdsadmin.rdsadmin_util.grant_sys_object(
        p_obj_name     => 'V_$SESSION',
        p_grantee      => 'USER1',
        p_privilege    => 'SELECT',
        p_grant_option => true);
end;
/
```

您必須使用 GRANT OPTION 或透過使用 `with admin option` 授予的角色直接將這些權限授予帳戶，才能夠在物件上授予權限。在最常見的情況下，您可能需要在獲授予 `SELECT` 角色的 DBA 檢視上授予 `SELECT_CATALOG_ROLE`。如果您尚未使用 `with admin option` 將該角色直接授予使用者，則無法轉移權限。如果您擁有 DBA 權限，就能夠將該角色直接授予另一位使用者。

下列範例會授予 `SELECT_CATALOG_ROLE` 和 `EXECUTE_CATALOG_ROLE` 給 `USER1`。由於使用了 `with admin option`，`USER1` 現在可以將存取權授予給已獲授予 `SELECT_CATALOG_ROLE` 的 SYS 物件。

```
GRANT SELECT_CATALOG_ROLE TO USER1 WITH ADMIN OPTION; 
GRANT EXECUTE_CATALOG_ROLE to USER1 WITH ADMIN OPTION;
```

已獲授予 `PUBLIC` 的物件不需要重新授予。如果使用 `grant_sys_object` 程序來重新授予存取，則程序呼叫會成功。