Como gerencio privilégios e perfis de usuário em minha instância de banco de dados do Amazon RDS para Oracle?
Quero gerenciar privilégios e perfis de usuário na minha instância de banco de dados do Amazon Relational Database Service (Amazon RDS) para Oracle.
Breve descrição
Como o Amazon RDS é um serviço gerenciado, não é possível usar usuários SYS e SYSTEM por padrão.
Para ver a lista de perfis e privilégios que o banco de dados Amazon RDS para Oracle concede ao usuário principal, consulte Privilégios da conta de usuário principal. Para obter uma lista de privilégios que o banco de dados do Amazon RDS para Oracle não concede ao perfil de administrador do banco de dados (DBA), consulte Limitações para privilégios do Oracle DBA.
Resolução
Observação: nas seções a seguir, substitua EXAMPLE-USERNAME pelo nome de usuário ao qual você está concedendo ou revogando privilégios.
Conceder privilégios
Para conceder privilégios em objetos SYS, use o procedimento do Amazon RDS rdsadmin.rdsadmin_util.grant_sys_object. O procedimento concede somente privilégios que o usuário principal já tem.
Para conceder o privilégio SELECT no objeto V_$SQLAREA a um usuário, faça login como usuário principal do RDS. Em seguida, execute o seguinte comando:
EXECUTE rdsadmin.rdsadmin_util.grant_sys_object( p_obj_name => 'V_$SQLAREA',p_grantee => 'EXAMPLE-USERNAME', p_privilege => 'SELECT');
Para conceder o privilégio SELECT no objeto V_$SQLAREA a um usuário com a opção grant, execute o seguinte comando:
EXECUTE rdsadmin.rdsadmin_util.grant_sys_object( p_obj_name => 'V_$SQLAREA',p_grantee => 'EXAMPLE-USERNAME', p_privilege => 'SELECT', p_grant_option => true);
Observação: a menos que você tenha criado o usuário com um identificador que diferencia maiúsculas de minúsculas, use maiúsculas para definir todos os valores dos parâmetros.
Para conceder os perfis SELECT_CATALOG_ROLE e EXECUTE_CATALOG_ROLE a um usuário com a opção admin, execute os seguintes comandos:
SQL> GRANT SELECT_CATALOG_ROLE TO EXAMPLE-USERNAME WITH ADMIN OPTION; SQL> GRANT EXECUTE_CATALOG_ROLE TO EXAMPLE-USERNAME WITH ADMIN OPTION;
O usuário pode então conceder acesso aos mesmos objetos SYS que os perfis SELECT_CATALOG_ROLE e EXECUTE_CATALOG_ROLE.
Para visualizar as concessões associadas a SELECT_CATALOG_ROLE, execute os seguintes comandos:
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;
Para obter mais informações, consulte Concessão de privilégios SELECT ou EXECUTE a objetos SYS.
Para revogar privilégios em um único objeto, use o procedimento RDS rdsadmin.rdsadmin_util.revoke_sys_object.
Para revogar os privilégios SELECT do usuário em V_$SQLAREA, execute os seguintes comandos:
EXECUTE rdsadmin.rdsadmin_util.revoke_sys_object( p_obj_name => 'V_$SQLAREA', p_revokee => 'EXAMPLE-USERNAME', p_privilege => 'SELECT');
Para obter mais informações, consulte Revogar privilégios SELECT ou EXECUTE em objetos SYS.
Redefinir os privilégios do usuário principal
Se você revogou os perfis e os privilégios do usuário principal, poderá redefini-los. Para obter mais informações, consulte Como faço para redefinir a senha de usuário administrador da minha instância de banco de dados Amazon RDS?
Conceder RDS_MASTER_ROLE ao usuário principal
Não é possível conceder o perfil RDS_MASTER_ROLE a usuários não principais. Quando você cria a instância de banco de dados, o SYS cria RDS_MASTER_ROLE por padrão. É possível conceder RDS_MASTER_ROLE somente ao usuário principal. Para listar os usuários aos quais você concedeu RDS_MASTER_ROLE, execute o seguinte comando:
SQL> SELECT * FROM sys.dba_role_privs WHERE granted_role = 'RDS_MASTER_ROLE';
Exemplo de saída:
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
Como o usuário principal não tem a opção admin, não é possível conceder RDS_MASTER_ROLE a nenhum outro usuário. Para obter mais informações, consulte Concessão de privilégios a usuários não principais.
Revogar os privilégios do perfil PUBLIC nos principais pacotes DBMS_* e UTL_*
Não é uma prática recomendada revogar os privilégios do perfil PUBLIC nos principais pacotes DBMS_* e UTL_* porque várias aplicações Oracle dependem desses privilégios. Os principais pacotes DBMS_* e UTL_* incluem UTL_TCP, UTL_HTTP, HTTPURITYPE, UTL_INADDR, UTL_SMTP, DBMS_LDAP, DBMS_LOB, UTL_FILE, DBMS_ADVISOR, DBMS_OBFUSCATION_TOOLKIT, DBMS_BACKUP_RESTORE e DBMS_SYS_SQL.
Resolver o erro "invalid schema" ao criar um perfil com uma senha
Por exemplo, você usou rdsadmin_util.grant_sys_object para criar um perfil com senha e conceder privilégios nos seguintes comandos:
SQL> CREATE ROLE ROLE_NAME IDENTIFIED BY EXAMPLE-PASSWORD; SQL> EXEC rdsadmin.rdsadmin_util.grant_sys_object('DBMS_JOB', 'ROLE_NAME');
Na saída do comando, você recebe o seguinte erro:
"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"
Para resolver esse problema, execute o comando a seguir para criar um perfil sem senha:
SQL> ALTER ROLE ROLE_NAME NOT IDENTIFIED;
Resolver o erro "ORA-01031: insufficient privileges"
Veja a seguir exemplos de casos de uso que podem resultar no erro ORA-01031.
Você executa o comando ALTER SYSTEM SET
O erro ORA-01031 ocorre quando você executa o seguinte comando:
SQL> ALTER SYSTEM SET processes=200 scope=spfile;
Porém, não é possível alterar os valores de parâmetros em um grupo de parâmetros de banco de dados padrão. Ao invés disso, altere valores de parâmetros em um grupo de parâmetros de banco de dados personalizado.
Você usa um gatilho de banco de dados e suas alterações na estrutura da tabela subjacente alteram o status do gatilho para INVALID
Na próxima vez que um evento liberar o gatilho, a compilação implícita dele falhará com o seguinte erro:
"ORA-04045: errors during recompilation/revalidation of SCOTT.ERROR_LOG_TRIGORA-01031: insufficient privileges"
Para resolver esse problema, execute o comando a seguir para conceder explicitamente o privilégio de gatilho de administração do banco de dados ao proprietário do gatilho para que o proprietário possa alterar o gatilho do banco de dados:
SQL> GRANT ADMINISTER DATABASE TRIGGER TO example-owner; SQL> ALTER TRIGGER example-owner.log_errors_trig COMPILE;
Saída esperada:
Trigger altered.
Você executa um procedimento armazenado
Você recebe o erro "ORA-01031" porque não é possível usar os privilégios obtidos de perfis em procedimentos armazenados nomeados que são executados com os direitos do definidor. Em vez disso, use privilégios que você obtém de perfis no SQL Plus e em blocos PL/SQL anônimos.
O procedimento armazenado a seguir falha porque o usuário usa privilégios de um perfil que está em um procedimento armazenado nomeado para criar uma tabela. O usuário então descarta a tabela e tenta usar o procedimento armazenado para criar a mesma tabela:
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
A saída mostra o seguinte erro:
"Error report -ORA-01031: insufficient privileges"
Para resolver esse problema, conecte-se como usuário principal e execute o seguinte comando para conceder o privilégio CREATE TABLE:
SQL> GRANT CREATE TABLE TO test_user;
Execute o comando a seguir para executar o procedimento armazenado:
SQL> EXEC TEST_PROC
Saída esperada:
PL/SQL procedure successfully completed.
Você não concede privilégios ao usuário principal com a opção grant
O erro "ORA-04043" ocorre quando você não concede ao usuário principal um privilégio com a opção grant em um objeto.
O exemplo de procedimento de concessão a seguir falha porque o usuário principal não tem o privilégio SELECT com a opção de grant no objeto DBA_TABLESPACE_USAGE_METRICS:
SQL> SHOW USER; USER is \"EXAMPLE-USERNAME\" SQL> SELECT * FROM SYS.DBA_TABLESPACE_USAGE_METRICS;
A saída mostra a mensagem de erro "ERROR: ORA-04043: object "SYS"."DBA_TABLESPACE_USAGE_METRICS" does not exist".
Quando o usuário principal tenta conceder a outro usuário o privilégio SELECT no objeto DBA_TABLESPACE_USAGE_METRICS, o usuário principal recebe o erro "ORA-01031: insufficient privileges".
Para resolver esse problema, execute os seguintes comandos para conceder explicitamente o privilégio SELECT com a opção grant ao usuário principal:
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;
Depois de conceder os privilégios SELECT, o usuário principal poderá executar o comando SELECT:
SQL> SELECT * FROM SYS.DBA_TABLESPACE_USAGE_METRICS;
Informações relacionadas
Configuring privilege and role authorization (Configuração da autorização de privilégios e funções) no site da Oracle
- Idioma
- Português
Vídeos relacionados


Conteúdo relevante
- Resposta aceita
feita há 9 meses
feita há um ano
feita há um ano