Como conceder privilégio de objeto SELECT em uma ou mais tabelas a um usuário

 



Resumo : neste tutorial, você aprenderá como usar a GRANTinstrução Oracle para conceder SELECTprivilégio de objeto em uma ou mais tabelas a um usuário.

Conceder SELECTem uma tabela a um usuário

Para conceder o SELECTprivilégio de objeto em uma tabela a um usuário ou função, use a seguinte instrução:

        
GRANT SELECT ON table_name TO {user | role};
Linguagem de código: SQL (Structured Query Language) ( sql )

O exemplo a seguir ilustra como conceder o SELECTprivilégio de objeto em uma tabela a um usuário.

Primeiro, crie um novo usuário chamado DWe conceda CREATE SESSIONao usuário:

        
CREATE USER dw IDENTIFIED BY abcd1234; GRANT CREATE SESSION TO dw;
Linguagem de código: SQL (Structured Query Language) ( sql )

Em segundo lugar, conceda o SELECTprivilégio de objeto na ot.customerstabela ao dwusuário:

        
GRANT SELECT ON customers TO dw;
Linguagem de código: SQL (Structured Query Language) ( sql )

Por fim, utilize o dwusuário para efetuar login no Banco de Dados Oracle e consultar os dados da ot.customerstabela:

        
SELECT COUNT(*) FROM ot.customers;
Linguagem de código: SQL (Structured Query Language) ( sql )

Aqui está a saída:

        
COUNT(*) ---------- 319
Linguagem de código: SQL (Structured Query Language) ( sql )

Conceder SELECTtodas as tabelas em um esquema a um usuário

Às vezes, você deseja conceder SELECTem todas as tabelas que pertencem a um esquema ou usuário para outro usuário. Infelizmente, o Oracle não oferece suporte direto a isso usando uma única instrução SQL.

Para contornar isso, você pode selecionar todos os nomes de tabela de um usuário (ou um esquema) e conceder o SELECTprivilégio de objeto em cada tabela a um beneficiário.

O procedimento armazenado a seguir ilustra a ideia:

        
CREATE PROCEDURE grant_select( username VARCHAR2, grantee VARCHAR2) AS BEGIN FOR r IN ( SELECT owner, table_name FROM all_tables WHERE owner = username ) LOOP EXECUTE IMMEDIATE 'GRANT SELECT ON '||r.owner||'.'||r.table_name||' to ' || grantee; END LOOP; END;
Linguagem de código: SQL (Structured Query Language) ( sql )

Este exemplo concede os SELECTprivilégios de objeto de todas as tabelas que pertencem ao usuário OTpara o usuário DW:

        
EXEC grant_select('OT','DW');
Linguagem de código: SQL (Structured Query Language) ( sql )

Quando você usa o usuário DWpara efetuar login no banco de dados Oracle, o usuário DWdeve ter o SELECTprivilégio de objeto em todas as tabelas do OTesquema do.

Neste tutorial, você aprendeu como conceder o SELECTprivilégio de objeto em uma ou mais tabelas a um usuário.

Close Menu