

# SYS オブジェクトへの SELECT または EXECUTE 権限の付与
<a name="Appendix.Oracle.CommonDBATasks.TransferPrivileges"></a>

通常多くのオブジェクトを含めることができるロールを使用して権限を転送します。1 つのオブジェクトへ権限を付与するには、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`  |  boolean  |  false  |  いいえ  |  付与オプションで使用するには、`true` に設定します。  | 

次の例では、オブジェクト `V_$SESSION` に対する選択権限をユーザー `USER1` に付与します。

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

次の例では、付与オプションを使用して、オブジェクト `V_$SESSION` に対する選択権限をユーザー `USER1` に付与します。

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

オブジェクトに対して権限を付与するには、付与オプションまたは `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` プロシージャを使用してアクセスを再許可すると、プロシージャの呼び出しは成功します。