AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 49171
Accepted
alok
alok
Asked: 2013-09-04 05:15:36 +0800 CST2013-09-04 05:15:36 +0800 CST 2013-09-04 05:15:36 +0800 CST

DB2 (LUW) equivalente para Oracle "drop user cascade"

  • 772

Esta questão está relacionada à criação e inicialização de bancos de dados de teste e desenvolvimento para um aplicativo que possui o banco de dados em execução no LUW (linux-unix-windows)

No oráculo temos

  • um usuário do sistema operacional (no linux) chamado oracle,
  • um usuário oracle admin chamado sysousystem
  • um usuário oracle predefinido fixo que é o proprietário do objeto do aplicativo, vamos chamá-loappowner
  • um usuário oracle que é o usuário da aplicação, ou seja, tem privilégios limitados nos objetos pertencentes ao appowner, vamos chamá-lo appuser

sempre que houver necessidade de inicializar o banco de dados, ou seja, começar do zero, primeiro nos conectamos ao oracle usando sysou systemoracle user e então executamos este comando:

DROP USER appowner CASCADE;

e então vamos recriar o usuário e os objetos que ele possui do zero. Também concedemos alguns privilégios aos appuserobjetos criados porappowner

O aplicativo sempre efetua login como, em appuservez de , a appownermenos que haja alguma tarefa administrativa a ser executada no banco de dados.

Agora estamos transferindo este aplicativo para o DB2, e é aqui que ficamos confusos.

Para iniciantes, o db2 cria esses usuários do sistema operacional, que também são usuários do db2:

dasusr1
db2inst1
db2fenc1

Como esses três usuários são mapeados para sys/ systeme ?appownerappuser

Eu acredito que dasusr1é o equivalente aproximado de sys/ system, db2inst1é o equivalente aproximado de appownere db2fenc1é o equivalente aproximado deappuser

(por favor, corrija-me se eu estiver errado, e eu aprecio plenamente que o mapeamento não seja exato)

Sendo esse o caso, se eu tiver que remover todos os objetos pertencentes a db2inst1, faço o login como dasusr1e descarto o usuário db2inst1?

Não há realmente um mapeamento um para um entre os usuários do oracle e os usuários do db2, porque

  • db2inst1pode criar vários bancos de dados enquanto appuseré mapeado para um banco de dados no oracle
  • dentro de um banco de dados db2, pode haver vários esquemas, enquanto no oracle, um usuário mapeia para um esquema

Então é um pouco confuso. Ajudaria se alguém com experiência em portar aplicativos do oracle para o db2 pudesse lançar alguma luz sobre a equivalência entre os usuários do db2 e do oracle, o que finalmente levaria a descobrir o equivalente do db2 para a cascata do usuário drop do oracle.

oracle schema
  • 2 2 respostas
  • 2982 Views

2 respostas

  • Voted
  1. Chris Aldrich
    2013-09-04T05:45:09+08:002013-09-04T05:45:09+08:00

    Pode ser útil revisar primeiro o DB2 em geral.

    Quando você instala o DB2, ele cria uma instância . Pense nisso como um "servidor". Uma instância pode ter de zero a muitos bancos de dados dentro dela (não posso dizer que conheço o limite). Quando você criou o DB2 localmente, ele criou uma instância para você chamada DB2. Normalmente, quando você instala o DB2 em um servidor Unix, você nomeia suas instâncias. Você pode ter mais de uma instância no mesmo servidor físico. Seu id dsinst1 é o "proprietário" da instância (geralmente a instância recebe o nome do ID que a possui). Você nunca deseja excluir esse ID sem descartar a instância ou pode acabar com alguns comportamentos muito estranhos. Este ID (já que é superior à instância) tem o poder de criar bancos de dados, mas não é obrigatório. Esta entrada de blog do colega usuário do DB2, Ember Crooksajuda a explicar o conceito de uma instância para aqueles mais familiarizados com o Oracle.

    As instâncias podem ter bancos de dados criados dentro delas. Voltaremos a isso mais tarde.

    O DAS (ou DB2 Administration Server) é realmente mais como um serviço. É o que permite que algumas das ferramentas da GUI, como o DB2 Control Center, façam interface com o DB2. Pelo que entendi, esse serviço não é necessário para a execução do DB2, mas geralmente é necessário para que os usuários finais interajam com o DB2 de uma perspectiva que não seja da linha de comando. (Mustaccio estou correto aqui?). Não importa quantas instâncias você tenha em uma caixa física, há apenas uma instalação do DAS. Esta instalação pode atender a todas as instâncias. Geralmente, é necessário um ID separado para executar o serviço DAS. Este é o seu dasusr1. Novamente, você não deseja excluir esse ID. Esse ID geralmente não tem autoridade para criar nenhum objeto em seu banco de dados.

    Agora, para o ID da cerca (ou seja, db2fenc1). Ter um desses é uma boa ideia. Ao criar uma instância, você pode especificar um ID de cerca. Se o fizer, torna-se esse ID. Caso contrário, o ID do proprietário da instância se tornará o ID da cerca. O ID de cerca é usado para executar determinados procedimentos armazenados no DB2. No DB2, há duas maneiras de executar procedimentos armazenados: protegido e não protegido. Unfenced significa que o procedimento armazenado é executado na memória do mecanismo do DB2. Ele será executado mais rapidamente, mas se o procedimento armazenado for mais do que SQL (ou seja, contiver código C++ ou Java, por exemplo) e travar, poderá ameaçar o mecanismo e realmente travar e causar danos. Os procedimentos armazenados limitados são executados fora da memória do mecanismo do DB2. Eles são, portanto, mais lentos, mas se travarem, não ameaçarão o mecanismo do DB2 porque foram executados em sua própria área de memória protegida.ADMIN_CMDprocedimento armazenado, o DB2 mudará o usuário para você de quem realmente executa a exportação. Isso ocorre porque você está fazendo E/S de arquivo e o DB2 deseja executar isso com proteção limitada para proteger o mecanismo. Portanto, mesmo se você estiver executando essa chamada de procedimento armazenado como o proprietário da instância, o DB2 alternará o ID para o ID limitado (sem chance de você alterar esse comportamento). Se você observar as permissões de quem possui o arquivo de exportação, notará que é o ID protegido, em vez do ID da instância (ou outro ID usado para disparar o procedimento armazenado). É claro que, se o ID da sua instância for o ID protegido, ele parecerá o mesmo para você.

    (grande respiração).

    OK. Então eu disse tudo isso para apresentá-lo ao DB2 em poucas palavras. Agora chegamos ao que você provavelmente está se preocupando - quem é o dono do quê? Qualquer ID que crie o banco de dados possui o banco de dados. Existem "grupos" que o DB2 aceita que geralmente têm DBADMautoridade (ou seja, administrador de banco de dados) para criar bancos de dados. Portanto, se você criou um banco de dados usando o ID do proprietário da instância, ele será o proprietário do banco de dados e de todos os objetos que ele criar no banco de dados. Se um ID diferente se conectar ao banco de dados (desde que tenha as permissões corretas), ele poderá criar objetos e possuí-los.

    Aqui está o interessante sobre grupos e IDs no DB2. Eles não são realmente objetos pelo que posso ver. Então você não pode deixá-los cair. Você também não pode criá-los (pelo menos pelo que posso ver). Quando você concede ou revoga uma permissão para um ID, o DB2 armazena a menção desse grupo ou ID. Mas o DB2 realmente não os "cria". Na maioria das vezes, vi o DB2 apontado para o sistema operacional ou para um LDAP ou ambos para autenticar os IDs. Se os IDs forem removidos, você deverá remover manualmente as permissões dos IDs e/ou transferir a propriedade dos objetos. Não há nada de mágico nisso aqui. Eu fiz uma pergunta semelhante relacionada a fazer um backup/restaurar para um sistema diferente e como isso afeta as permissões.

    E, finalmente, para seu comentário sobre esquemas, geralmente cada ID é mapeado para seu próprio esquema. Se o esquema existe ou não (criado pelo ID DBADM explicitamente ou pelo usuário final por meio da permissão IMPLICIT_SCHEMA) é outra questão. Geralmente, qualquer que seja o ID que se conecta a um banco de dados, o DB2 assume que o esquema é o mesmo que o ID do usuário e você precisa alternar os esquemas ( SET SCHEMA MYSCHEMA) ou mencionar explicitamente seus objetos ( SELECT * FROM MY_OTHER_SCHEMA.MY_TABLE) para trabalhar com eles.

    Espero que isto ajude.

    • 3
  2. Best Answer
    mustaccio
    2013-09-04T06:18:13+08:002013-09-04T06:18:13+08:00

    @Chris Aldrich deu uma boa explicação. Vou apenas acrescentar algumas coisas aqui.

    1) Não existe o conceito de "usuário do banco de dados" no DB2. Toda autenticação acontece fora do banco de dados ou instância, no sistema operacional. Além disso, não há relação direta entre um ID de usuário e um nome de esquema, ao contrário do Oracle. No DB2, um esquema é apenas um agrupamento lógico de objetos, não possui nenhum recurso de segurança especial. Qualquer usuário pode criar qualquer esquema. Por exemplo, enquanto logado como mustaccio , executo a instrução create table foo (id int...), e isso cria um esquema MUSTACCIO (se ainda não estiver lá) e uma tabela nele. Como você pode ver, a resolução do nome do esquema é padronizada para o meu ID de autorização . No entanto, também posso executar a instrução create table alok.foo (id char(3)...), que neste caso cria um esquema ALOK e a tabela nele. mustaccio será o dono de ambas as mesas.

    2) Em relação ao mapeamento do ID do usuário, eu provavelmente diria que o proprietário DAS dasusr1 e o usuário limitado db2fenc1 não mapeiam para nada em um banco de dados Oracle. O proprietário da instância db2inst1 é mapeado para o ID do usuário oracle . Quem cria um banco de dados (pode ser db2inst1 ou algum outro usuário autorizado a fazer isso por pertencer ao grupo SYSADM, por exemplo) obtém privilégios DBADM e SECADM nesse banco de dados, o que é um pouco semelhante a ser sistema e/ou sys (estou não tenho certeza qual é a diferença entre os dois em um banco de dados Oracle). Se você precisar de um ID funcional que possua objetos de banco de dados, crie appownerno sistema operacional, conceda a ele as permissões apropriadas e conecte-se a esse usuário ao criar objetos. Da mesma forma, você cria appuser no sistema operacional, concede privilégios de acesso de objeto a ele e permite que seu aplicativo se conecte como esse usuário.

    3) Como não há usuários de banco de dados no DB2, você não pode descartar um usuário. Para excluir objetos em um esquema específico, você pode usar o procedimento ADMIN_DROP_SCHEMA() .

    • 3

relate perguntas

  • Backups de banco de dados no Oracle - Exportar o banco de dados ou usar outras ferramentas?

  • ORDER BY usando prioridades personalizadas para colunas de texto

  • Interface sqlplus confortável? [fechado]

  • Como encontrar as instruções SQL mais recentes no banco de dados?

  • Como posso consultar nomes usando expressões regulares?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Conceder acesso a todas as tabelas para um usuário

    • 5 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve