Grant - Revoke

DBA Geral (instalação, configuração do banco, scripts do Sql*Plus, shell scripts, batch scripts, etc...)
Responder
Dulima-SP
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 193
Registrado em: Qui, 24 Jan 2008 1:56 pm
Localização: SP

Saudação Galera.

Eu procurei, li mais ficou Confuso...

Como funciona e Revogação de Previlegio se Objetos...
Ex, se eu 'DBA' Concedo Permissão de inserção a um Usuario com esse Comando

Selecionar tudo

GRANT INSERT ON CLIENTES TO USER2 WITH GRANT OPTION;
O user dois podera repassar essa Permissão
Certo?
E se eu Revogar o Insert para esse Usuario???
os Usuario que eu Concedeu tal permissão tmb perderão o Direito de inserir na Tabela Cliente???

porque isso não Ocorre em Previlegios de Sistemas???

Espero não ter Postado em local Errado....




Informações do Ambiente:
* Versão do Oracle: 10g
* Sistema Operacional: Win 2003 Sever
ruevers
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 324
Registrado em: Sex, 02 Jun 2006 1:48 pm
Localização: sp
Contato:

Concedeu permissão, já era, não perde.
Dulima-SP
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 193
Registrado em: Qui, 24 Jan 2008 1:56 pm
Localização: SP

Mesmo permissão de Objetos???

Comandos DML não existe Revoke em CASCATA?????
gokden
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 264
Registrado em: Dom, 19 Ago 2007 8:18 pm
Localização: Ribeirão Preto - SP
Lucas de Souza

OCA Developer
Analista de sistemas

Existe sim....
o dono da tab1 é o user1.
faiz de conta que o user1 executou este comando:

Selecionar tudo

GRANT ALL ON tab1 TO user2 WITH GRANT OPTION
ai o user2 executa este:

Selecionar tudo

GRANT ALL ON tab1 TO user3 WITH GRANT OPTION
ai o user1 executa este:

Selecionar tudo

REVOKE ALL ON tab1 FROM user2
ai o user3 também perde os privilegios....

para que isso não acontece você deve colocar no lugar de "WITH GRANT OPTION" põe "WITH ADMIN OPTION"

eu li isso e também ficou um pouco confuso pra mim.... mais eu intendi assim...
se eu estiver errado me corrijam... =D
ruevers
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 324
Registrado em: Sex, 02 Jun 2006 1:48 pm
Localização: sp
Contato:

Pensa um pouco...passado é passado, futuro é futuro..

teve um filho com uma mulher(deu um grant).
Se separou...não vai ter outro filho...
mas o que tinha continua certo??
Esse ponto ficou claro agora?
gokden
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 264
Registrado em: Dom, 19 Ago 2007 8:18 pm
Localização: Ribeirão Preto - SP
Lucas de Souza

OCA Developer
Analista de sistemas

Bom cara, pelo qui eu testei aqui....
o qui eu disse está correto, menos a parte do "WITH ADMIN OPTION" qui parece qui eu inventei isso hehehehe...

mais se você dá um grant sem o WITH GRANT OPTION o user2 não consegue passar esses grants para ninguém... =D
Dulima-SP
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 193
Registrado em: Qui, 24 Jan 2008 1:56 pm
Localização: SP

Bom mais ai entramos em um Desacordo.....
essa "Função" -> "WITH ADMIN OPTION" ou WITH GRANT OPTION
não quer Dizer com opção de Conceder???

gokden
pelo o que você Passou anteriormente esta Certo.

Ate onde a minha ignorância deixa a Diferença entre as "Funções" a Cima é:

WITH ADMIN OPTION
O Usuario que um recebe esse Privilegio com essa Extensão tem a Opção de repassar e mesmo Privilegio para frente. Porem essa Extensão só e para Previlegios de Sistemas.
Create user, Create table etc.. etc...

WITH GRANT OPTION
O Usuario que um recebe esse Privilegio com essa Extensão tem a Opção de repassar e mesmo Privilegio para frente. Porem essa Extensão só e para Previlegios de Objetos....
GRANT Insert, GRANT update etc.. etc...

Procurando e Fuçando eu achei o que eu Queria...
Ou Seja Rovake de Objeto e em Cascata.

Abaixo segue alguns exercidos que podem esclarecer essa Duvida!!
Desde de já Agradeço a todos mais lembrando.....

Se estiver escrevendo m***a!!
Fico no Aguardo de Respostas...

1. Criar usuários USER1, USER2, USER3, USER4, USER5.

Selecionar tudo

CONNECT SYSTEM/ORACLE@DBSEGUR
CREATE USER1 IDENTIFIED BY USER1;
.......
2. Conceder as roles básicas principais para os usuários:

Selecionar tudo

GRANT CONNECT, RESOURCE, UNLIMITED TABLESPACE TO USER1,
USER2, USER3, USER4, USER5;
3. Conectar como USER1 e criar os objetos:

Selecionar tudo

CONNECT USER1/USER1@DBSEGUR
CREATE TABLE CLIENTES (COD NUMBER, NOME VARCHAR2(10));
GRANT SELECT ON CLIENTES TO USER2, USER3;
GRANT INSERT ON CLIENTES TO USER2 WITH GRANT OPTION;
INSERT INTO CLIENTES VALUES (1, ‘JOSE’);
4. Conectar como USER2 e USER3 e consultar a tabela. Funcionou? Por que?

Selecionar tudo

CONNECT USER2/USER2@DBSEGUR
SELECT * FROM USER1.CLIENTES;
5. Tentar inserir e apagar dados na tabela com USER2. Funcionou? Por que?

Selecionar tudo

CONNECT USER2/USER2@DBSEGUR
INSERT INTO USER1.CLIENTES VALUES (2,’MARIA’);
6. Repetir o exercício anterior com USER3. Funcionou? Por que?

7. Conectar como USER2 e conceder o privilégio para o USER3. Funcionou? Por
que?

Selecionar tudo

CONNECT USER2/USER2@DBSEGUR
GRANT INSERT ON USER1.CLIENTES TO USER3;
8. Inserir registro como USER3:

Selecionar tudo

CONNECT USER3/USER3@DBSEGUR
INSERT INTO USER1.CLIENTES VALUES (3,’PEDRO’);
9. Como USER1, revogar privilégio do USER2:

Selecionar tudo

CONNECT USER1/USER1@DBSEGUR
REVOKE INSERT ON USER1.CLIENTES FROM USER2;
aqui esta o X da Questão..

10. Conectar como USER2 e USER3 e inserir na tabela. Funcionou? Por que?

Selecionar tudo

CONNECT USER2/USER2@DBSEGUR
INSERT INTO USER1.CLIENTES VALUES (4,’JOANA’);
11.Como SYSTEM, criar role ACESSO_CLIENTES;

Selecionar tudo

CONNECT SYSTEM/ORACLE@DBSEGUR
CREATE ROLE ACESSO_CLIENTES;
GRANT ALL ON USER1.CLIENTES TO ACESSO_CLIENTES;
GRANT ACESSO_CLIENTES TO USER4;
12.Como USER4, consultar a tabela CLIENTES. Funcionou? Por que?

13. Manter o USER4 conectado, e em outra sessão como SYSTEM, revogar a role:

Selecionar tudo

CONNECT SYSTEM/ORACLE@DBSEGUR
REVOKE ACESSO_CLIENTES FROM USER4;
14.Na mesma sessão mantida como USER4, consultar novamente a tabela. O acesso foi perdido? Por que?

15.Desconectar o USER4 e reconectar. Testar novamente a consulta. O que mudou?

16.Como SYSTEM, Conceder privilégio de criar usuários para USER2, e este concederá para USER3:

Selecionar tudo

CONNECT SYSTEM/ORACLE@DBSEGUR
GRANT CREATE USER TO USER2 WITH ADMIN OPTION;
CONNECT USER2/USER2@DBSEGUR
GRANT CREATE USER TO USER3;
17.Criar usuários conectado como USER2 e USER3.

Selecionar tudo

CONNECT USER2/USER2@DBSEGUR
CREATE USER USER11 IDENTIFIED BY USER11;
18.Como SYSTEM, REVOGAR O privilégio de criar usuários de USER2.

19. Tentar criar outros usuários como USER2 e USER3. Funcionou? Por que?

Selecionar tudo

CONNECT USER2/USER2@DBSEGUR
CREATE USER USER13 IDENTIFIED BY USER13;
20.Criar a role R_SISTEMA com senha e conceder privilégios de DELETE:

Selecionar tudo

CONNECT SYSTEM/ORACLE@DBSEGUR
CREATE ROLE R_SISTEMA IDENTIFIED BY A12345;
GRANT ALL ON USER1.CLIENTES TO R_SISTEMA;
21.Conceder a role R_SISTEMA como não-default para o usuário USER5.

Selecionar tudo

GRANT R_SISTEMA TO USER5;
ALTER USER USER5 DEFAULT ROLE ALL EXCEPT R_SISTEMA;
22.Conectar como USER5 e tentar consultar a tabela. Funcionou? Por que?

Selecionar tudo

CONNECT USER5/USER5@DBSEGUR
SELECT * FROM USER1.CLIENTES;
23. Ligando a role, a consulta funciona. Porém, somente através do sistema o usuário poderia fazer isso, por segurança:

Selecionar tudo

SET ROLE R_SISTEMA IDENTIFIED BY A12345;
SELECT * FROM USER1.CLIENTES;
24. Consultar o dicionário de dados para verificar os privilégios de cada usuário:

Selecionar tudo

SELECT * FROM DBA_ROLE_PRIVS WHERE GRANTEE LIKE ‘USER%’;
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE LIKE ‘USER%’;
SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE LIKE ‘USER%’;
25. Remover os usuários criados:

Selecionar tudo

DROP USER USER1 CASCADE;
DROP USER USER2 CASCADE;
DROP USER USER3 CASCADE;
DROP USER USER4 CASCADE;
DROP USER USER5 CASCADE;


vocês que são bem mais experientes...
Estou correto sobre a teoria de que Revoke de Objeto e em Cascata????
diegoleite
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 115
Registrado em: Sáb, 10 Nov 2007 2:54 pm
Localização: rio de janeiro
Att,


Diego Leite
DBA ORACLE

Selecionar tudo

GRANT CREATE SESSION TO USER2;
então vamos para o que interessa...

Se eu como dba dou o grant de select em uma tabela para você. e eu gostaria que você repassase esse privilegio para outros usuarios seria dessa forma.certo??!!

Selecionar tudo

GRANT SELECT ON TAB1 TO você WITH GRANT OPTION;  

caso negativo. não pode passar esse priv para nenhum outro usuario.

Selecionar tudo

GRANT SELECT ON TAB1 TO você;
se você passar esse privilegio para um outro usuario e eu revogar o seu privilegio o usuario que você passou o privilegio ele não perdera o privilegio que você passou para ele.

A Pergunta é porque não criar uma role??!! e dar o privilegio ah role?!
E Gerenciar os privilegios via role.

Espero Ter ajudado..
diegoleite
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 115
Registrado em: Sáb, 10 Nov 2007 2:54 pm
Localização: rio de janeiro
Att,


Diego Leite
DBA ORACLE

ops o cara acima deu uma aula... eu dando uma humilde explicação agora que vi ^^
diegoleite
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 115
Registrado em: Sáb, 10 Nov 2007 2:54 pm
Localização: rio de janeiro
Att,


Diego Leite
DBA ORACLE

Voltando a minha tentativa de explicação acima. cujo esta cortada.. =(

grant option - é Privilegio de Objeto

Selecionar tudo

GRANT SELECT,INSERT DELETE,UPDATE, ALTER,REFERENCE ON TAB1 TO USER2; 
admin option - é privilegio de sistema

Selecionar tudo

GRANT CREATE SESSION TO USER2;
então vamos para o que interessa...

Se eu como dba dou o grant de select em uma tabela para você. e eu gostaria que você repassase esse privilegio para outros usuarios seria dessa forma.certo??!!

Selecionar tudo

GRANT SELECT ON TAB1 TO você WITH GRANT OPTION;  

caso negativo. não pode passar esse priv para nenhum outro usuario.

Selecionar tudo

GRANT SELECT ON TAB1 TO você;
se você passar esse privilegio para um outro usuario e eu revogar o seu privilegio o usuario que você passou o privilegio ele não perdera o privilegio que você passou para ele.


Espero Ter ajudado..
Dulima-SP
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 193
Registrado em: Qui, 24 Jan 2008 1:56 pm
Localização: SP

OBS..
não dei Aula...

To aprendendo com vocês....

Olha o que eu achei no Site da Oracle

If that user has granted that privilege to other users or roles, then the database also revokes the privilege from those other users or roles.



http://download.oracle.com/docs/cd/B283 ... s_9020.htm[/url]
diegoleite
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 115
Registrado em: Sáb, 10 Nov 2007 2:54 pm
Localização: rio de janeiro
Att,


Diego Leite
DBA ORACLE

Desculpe cara.. também estou aprendendo porem me equivoquei.

Realmente o Privilegio de Objeto - O Revoke ira agir em cascata.

Fiz um teste pois quando respondi não estava muito seguro e como estava ocupado, não tive como pesquisar para você..Certamente errado..

Agora é Certo Veja o Exemplo... no final você podera ver que eu revoguei o privilegio do user2 e o user3 perdeu o privilegio.

Porem isso so acontece com o privilegio de objeto - Grant Option..

Privilegio de Sistema - Admin Option não é cascata.

Selecionar tudo

conn system/manager

SQL> create user user1 identified by user1;

Usuário criado.

SQL> create user user2 identified by user2;

Usuário criado.

SQL> create user user3 identified by user3;

Usuário criado.

SQL> grant dba to user1;

Concessão bem-sucedida.


SQL> conn user1/user1
Conectado.

SQL> create table teste
  2  (c1 number,
  3   c2 number);

Tabela criada.


SQL> grant insert on teste to user2 with grant option;

Concessão bem-sucedida.

SQL> conn user2/user2
Conectado.
SQL> insert into user1.teste values(1,2);

1 linha criada.

SQL> commit;

Commit concluído.



SQL> grant insert on user1.teste to user3 with grant option
SQL> /

Concessão bem-sucedida.

SQL> show user
USER é "USER2"
SQL> 
SQL> conn user3/user3
Conectado.
SQL> insert into user1.teste values(1,3);

1 linha criada.

SQL> commit;

Commit concluído.

SQL> 
SQL> conn user1/user1
Conectado.
SQL> 
SQL> revoke insert on user1.teste from user2;

Revogação bem-sucedida.

SQL> conn user2/user2
Conectado.
SQL> insert into user1.teste values(1,4);
insert into user1.teste values(1,4)
                  *
ERRO na linha 1:
ORA-00942: a tabela ou view não existe


SQL> commit;

Commit concluído.

SQL> conn user3/user3
Conectado.
SQL> insert into user1.teste values(1,5);
insert into user1.teste values(1,5)
                  *
ERRO na linha 1:
ORA-00942: a tabela ou view não existe


SQL> commit;

Commit concluído.


SQL> conn user1/user1
Conectado.
SQL> select * from teste;

        C1         C2
---------- ----------
         1          3
         1          2

Espero ter ajudado...
Dulima-SP
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 193
Registrado em: Qui, 24 Jan 2008 1:56 pm
Localização: SP

Desculpe cara.. também estou aprendendo porem me equivoquei.
Para com isso Rapaz....
Final do ANO entro para esse TIME de DBA's rsss

Realmente "minha" Teoria Estava correta!!!

Agradeço a Colaboração de Todos....

Obs
Assim e Facil aprender..

Vlw Galera!!!
ruevers
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 324
Registrado em: Sex, 02 Jun 2006 1:48 pm
Localização: sp
Contato:

Criança,
está certo, provou a parada, mas pensa bem ...se não seria melhor se fosse do outro jeito.
Infelizmente não tenho tempo de testar, mas e se desse um lock account, o que será que aconteceria.
Dulima-SP
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 193
Registrado em: Qui, 24 Jan 2008 1:56 pm
Localização: SP

Uma Pergunta para se pensar...
aqui não tenho Previlegios para esses testes....

Assim que chegar na Facul eu testo o Joga o Resultado aqui!!!!!
gokden
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 264
Registrado em: Dom, 19 Ago 2007 8:18 pm
Localização: Ribeirão Preto - SP
Lucas de Souza

OCA Developer
Analista de sistemas

Pronto pessoal, eu já tinha testado antes de postar a minha explicação
mais agorei eu re-testei e vou postar o spool para vocês....

e para eu não escrever tudo dinovo, a minha explicação lá em cima sobre o "WITH GRANT OPTION" está correta :o

Selecionar tudo

USUARIO_ADM-sfcnbr> grant all on TABELA to USER1 with grant option;

Grant succeeded.

USUARIO_ADM-sfcnbr> conn USER1
Connected.
USER1-sfcnbr> select table_name, grantor, privilege from user_tab_privs;

TABLE_NAME                     GRANTOR                        PRIVILEGE                                                       ------------------------------ ------------------------------ ----------------------------------------                        TABELA                         USUARIO_ADM                     ALTER                                                          TABELA                         USUARIO_ADM                     DELETE                                                         TABELA                         USUARIO_ADM                     INDEX                                                          TABELA                         USUARIO_ADM                     INSERT                                                         TABELA                         USUARIO_ADM                     SELECT                                                         TABELA                         USUARIO_ADM                     UPDATE                                                         TABELA                         USUARIO_ADM                     REFERENCES                                                                                                                                                                                    
TABLE_NAME                     GRANTOR                        PRIVILEGE                                                       ------------------------------ ------------------------------ ----------------------------------------                        TABELA                         USUARIO_ADM                     ON COMMIT REFRESH                                              TABELA                         USUARIO_ADM                     QUERY REWRITE                                                  TABELA                         USUARIO_ADM                     DEBUG                                                          TABELA                         USUARIO_ADM                     FLASHBACK                                                                                                                                                                                     12 rows selected.

USER1-sfcnbr> grant all on USUARIO_ADM.TABELA to USER2;

Grant succeeded.

USER1-sfcnbr> conn USER2
Connected.
USER2-sfcnbr> select table_name, grantor, privilege from user_tab_privs;

TABLE_NAME                     GRANTOR                        PRIVILEGE                                                       ------------------------------ ------------------------------ ----------------------------------------                        TABELA                         USER1                          DELETE                                                          TABELA                         USER1                          INDEX                                                           TABELA                         USER1                          INSERT                                                          TABELA                         USER1                          SELECT                                                          TABELA                         USER1                          UPDATE                                                          TABELA                         USER1                          REFERENCES                                                      TABELA                         USER1                          ON COMMIT REFRESH                                               TABELA                         USER1                          QUERY REWRITE                                                                                                                                                                                 TABLE_NAME                     GRANTOR                        PRIVILEGE                                                       ------------------------------ ------------------------------ ----------------------------------------                        TABELA                         USER1                          DEBUG                                                           TABELA                         USER1                          FLASHBACK                                                       TABELA                         USER1                          ALTER                                                                                                                                                                                         11 rows selected.

USER2-sfcnbr> conn USUARIO_ADM
Connected.


USUARIO_ADM-sfcnbr> revoke all on TABELA from USER1;

Revoke succeeded.

USUARIO_ADM-sfcnbr> conn USER1
Connected.
USER1-sfcnbr> select table_name, grantor, privilege from user_tab_privs;

no rows selected
                                                                                                                               USER1-sfcnbr> conn USER2
Connected.
USER2-sfcnbr> select table_name, grantor, privilege from user_tab_privs;

no rows selected

USER2-sfcnbr> spool off
assim a visualização não fica muito boa, mais você pode copiar e colar em um TXT e abrir em fullscreen qui fica joinha :wink:
Renan Orati
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 90
Registrado em: Qui, 23 Ago 2007 3:40 pm
Localização: São José do Rio Preto - SP

Bom dia galera!! =)

tenho uma grande dúvida!

Bom... de acordo com o nosso amigo Dulima-SP, nós podemos
alterar as ROLES DEFAULT !!! Muito bom! =D

Porém eu gostaria de setar apenas 1 role como "DEFAULT_ROLE = NO"

Se eu usar o comando:

Selecionar tudo

ALTER USER USER5 DEFAULT ROLE ALL EXCEPT MINHA_ROLE;
Isto fará com que todas as outras ROLES se tornem DEFAULT!!

Mas eu quero conservar a minha estrutura e alterar alenas a role "MINHA_ROLE" como "DEFAULT_ROLE = NO"!!!

Alguém tem alguma dica???
Dulima-SP
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 193
Registrado em: Qui, 24 Jan 2008 1:56 pm
Localização: SP
Dulima

DBA Oracle Jr

Renan...

não entendi
Descreve um Cenario....
NaPraia
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 88
Registrado em: Sex, 22 Fev 2008 8:24 am
Localização: Floripa - SC

Exemplo:

Selecionar tudo

CONNECT ALUNO3/SENHA3@ORACURSO;
GRANT UPDATE, DELETE ON classes TO aluno2;
GRANT ALL ON empregado TO scott;
GRANT SELECT ON classes TO aluno8 WITH GRANT OPTION;

CONNECT ALUNO8/SENHA8@ORACURSO;
GRANT SELECT ON aluno3.classes TO aluno9;
Como WITH GRANT OPTION foi especificada, então aluno8 poderá repassar o privilégio para outro usuário. Caso aluno8 perca o privilégio, aluno9 também o perderá. Isso não vale para WITH ADMIN OPTION, pois o privilégio continuará concedido.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 5 visitantes