

# Concessão de privilégios SELECT ou EXECUTE a objetos SYS
<a name="Appendix.Oracle.CommonDBATasks.TransferPrivileges"></a>

Normalmente, você transfere privilégios usando funções, que podem conter muitos objetos. Para conceder privilégios a um único objeto, use o procedimento do Amazon RDS `rdsadmin.rdsadmin_util.grant_sys_object`. O procedimento concede apenas privilégios já concedidos ao usuário mestre por uma função ou por uma concessão direta. 

O procedimento `grant_sys_object` tem os seguintes parâmetros. 

**Importante**  
Para todos os valores de parâmetro, use letras maiúsculas, a menos que você tenha criado o usuário com um identificador que diferencia letras maiúsculas de minúsculas. Por exemplo, se você executar `CREATE USER myuser` ou `CREATE USER MYUSER`, o dicionário de dados armazenará `MYUSER`. No entanto, se você usar aspas duplas em `CREATE USER "MyUser"`, o dicionário de dados armazenará `MyUser`.


****  

| Nome do parâmetro | Tipo de dados | Padrão | Obrigatório | Descrição | 
| --- | --- | --- | --- | --- | 
|  `p_obj_name`  |  varchar2  |  —  |  Sim  |  O nome do objeto ao qual conceder privilégios. O objeto pode ser um diretório, uma função, um pacote, um procedimento, uma sequência, uma tabela ou uma visualização. Os nomes dos objetos devem ser expressos exatamente como eles aparecem em `DBA_OBJECTS`. Como a maioria dos objetos do sistema é definida em maiúsculas, recomendamos que você tente isso primeiro.   | 
|  `p_grantee`  |  varchar2  |  —  |  Sim  |  O nome do objeto para o qual conceder privilégios. O objeto pode ser uma esquema ou um função.   | 
|  `p_privilege`  |  varchar2  |  nulo  |  Sim  |  —  | 
|  `p_grant_option`  |  booliano  |  false  |  Não  |  Defina como `true` para usar a opção de concessão.  | 

O exemplo a seguir concede privilégios de seleção em um objeto chamado `V_$SESSION` a um usuário chamado `USER1`.

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

O exemplo a seguir concede privilégios de seleção em um objeto chamado `V_$SESSION` a um usuário chamado `USER1` com a opção de concessão.

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

Para poder conceder privilégios a um objeto, sua conta deve ter esses privilégios concedidos a ela diretamente com a opção de concessão ou por meio de uma função concedida usando `with admin option`. No caso mais comum, você pode querer conceder `SELECT` em uma visualização de DBA que foi concedida à função `SELECT_CATALOG_ROLE`. Se essa função ainda não estiver diretamente concedida ao seu usuário usando `with admin option`, você não poderá transferir o privilégio. Se você tiver privilégios de DBA, poderá conceder a função diretamente a outro usuário. 

O exemplo a seguir concede `SELECT_CATALOG_ROLE` e `EXECUTE_CATALOG_ROLE` a `USER1`. Com o `with admin option` é usado, `USER1` agora pode conceder acesso a objetos SYS que foram concedidos a `SELECT_CATALOG_ROLE`. 

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

Objetos já concedidos a `PUBLIC` não precisam ser novamente concedidos. Se você usar o procedimento `grant_sys_object` para conceder acesso novamente, a chamada de procedimento será bem-sucedida. 